vi comandos, ir a la línea y la columna

17

He estado mezclando el uso de emacse vi( vim) durante mucho tiempo. Cada uno de ellos tiene sus ventajas. Analizo la salida de error de una compilación como proceso y obtengo un número de línea y columna, pero solo puedo usar emacspara ir directamente a una línea y columna:

emacs +15:25 myfile.xml

con visolo tengo el número de línea (de acuerdo con la página del manual)

vi +15 myfile.xml

Hay una opción para colocar el cursor de posición en un patrón ( vi +/pattern myfile.xml) que nunca pude trabajar. Pero eso no me ayudaría, ya que el patrón no siempre es la primera aparición en el archivo.

¿Cómo puedo comenzar vipara que vaya a la columna 25 en la línea 15 de mi archivo? ¿Puedo hacer algo con -copción?

Dominique
fuente
3
Puesto que usted etiquetado vim, ¿ha considerado el quickfixsistema, el cual se ejecuta el compilador desde dentro de vim, analiza la salida de error, rellena una lista de errores (navegar con :cp, :cn, :clcomandos), y posiciona el cursor en la primera?
Random832
Si abre un archivo en vi, y lo escribe :15, saltará a la línea 15 .. Espero que esto le ayude
code ninja

Respuestas:

17

Puedes usar:

vi '+normal 15G25|'  myfile.xml
Christa
fuente
2
explicación: la mayoría de los comandos (es decir, la mayoría de las letras) en vi pueden ir precedidos de un número (o rango) para cambiar su comportamiento predeterminado o para repetirlo (o aplicarlo en un rango específico). Dentro de vi, en modo comando, puede hacer 15Gpara ir a la línea 15 y 25|para ir a la columna 25. Y Christa muestra cómo hacer lo mismo desde la línea de comandos.
Olivier Dulac
7

Con el complemento de línea de archivo , simplemente puede agregar línea y columna al nombre del archivo, tanto al invocar Vim como en el interior con comandos como :edit:

vim myfile.xml:15:25
Ingo Karkat
fuente
Es bueno saber que esto existe, pero creo que usaré una respuesta que no requiere un complemento adicional
Dominique
@Dominique También puede vim myfile.xml +15para la fila sin un complemento, pero no la columna, que yo sepa
Izkata
5

solo por diversión existe lo -c 'normal 14j24l'que te pondrá en línea 15 personaje 25

Hildred
fuente
4

No sé sobre la -copción, pero deberías poder hacer:

vi '+cal cursor(15,25)' myfile.xml

(asegúrese de citar debido al paréntesis ())

Anthon
fuente
cursor()usa el índice de bytes para la columna, pero generalmente es un recuento de caracteres.
Ingo Karkat
@IngoKarkat ¿Eso realmente importa? El texto es UTF-8.
Dominique
2
Es importante para los caracteres no ASCII, que están representados por más de un byte. Además, una pestaña y los caracteres de control generalmente ocupan más de una columna de visualización.
Ingo karkat
2

Vale la pena señalar:

-c command 

Ejecute el comando ex dado al inicio. Solo se permite una opción -c para vi ; Vim acepta hasta 10. +commandAún se admite una forma anterior de esta opción ,.

El +commandtiene la misma ex commandlimitación cuando se usa vi.

El +/patterntambién está limitado a un comando con vi.

(tomado de vim y ex editor )

Bee Kay
fuente
1

Puede añadir el siguiente código a su vimrc, Al regreso a su archivo, Vim volver automáticamente a la posición antigua:

if has("autocmd")
  au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
endif
Golfo pérsico
fuente