¿Cómo seleccionar entre paréntesis (o comillas o ...) en Vim?


220

Estoy seguro de que solía haber un complemento para este tipo de cosas, pero ahora que lo necesito, parece que no puedo encontrarlo (naturalmente), así que solo preguntaré agradable y simple.

¿Cuál es la forma más fácil de seleccionar entre paréntesis, comillas o, en general, una lista de caracteres coincidentes?

   write ( *, '(a)' ) 'Computed solution coefficients:'

Por ejemplo, aquí me gustaría seleccionar (a), o Computed solution coefficients:.

No me interesan las líneas múltiples, solo los casos que ocurren en una línea.

Respuestas:


277

Use la tecla de navegación que desee ingresar entre paréntesis, luego puede usar cualquiera yi(o yi)copiar todo dentro de los pares coincidentes. Esto también funciona con corchetes (p yi]. Ej. ) Y llaves. Además de y, también puede eliminar o cambiar el texto (por ejemplo ci), di]).

Intenté esto con comillas dobles y simples y parece que también funciona allí. Para sus datos, hago:

write (*, '(a)') 'Computed solution coefficients:'

Mueva el cursor a C, luego escriba yi'. Mueva el cursor a una línea en blanco, presione py obtenga

Computed solution coefficients:

Como se señaló CMS , esto funciona para la selección del modo visual, así - el uso justo vi), vi}, vi', etc.


1
Generalmente busco una forma de seleccionar todo entre caracteres coincidentes predefinidos (normalmente solo comillas simples y dobles, y corchetes de todo tipo).
Rook

2
¿Qué quieres decir con palabras separadas? Lo probé en "[x, y, z]" y seleccionó "x, y, z"
Tim Whitcomb

44
Haga caso omiso del último comentario: descubrió cuál era el problema. Funciona como un encanto :-)
Rook

parece funcionar con comillas, así como yi"seleccionar todas las comillas
stefanB

ci(o lo ci)hace por lo que estaba buscando. Gracias. Todavía no entiendo completamente el icaso, pero a quién le importa mientras funcione, ¿verdad? :)
justnorris

279

Para seleccionar entre comillas simples, generalmente hago un vi' ("seleccionar comillas simples internas").

Dentro de un bloque de paréntesis, uso vib ("seleccionar bloque interno")

Dentro de un bloque de llaves puede usar viB("mayúscula B")

Para hacer las selecciones "inclusivas" (seleccione también las comillas, paréntesis o llaves) puede usar en alugar de i.

Puede leer más sobre las selecciones de objetos de texto en el manual o :help text-objectsen vim.


gracias por ese consejo, he estado buscando y pidiendo algo similar y no estaba satisfecho con mis resultados. Increíble.
alfredodeza

Este consejo es muy simple y fácil de comprometer dentro de mi memoria cerebral y muscular. Gracias.
Ghazaly

Este es un consejo muy útil. No más torpezas con pulsaciones de teclas adicionales. Gracias por el enlace.
Rai

27

Este método de selección está integrado y bien cubierto en la ayuda de Vim. Cubre etiquetas XML y más.

Ver :help text-objects.


1
: los objetos de texto de ayuda se acercan a las cosas útiles ... al menos podría mencionar algunos de los más comunes, como un "y un (cuando está en modo visual.)
Stobor

2
(También, 1 porque a pesar de ser un usuario vim desde hace mucho tiempo, yo no sabía acerca de estos!)
Stobor

@Stobor. Cheers arregló esa referencia
michael

21

Para seleccionar dentro de comillas simples use vi'.

Para seleccionar dentro del uso de paréntesis vi(.


3
Nota: ci'o ci(para cambiar en lugar de seleccionar visualmente. Pero hace exactamente lo que quería. Gracias :)
justnorris

El segundo solo funciona cuando está dentro de ese bloque (), así que generalmente lo hago %vi(o%vib
816-8055

7

Use las flechas o hjklpara llegar a una de las expresiones entre paréntesis, luego vpara seleccionar el modo visual (es decir, seleccionar), luego %para saltar al otro paréntesis.


55
(aunque no hace citas, desafortunadamente ...)
Stobor

3

Escriba una función Vim en .vimrc usando la searchpairfunción incorporada:

searchpair({start}, {middle}, {end} [, {flags} [, {skip}
            [, {stopline} [, {timeout}]]]])
    Search for the match of a nested start-end pair.  This can be
    used to find the "endif" that matches an "if", while other
    if/endif pairs in between are ignored.
    [...]

( http://vimdoc.sourceforge.net/htmldoc/eval.html )


2

Añadiría un detalle a la respuesta más votada:

Si está utilizando gvim y desea copiar al portapapeles, use

"+<command>

Para copiar todo el contenido entre corchetes (o parens o corchetes)

Por ejemplo: "+yi}copiará en el portapapeles todo el contenido entre las llaves que está el cursor.


2
Esto es completamente ortogonal al problema y no debería ser una respuesta. Puede escribir esto en cada pregunta sobre la que pregunte y.
tubería

Esta es una adición a la respuesta, no una respuesta en sí misma.
yuriploc

Entonces debería ser una edición de esa respuesta, esta publicación tal cual no responde la pregunta.
tubería

Este es un anuncio para NO usar gvim :) ¿Quién necesita dos pulsaciones de teclas adicionales en su vida?
Paul Parker

1

He hecho un complemento vim-textobj-quotes: https://github.com/beloglazov/vim-textobj-quotes

Proporciona objetos de texto para los pares de comillas más cercanos de cualquier tipo. Usar solo iqo aqle permite operar sobre el contenido de comillas simples ('), dobles (") o hacia atrás (`) que actualmente rodean el cursor, están delante del cursor o detrás (en ese orden de preferencia) En otras palabras, salta hacia adelante o hacia atrás cuando es necesario para llegar a las comillas.

Es más fácil de entender mirando ejemplos (el cursor se muestra con |):

  1. Antes: foo '1, |2, 3' bar; después de presionar diq:foo '|' bar
  2. Antes: foo| '1, 2, 3' bar; después de presionar diq:foo '|' bar
  3. Antes: foo '1, 2, 3' |bar; después de presionar diq:foo '|' bar
  4. Antes: foo '1, |2, 3' bar; después de presionar daq:foo | bar
  5. Antes: foo| '1, 2, 3' bar; después de presionar daq:foo | bar
  6. Antes: foo '1, 2, 3' |bar; después de presionar daq:foo | bar

Los ejemplos anteriores se proporcionan para comillas simples, el complemento funciona exactamente de la misma manera para las comillas dobles (") y las comillas posteriores (`).

También se puede utilizar cualquier otro operador: ciq, diq, yiq, viq, etc.

Por favor, eche un vistazo a la página de github vinculada anteriormente para obtener más detalles.


-6

Un simple mapa de teclas en vim resolvería este problema. map viq F "lvf" hh Este comando anterior asigna viq a las teclas para buscar entre comillas. Reemplace "con cualquier carácter y cree sus mapas de teclas. Pegue esto en vimrc durante el inicio y debería poder usarlo siempre.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.