2009-12-16 31 views
143

Tengo dos líneas en un archivo de texto, como a continuación:¿Cómo unir dos líneas en vi?

S<Switch_ID>_F<File type> 
_ID<ID number>_T<date+time>_O<Original File name>.DAT 

Quiero añadir las dos líneas en vi, como a continuación:

S<Switch_ID>_F<File type>_ID<ID number>_T<date+time>_O<Original File name>.DAT 

La segunda línea se borraron y el contenido de la segunda línea fue añadida a la primera línea.

¿Cómo podría hacerlo utilizando el modo de comando en vi?

Respuesta

258

Shift +J quita el carácter de cambio de línea de la línea actual, por lo que con la tecla "J" en cualquier lugar en la línea puede combinar la línea actual y la línea siguiente en la forma que desee.

+6

mayúscula J une las líneas, la minúscula mueve el cursor –

+3

Esa era una J mayúscula, no una minúscula J; de ahí Shift-J. –

+0

si presiona "j" moverá el cursor a la siguiente línea pero si presiona "J" unirá las dos líneas. –

19

Esto debe hacerlo:

J

+6

'J' brinda espacio extra al unir líneas. –

+2

@MaximKim: Y [este es el motivo] (http://en.wikipedia.org/wiki/Sentence_spacing). Tenga en cuenta que ': h J' le dirá cómo desactivar esa función. – ereOn

+0

Use 'gJ' si no desea que vim agregue un espacio al unir las líneas – qwertzguy

1

Prensa Shift + ("$") en la primera línea, a continuación, Shift + j ("J").

Y si quiere ayuda, vaya a vi, y luego presione F1.

+3

$ se mueve al final de la fila, pero no es necesario para J –

+1

No tiene que estar al final del línea para J para unir líneas. –

+1

Presionar $ no es necesario, en realidad. –

4

Simplemente reemplace el "\n" con "".

En vi/vim por cada línea en el documento:

%s/>\n_/>_/g 

Si desea confirmar cada sustitución:

%s/>\n_/>_/gc 
53

Vi o Vim?

De todos modos, el siguiente comando funciona para Vim en modo 'no compatible'. Es decir, supongo, casi puro vi.

:join! 

Si desea hacerlo por el uso normal de comandos

gJ 

Con 'Gj' se une a líneas como es - sin añadir o eliminar espacios en blanco:

S<Switch_ID>_F<File type> 
_ID<ID number>_T<date+time>_O<Original File name>.DAT 

Resultado:

S<Switch_ID>_F<File type>_ID<ID number>_T<date+time>_O<Original File name>.DAT 

Con el comando 'J' usted tendrá:

S<Switch_ID>_F<File type> _ID<ID number>_T<date+time>_O<Original File name>.DAT 

espacial Nota entre type> y _ID.

+2

Solo quiero señalar que 'g/pattern/join' funciona en VIM, mientras que' g ​​/ pattern/J' no. Podría ayudar a algunas personas en el futuro. – jisaacstone

+0

Me gusta su combinación con el patrón, sin embargo, une dos líneas con espacios en blanco.De todos modos, unir dos líneas con un patrón sin espacio en blanco? –

+0

g/patrón/unirse! parece hacer eso. – fortboise

15

En vi, J (es decir shift-j) o :join debe hacer lo que quiera, en su mayor parte. Tenga en cuenta que ajustan el espacio en blanco. En particular, terminará con un espacio entre las dos líneas unidas en muchos casos, y si la segunda línea está sangrada, esa sangría se eliminará antes de unirse.

En vim también puede usar gJ (g, luego shift-j) o :join!. Estos unirán líneas sin hacer ningún ajuste de espacio en blanco.

En vim, vea :help J para obtener más información.

+0

Una advertencia al usar 'gJ' y' J' es que ambos cambian el cursor al punto de unión, pero ': join!' Y ': join' dont. – SergioAraujo

1

En Vim también puede usar gJ.

1

Otra forma de unir dos líneas sin colocar cursor a esa línea es:

:6,6s#\n## 

Aquí 6 es el número de línea a la que se unen a otra línea. Para mostrar el número de línea, use :set nu.

Si estamos en el cursor en la siguiente línea debe estar unido, a continuación:

:s#\n## 

En ambos casos, no necesitamos g como :s#\n##g, porque en una línea sólo una \n existen.

+0

Es más fácil usar 'Shift + V' para seleccionar todas las líneas que se unirán, excepto la última, y ​​luego': '<,'> s/\ n /,/'en este ejemplo unir líneas mientras se pone una coma y un espacio al final de cada uno. Tenga en cuenta que cuando se selecciona algo y se escribe ':' en modo normal, aparece ''<,'>' en la línea de comando automáticamente. –

+0

Bueno para la combinación de varias líneas seleccionada con el delimitador preferido. ¿Encontró un error tipográfico ... en modo normal o en modo visual? – vusan

2

Si desea unirse a las líneas seleccionadas (se encuentra en modo visual), simplemente presione gJ para unir sus líneas sin espacios de ningún tipo.

Esto se describe con mayor detalle en the vi/Vim Stack Exchange site.