windows - convertir - copiar y pegar en vi
En Vim, ¿cuál es la forma más sencilla de unir todas las líneas de un archivo en una sola línea? (6)
Ah, encontré la respuesta.
:1,$join
Funciona de maravilla.
EDITAR : Como se señala en el comentario:
:%join -or- :%j
... elimina el rango.
Quiero unir todas las líneas de un archivo en una sola línea. ¿Cuál es la forma más simple de hacer esto? He tenido mala suerte al tratar de usar la sustitución ( /r/n
o /n
no parece ser recogido correctamente en el caso de s//r/n//
en Windows). El uso de J
en una expresión de rango tampoco parece funcionar (probablemente porque el rango ya no está en ''sincronización'' después de que se ejecuta el primer comando).
Intenté :1,$norm! J
:1,$norm! J
pero esto solo hizo la mitad del archivo, lo cual tiene sentido porque solo une cada línea una vez.
De otra manera:
ggVGJ
" ggVG
" selecciona visualmente todas las líneas, y " J
" las une.
Manera críptica:
qqqqqJ@qq@q
(las tres primeras q
qqJ@qq
el registro q
, qqJ@qq
registra una macro en el registro q
realiza una unión, luego llama a q
, y la última @q
ejecuta.
Me sorprende que nadie lo haya mencionado de otra manera:
:%s//n/ /
Estoy igualmente sorprendido de que nadie haya señalado que el rango 1,$
tiene una taquigrafía escrita %
.
(Esto no hace lo mismo que unir las líneas, sino que depende de las circunstancias que de hecho pueden ser más apropiadas).
Puede hacerlo con 3 teclas comenzando desde el modo normal:
:%j
-
:
entra en modo comando -
%
refiere a todas las líneas en el archivo -
j
ejecuta el comando de unión
Ahora parece que esto agrega un espacio entre las líneas. No estoy seguro si quieres esto.
Puedes hacerlo con tres menos pulsaciones de teclas:
:1,$j
no es grandioso?