Используя “dd” в Vi (удаляют много строки), не принятый, если количество строк> длина файла

Я часто редактирую файл, локально затем вырезает и вставляет его в удаленную ssh сессию в vi сессии.

Первый шаг должен удалить все содержание путем выполнения чего-то как

 9999dd

Который удалит до 9 999 строк файла.

Теперь так или иначе версия vi на определенной машине человечности, выполняющей 14.04 LTS, ведет себя по-другому: это не позволяет вышеупомянутую команду, если файл на самом деле не содержит по крайней мере 9 999 строк.

Как я повторно включаю бывшее / знакомое поведение - в котором были бы стерты все строки во всем файле, если N (9999 в этом случае) превышает количество строки файла?

ОБНОВЛЕНИЕ я ценю ответы, наталкивающиеся на альтернативные методы для достижения этого. Однако это не объясняет why/how/when измененное поведение (я использовал Ndd успешно в течение многих лет. Возможно, не оптимальный способ сделать это. Но это действительно работает - включая над человечностью - различные версии, песни, os/x).

Другое обновление ":" впереди был удален: мы находимся в нормальном режиме. Это ВСЕ ЕЩЕ НЕ РАБОТАЕТ в этом конкретном editor/vi экземпляре - тогда как это работает с, говорят 99dd (так как файл имеет> 99 строк), и также выполнение того же действия 9999dd работы в других случаях.

2
задан 28 April 2015 в 00:11

2 ответа

@javadba, попробуйте :set nocompatible

, различие между этими двумя поведениями, кажется, зависит от того, имею ли я :set nocompatible в моем ~/.vimrc или в /etc/vim/vimrc или везде, где глобальный.

, Если я :set nocompatible затем я могу использовать :9999, а не :$ для перехода к нижней части маленького файла, и мне могут сойти с рук вещи как 9999dd. Если я имею не :set nocompatible затем, ничего не происходит, когда я пробую 9999dd, и я получаю ошибку E16: Invalid range, когда я пробую :9999 для перехода в конец файла.

3
ответ дан 2 December 2019 в 02:22

То, что Вы пробуете (для использования недопустимого диапазона в командном режиме), никогда не могло работать. Это не работает в 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

Ни в том, ни в другом случае должен Вы использовать странное число для диапазона.

1
ответ дан 2 December 2019 в 02:22

Другие вопросы по тегам:

Похожие вопросы: