Eliminar 100 líneas del editor vi usando un solo comando

33

Estoy usando Ubuntu e intento eliminar las 100 líneas del vieditor, pero recibí la pregunta de la entrevista de hacer esto en un solo comando.

Mayur Mehta
fuente
No es una solución VI, pero desde la línea de comando: echo -n > <file>elimina todas las líneas de un archivo (en realidad solo sobrescribe el archivo con "").
azz
3
@Der No es necesario usar echonada para eso; > $filefunciona bien
un CVn
44
¿Qué tipo de empresa es esa, haciendo preguntas vien una entrevista?
un CVn
2
Esta pregunta se responde fácilmente con un conocimiento rudimentario de vi. En una computadora con vim instalado (en Ubuntu, recomendaría el vim-gtkpaquete, ya que eso le da acceso al xclipboard dentro de vim), escriba vimtutoren la línea de comando (no dentro de vim) para obtener un tutorial interactivo de los conceptos básicos. No debería tomar más de media hora, y es la mejor guía de inicio para usar vi / vim que es probable que encuentre.
evilsoup
1
@ MichaelKjörling Me imagino que saldría en una entrevista si el solicitante había mencionado experiencia previa con vi(verbalmente o por currículum) o si la pregunta estaba precedida por: "Bien, como administrador de sistemas debe saber algo de editores de línea de comandos, correcto ¿Lo has usado vi?
Comodín

Respuestas:

62

En modo normal, hacer

100dd

ddelimina la línea actual. El prefacio de ese comando 100hace que se repita 100 veces.

Si hay menos de 100 líneas en el archivo a partir de la línea actual, dependiendo de la viimplementación, no podrá eliminar ninguna o eliminará tantas como haya. En el caso devim , eso depende de si la opción cpaka compatibleestá activada o no.

200_success
fuente
respuesta incorrecta solo está eliminando la línea actual
mayur Mehta
Quiero eliminar 100 líneas usando un comando a la vez
mayur Mehta
13
100ddEs la respuesta correcta. Me pregunto qué estás haciendo.
ott--
1
@mayurMehta no sabe qué compañía hace preguntas como esta, y no sabe qué esperan como respuesta. Pero cualquier usuario novato de VI sabrá que 100dd es la respuesta correcta.
Munim
1
@vgoff No lo sé ... Si no están buscando una solución general para probar sus habilidades básicas de vim, entonces es una pregunta capciosa para cuestionar a los entrevistados. Yo diría que 100dd es la respuesta. Si el entrevistador pregunta "¿Qué sucede si el archivo tiene menos de 100 líneas desde el cursor actual?", Respondería: "El comando elimina lo que puede del cursor actual". Eso es perfectamente razonable. A menos que el entrevistador aclare, ¿por qué el cursor no estaría en la primera línea? Odio las preguntas capciosas como estas.
Munim
44
  1. eliminar 100 líneas hacia adelante desde (incluida) la actual

    • Repita dd (eliminar la línea actual) 100 veces:

      100dd
      
    • eliminar de la línea actual a 99 líneas hacia adelante

      d99j
      
  2. eliminar 100 líneas hacia atrás desde (incluida) la actual

    d99k
    
  3. eliminar líneas en un rango específico por número de línea

    :1,100d
    
  4. eliminar líneas en un rango que comienza con la línea actual

    :.,.+99d
    

etcétera etcétera.

Inútil
fuente
2
el número 4 eliminará la línea actual (0) hasta las líneas 101 (0 + 100), de ahí 101 líneas en lugar de las 100 solicitadas. intente:.,+99d
Olivier Dulac
¡Drat, y obtuve los movimientos correctos! Gracias.
Inútil el
100dd tampoco funcionó para mí, pero el # 4 anterior funciona bien para mí en VI bajo Solaris 10.
DemiSheep
8

Si se van a eliminar todas las líneas del archivo, este comando vi especifica el rango de eliminación:

:1,$d

1denota la primera línea y $denota la última línea

sospechoso
fuente
o :%d (en ":" contexto, ":% ..." es el acceso directo para ": 1, $ ...")
Olivier Dulac
también agradable: d Gllaves y rarr; matar todo el contenido desde la línea real [por ejemplo, la línea superior] hasta la línea inferior
erch
3

¿Quieres eliminar todas las líneas de un archivo? Abre el archivo con vi. Mientras está al comienzo de la primera línea, la ubicación predeterminada del cursor cuando acaba de abrir el archivo, presione Escseguido de dG.

Solo para tener en cuenta, la acción dindica eliminar e Gindica la última línea del archivo. Entonces, mientras presiona en cualquier línea dG, elimina toda la línea que comienza desde la línea actual hasta la última.

Si sabe qué líneas consecutivas para eliminar - por ejemplo, a partir de la línea 101 a 200 - tipo en las siguientes secuencias de teclas: Esc:101,200d.

Barun
fuente
No es necesario presionar Escape si acaba de abrir el archivo y se encuentra al comienzo del archivo. Estás automáticamente (por defecto) en modo normal.
vgoff
3

No importa en qué parte del archivo se encuentre, puede hacer ggdG

:%dharía mejor en menos pulsaciones de teclas. Bueno, contando las teclas shifty enter, en realidad dos pulsaciones de teclas más que las anteriores.

Hacer algo así 100ddsolo eliminaría hasta 100 líneas de donde se encuentra, y eso puede no eliminar todas las líneas del archivo, dependiendo de su posición actual.

vgoff
fuente
0

Esc n dd. n es el número de líneas para eliminar e incluyendo la línea actual. Presione el botón "Esc", luego "n" y luego "dd". Para mejorar tu comprensión

Rida Abid
fuente
¿Cuál es la necesidad de escapar aquí?
Prvt_Yadav
Esta respuesta es idéntica a la respuesta aceptada.
Kusalananda
Escape es solo en caso de que esté en modo de inserción.
Rida Abid