%20si%20el%20n%C3%BAmero%20de%20l%C3%ADneas%20%3E%20longitud%20del%20archivo.png)
A menudo edito un archivo localmente, luego lo corto y lo pego en una sesión ssh remota dentro de una sesión vi.
El primer paso es eliminar todo el contenido haciendo algo como
9999dd
Lo que eliminará hasta 9999 líneas del archivo.
Ahora, de alguna manera, la versión de vi en cierta máquina Ubuntu que ejecuta 14.04 LTS se comporta de manera diferente: no permite el comando anterior si el archivo en realidad no contiene al menos 9999 filas.
¿Cómo puedo volver a habilitar el comportamiento anterior/familiar, en el que todas las líneas del archivo completo se borrarían si N (9999 en este caso) excede el recuento de líneas del archivo?
ACTUALIZAR Agradezco las respuestas que llegan paraalternativamétodos para lograrlo. Sin embargo, eso no explica por qué/cómo/cuándo cambió el comportamiento (he usado Ndd con éxito durante años. Quizás no sea la forma óptima de hacerlo. Pero funciona, incluso en ubuntu, en varias versiones, centos, os/x).
Otra actualización Se eliminó el ":" al frente: estamos en modo normal. TODAVÍA NO FUNCIONA en esta instancia particular de editor/vi, mientras que funciona con, por ejemplo, 99dd (ya que el archivo tiene> 99 líneas) y también funciona la misma acción, 9999dd, en otras instancias.
Respuesta1
@javadba, prueba:set nocompatible
La diferencia entre estos dos comportamientos parece depender de si tengo :set nocompatible
en mi ~/.vimrc
o en /etc/vim/vimrc
o donde sea el global.
Si :set nocompatible
entonces puedo usar :9999
en lugar de :$
saltar al final de un archivo pequeño, puedo salirme con la mía con cosas como 9999dd
. Si tengono :set nocompatible
entonces no pasa nada cuando lo intento 9999dd
y aparece un error E16: Invalid range
cuando intento :9999
saltar al final del archivo.
Respuesta2
Lo que está intentando (usar un rango no válido en modo comando) nunca puede haber funcionado. No funciona en 7.2.445 (Debian 6), 7.2.411 (CentOS 6.6), 7.3.429 (Ubuntu 12.04), 7.4.683 (Ubuntu 14.04, PPA).
Creo que lo has confundido con 99999dd
, que es válido en modo normal porque N aquí no es un número de línea, sino el número de veces que se repite la acción; ten en cuenta la ausencia de :
.
De hecho, la documentación dice lo mismo:
Line numbers may be specified with: :range E14 {address}
{number} an absolute line number
....
The {number} must be between 0 and the number of lines in the file. When
using a 0 (zero) this is interpreted as a 1 by most commands. Commands that
use it as a count do use it as a zero (:tag, :pop, etc). Some commands
interpret the zero as "before the first line" (:read, search pattern, etc).
Si desea eliminar todas las líneas y desea utilizar el modo comando para hacerlo, entonces:
:%d
O, usandorangos:
:0,$d
Si no desea utilizar el modo de comando:
ggdG
En ningún caso deberías utilizar un número extraño para un rango.