Eliminar / Yankear líneas de la línea actual hasta e incluyendo la línea que contiene el patrón de búsqueda

5

Supongamos que tengo el siguiente texto (el cursor está en el medio de la primera palabra "comenzar".

blah blah blah blah stuff stuff stuff
\\\begin{tabular}
{
|p{0.25\textwidth}
|p{0.2\textwidth}
|p{0.5\textwidth}
|}
\hline
Item & Type & Notes\\\hline
Text text text text text text text text &
Text text text text text &
Text text text text text text text text text text text text text text text text text
  text text text text text text\\\hline

Installation instructions &
.txt / .html / TBD &
Installation help should be conspicuous but not the central item\\\hline
\end{tabular}
blah blah blah more stuff more stuff

Quiero cortar la mesa y moverla a otro lugar. Las líneas son en realidad mucho más largas, por lo que se ajustan varias veces y no puedo determinar fácilmente cuántas líneas quiero cortar.

Escribo d 2 / a r } / e para eliminar hasta el segundo partido del "ar}" se detiene en la 'e'nd del patrón.

Pero esto se agarra desde el medio de la palabra 'comenzar' hasta el final de donde quiero cortar. Me gustaría tomar líneas completas y siento que debería haber un atajo para esto en menos de 6 teclas. No estoy usando Latex-VIM porque no me gusta mi instalación estándar de Windows de GVIM, así que no, no puedo (por lo que sé) agarrar fácilmente del \beginal \end. Me encantaría demostrar que estoy equivocado en eso.


Sí, esta pregunta es potencialmente un cruce de sitios de StackExchange, incluidos Tex, StackOverflow y Unix. Siéntase libre de sugerir un mejor sitio para preguntar esto.

Aún así, Tony.
fuente
Bueno, parece que sabes que esto está fuera de tema aquí. En general, parece que aceptamos preguntas relacionadas con el editor solo cuando tienen una conexión directa con LaTeX en cualquier sentido. Este no es su caso, ya que, si lo entiendo correctamente, desea tomar líneas enteras que comienzan donde está y terminan en la segunda coincidencia para alguna cadena. De todos modos, V/ar}<CR>nxdebería hacer el trabajo.
yo '
Ok, ¿cómo lo migro? ¿Eliminar y volver a publicar allí o ...?
Aún así
@cmhughes Sí, esa es la respuesta simple, pero la secuencia ya era bastante larga. Estaba buscando el camino corto y fácil.
Todavía

Respuestas:

5

Con un comando Ex:

:,/\\e/d

Descompostura:

  • Estructura de un comando Ex: :{range}command{address}.
  • Se pueden usar números de línea, marcas o patrones de búsqueda para delimitar el rango, aquí comenzamos con la línea actual, generalmente una .pero se puede omitir como aquí, y terminamos con una coincidencia de patrones \end.
  • Elegimos dlas líneas en ese rango.

Con una combinación de búsqueda y marcas contextuales:

/\\e<CR>
d''

Descompostura:

  • Buscar \e.
  • delija desde aquí hasta la línea de la posición del cursor anterior.

Con modo visual:

v/\\e<CR>
V
d

Descompostura:

  • Seleccione visualmente de aquí a \e.
  • Cambiar al bloque de línea visual.
  • delija las líneas en la selección.

Variación del método anterior con un comando Ex en lugar de un comando de modo normal:

v/\\e<CR>
:'<,'>d

Descompostura:

  • Seleccione visualmente de aquí a \e.
  • Ingrese al modo de línea de comandos con :, el '<,'>rango se inserta automáticamente.
  • delija las líneas en la selección.
romainl
fuente
Sencillo. Elocuente. Asombrado. Si solo los lenguajes verbales pudieran ser tan optimizados ... Estoy teniendo problemas para que busque una segunda aparición de final cuando hay un \ begin \ end anidado dentro.
Aún así
1
@ Okuma.Tony, puedes hacer una segunda búsqueda como esta: /\\e/;/\\eentonces la segunda solución se convierte en /\\e/;/\\e<CR>d''la tercera solución, v/\\e/;/\\e<CR>Vdetc. La ;compensación lamentablemente no funciona en un rango. Deberías probar la sugerencia de benjifisher, es realmente genial.
romainl
@ Okuma.Tony, corrección, se puede utilizar más de una búsqueda en un rango pero la sintaxis es un poco diferente: :,/\\e//\\e/d.
romainl
2

Esta es una de las características que obtienes con el complemento matchit, parte de la distribución vim estándar. Para fines de prueba, haga esto de manera interactiva; si te gusta, puedes hacerlo desde tu archivo vimrc:

:runtime macros/matchit.vim
:filetype plugin on

Después de esos dos comandos (ya sea interactivamente o durante el inicio como parte de su archivo vimrc)

:e foo.tex

y luego, con el cursor en cualquier lugar \begin{tabular}, use V%para seleccionar todo el entorno. No estoy seguro de si lo considerará un error o una característica, pero esto incluirá líneas enteras, lo que significa que obtendrá el "\\" al principio.

Esto también debería manejar entornos anidados y líneas comentadas, correctamente.

Casualmente, el mantenedor de matchit.vim es el mismo que el mantenedor del ftplugin estándar para tex.

:help matchit-install
:help :filetype-plugin-on
benjifisher
fuente
Esto solo selecciona desde la posición del cursor hasta el final del primer bloque de encapsulación. Si está en la \begin{tabular}línea, selecciona a }. Si el cursor está en una línea como \node [block] (start) ...en el medio de la palabra node, se selecciona desde el cursor al ]..
Still.Tony
@ Okuma.Tony, matchit se basa en el tipo de archivo de su búfer configurado correctamente Con :setf tex, presionando %con el cursor en \\\begin{tabular}saltos a la correcta\end{tabular}
romainl
@romainl ¿Depende esto de la instalación de latex-vim? Tengo una instalación estándar de VIM 7.4 en Windows 7 y los archivos .tex se reconocen lo suficientemente bien como para manejar la sangría automática.
Aún así
@ Okuma.Tony: No, no depende de latex-vim. El complemento matchit es parte de la distribución vim estándar, en $VIMRUNTIME/macros/. Cuando me refiero al ftplugin "estándar" para tex, me refiero al que viene en la distribución vim estándar.
benjifisher
@ Okuma.Tony: en respuesta a tu primer comentario, estás describiendo el comportamiento predeterminado de %, que es anulado por el complemento matchit. Por favor, preste atención al orden de los comandos en mi respuesta.
benjifisher