我經常在本地編輯文件,然後將其剪下並貼上到 vi 會話內的遠端 ssh 會話中。
第一步是透過執行類似的操作來刪除整個內容
9999dd
這將刪除最多 9999 行的檔案。
現在,執行 14.04 LTS 的某個 ubuntu 機器上的 vi 版本的行為有所不同:如果檔案實際上不包含至少 9999 行,則不允許使用上述命令。
如何重新啟用先前/熟悉的行為 - 如果 N(在本例中為 9999)超過檔案行數,則整個檔案中的所有行都將被刪除?
更新 我很感謝您的答复選擇實現這一目標的方法。然而,這並不能解釋行為改變的原因/方式/時間(我已經成功使用 Ndd 多年。也許不是最佳方法。但它確實有效 - 包括在 ubuntu 上 - 各種版本,centos,os/x)。
另一個更新 前面的「:」被刪除:我們處於正常模式。它在這個特定的編輯器/vi 實例中仍然不起作用 - 而它可以與 99dd 一起工作(因為檔案有 > 99 行),並且在其他實例中也可以執行相同的操作 9999dd 。
答案1
@javadba,嘗試一下:set nocompatible
這兩種行為之間的差異似乎取決於我是否:set nocompatible
在我的~/.vimrc
或/etc/vim/vimrc
在全球的任何地方。
如果我:set nocompatible
那麼我可以使用:9999
而不是:$
跳到小文件的底部,並且我可以擺脫諸如9999dd
.如果我有不是 :set nocompatible
然後當我嘗試時什麼也沒有發生,並且 當我嘗試跳到文件末尾時9999dd
出現錯誤。E16: Invalid range
:9999
答案2
您嘗試的操作(在命令模式下使用無效範圍)永遠不會起作用。它在 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
在這兩種情況下,您都不應該使用奇怪的數字作為範圍。