Я часто редактирую файл, локально затем вырезает и вставляет его в удаленную ssh сессию в vi сессии.
Первый шаг должен удалить все содержание путем выполнения чего-то как
9999dd
Который удалит до 9 999 строк файла.
Теперь так или иначе версия vi на определенной машине человечности, выполняющей 14.04 LTS, ведет себя по-другому: это не позволяет вышеупомянутую команду, если файл на самом деле не содержит по крайней мере 9 999 строк.
Как я повторно включаю бывшее / знакомое поведение - в котором были бы стерты все строки во всем файле, если N (9999 в этом случае) превышает количество строки файла?
ОБНОВЛЕНИЕ я ценю ответы, наталкивающиеся на альтернативные методы для достижения этого. Однако это не объясняет why/how/when измененное поведение (я использовал Ndd успешно в течение многих лет. Возможно, не оптимальный способ сделать это. Но это действительно работает - включая над человечностью - различные версии, песни, os/x).
Другое обновление ":" впереди был удален: мы находимся в нормальном режиме. Это ВСЕ ЕЩЕ НЕ РАБОТАЕТ в этом конкретном editor/vi экземпляре - тогда как это работает с, говорят 99dd (так как файл имеет> 99 строк), и также выполнение того же действия 9999dd работы в других случаях.
@javadba, попробуйте :set nocompatible
, различие между этими двумя поведениями, кажется, зависит от того, имею ли я :set nocompatible
в моем ~/.vimrc
или в /etc/vim/vimrc
или везде, где глобальный.
, Если я :set nocompatible
затем я могу использовать :9999
, а не :$
для перехода к нижней части маленького файла, и мне могут сойти с рук вещи как 9999dd
. Если я имею не :set nocompatible
затем, ничего не происходит, когда я пробую 9999dd
, и я получаю ошибку E16: Invalid range
, когда я пробую :9999
для перехода в конец файла.
То, что Вы пробуете (для использования недопустимого диапазона в командном режиме), никогда не могло работать. Это не работает в 7.2.445 (Debian 6), 7.2.411 (CentOS 6.6), 7.3.429 (Ubuntu 12.04), 7.4.683 (Ubuntu 14.04, PPA).
я думаю, что Вы перепутали его с 99999dd
, который допустим в нормальном режиме, потому что N здесь не является номером строки, но количество раз, действие повторяется - отмечает отсутствие :
.
Действительно, в документации говорится так же:
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).
<час> , Если Вы хотите удалить все строки и хотеть, используют командный режим, чтобы сделать так, тогда:
:%d
Или, с помощью диапазоны :
:0,$d
, Если Вы не хотите использовать командный режим:
ggdG
Ни в том, ни в другом случае должен Вы использовать странное число для диапазона.