unix - salir - vim editor
Eliminar nueva lĂnea en Vim (12)
¿Hay alguna forma de eliminar la nueva línea al final de una línea en Vim, para que la siguiente línea se agregue a la línea actual?
Por ejemplo:
Evaluator<T>():
_bestPos(){
}
Me gustaría poner todo esto en una línea sin copiar líneas y pegarlas en la anterior. Parece que debería poder poner mi cursor al final de cada línea, presionar una tecla y hacer que la siguiente línea salte a la misma línea en la que está el cursor.
Resultado final:
Evaluator<T>(): _bestPos(){ }
¿Es esto posible en Vim?
Ciertamente. Vim reconoce el carácter / n como una nueva línea, por lo que solo puede buscar y reemplazar. En el modo de comando escribe:
:%s//n/
El problema es que los múltiplos char 0A (/ n) que son invisibles pueden acumularse. Suponga que desea limpiar desde la línea 100 hasta el final:
Escribiendo ESC y: (comandante de terminal)
:110,$s/^/n//
En un script vim:
execute ''110,$s/^/n//''
Explicación: desde 110 hasta el final, busque las líneas que comienzan con una nueva línea (están en blanco) y elimínelas.
En vim:
:set noendofline binary
:w
Mientras se encuentra en la línea superior en el modo normal, presione Mayús + j .
También puede anteponer un conteo, por lo que 3J
en la línea superior uniría todas esas líneas juntas.
Probablemente depende de tu configuración, pero normalmente lo hago con A<delete>
Donde A
se anexa al final de la línea. Probablemente requiere modo nocompatible
:)
Si está en la primera línea, al presionar (mayúsculas) J unirá esa línea y la línea siguiente, eliminando la nueva línea. También puede combinar esto con un conteo, por lo que al presionar 3J
se combinarán las 3 líneas juntas.
Si no te importa usar otras herramientas de shell,
tr -d "/n" < file >t && mv -f t file
sed -i.bak -e :a -e ''N;s//n//;ba'' file
awk ''{printf "%s",$0 }'' file >t && mv -f t file
Simplemente presionaría A (adjuntar al final de la línea, lo pone en el modo de inserción) en la línea donde desea eliminar la nueva línea y luego presione eliminar.
Todo lo siguiente asume que su cursor está en la primera línea:
Usando mapeos normales:
3 Shift + J
Usando los comandos Ex:
:,+2j
Que es una abreviatura de
:.,.+2 join
Que también se puede ingresar por el siguiente atajo:
3 : j
Un comando Ex aún más corto:
:j3
J
elimina el espaciado inicial adicional (si existe), uniendo líneas con un solo espacio. (Con algunas excepciones: después de /[.!?]$/
, se pueden insertar dos espacios; antes de /^/s*)/
, no se insertan espacios.)
Si no desea ese comportamiento, gJ
simplemente elimina la nueva línea y no hace nada inteligente con espacios en absoluto.
<CURSOR>Evaluator<T>():
_bestPos(){
}
cursor en primera linea
AHORA, en MODO NORMAL hacer
shift+v
2j
shift+j
o
V2jJ
: V2jJ normal
set backspace=indent,eol,start
en su .vimrc le permitirá usar la tecla de backspace
y delete
en /n
(nueva línea) en el modo de inserción.
set whichwrap+=<,>,h,l,[,]
le permitirá eliminar el LF anterior en modo normal con X
(cuando está en la columna 1).