是否有刪除當前行下方一行(或幾行)的命令? 目前我在做: jdd然後。根據需要重複。 有沒有可以將所有這些結合起來的命令?如何在vim中刪除當前行下面的行?
更新:我想要這樣的命令的原因是,我不喜歡離開當前位置,但能夠刪除下面的行。
是否有刪除當前行下方一行(或幾行)的命令? 目前我在做: jdd然後。根據需要重複。 有沒有可以將所有這些結合起來的命令?如何在vim中刪除當前行下面的行?
更新:我想要這樣的命令的原因是,我不喜歡離開當前位置,但能夠刪除下面的行。
delete ex命令將很好地工作。
:+,$d
這將刪除與當前+1的所有行,直到結束($)
要刪除接下來的2行後續的範圍會工作,+1,+2
或速記+,+2
:+,+2d
正如@ib提到的:delete
或:d
命令會將光標移動到刪除文本旁邊的行的開頭。 (即使使用nostartofline
設置)。爲了克服這個問題,我們可以發出``
正常模式命令。 ``
將跳回到最後一次跳轉之前的確切位置,在這種情況下爲:d
命令。我們的命令現在是
:+,+d進入``
或者作爲一個前命令
:+,+2d|norm! ``
爲方便起見,我們在命令包這一切了:
command! -count=1 -register D :+,+<count>d <reg><bar>norm! ``
我們刪除下一以下3行:
:3D
該命令還可以採取{reg}
像:delete
和:yank
呢。所以刪除接下來的4號線到寄存器a
是:
:4D a
欲瞭解更多信息
:h :d
:h :command
:h :command-register
:h :command-count
:h ``
請注意,這是一個相當簡單的解決方案,可以「開箱即用」,並且可以推廣到其他命令(例如,':+ 1,+ 5s!a!b!g'將用4行中的b代替a's在遊標之後)。有關更多示例,請參閱:help command-ranges。 – 2010-09-03 01:06:35
這個簡單的解決方案會很棒,只要它不移動光標。至少,該命令應該看起來像':+,$ d | norm!\''''。順便說一下,如問題中所述,問題的作者想要刪除當前文件下面的幾行,而不一定是一直到文件末尾。 – 2011-10-22 01:39:38
@ib:答案可以通過更詳細的範圍解釋來改善嗎?也許'設置sol'?如何使用''''標記? – 2011-10-22 02:09:05
可以定義一個小功能,做你描述的正是: 刪除下一n
行當前行下,恢復初始 光標位置。
function! DeleteNextLines(n, reg)
let l = line('.')
let m = min([a:n, line('$')-l])
if m > 0
let c = col('.')
exe '+,+'.m 'd' a:reg
call cursor(l, c)
endif
endfunction
此外,您還可以定義接受線下方 刪除計數(一個,默認情況下)的命令,並作爲可選 參數(就像:delete
命令)使用的寄存器名。
:command! -range=1 -register -bar D call DeleteNextLines(<count>, <q-reg>)
另外,你可以定義一個映射運行:D
,如果有必要 。
未經測試,但接受爲答覆,謝謝。 – Valentin 2010-09-02 10:58:31
例如,要映射到逗號,d(按','後跟d)插入以下行(在通過@ib輸入以上答案之後) 1:'let mapleader =「,」' 2:'nmap
您可以輸入行數刪除:Ĵ ddķ。
最後'k'將光標移動到最初的行上方。此外,由於「dd」,光標列位置將丟失。 – 2010-09-02 09:08:36
@ib:不是在我的測試中沒有。你真的嘗試過了嗎?注意最初的** j **。 – 2010-09-02 09:24:52
對不起,我的第一個觀點是錯誤的(當我試過這個命令時,我沒有注意到我指定的計數(在你的例子中是'20')大於直到結束時的行數緩衝區)。但第二個仍然存在:光標的列位置在dd之後發生變化(我相信在刪除行旁邊的第一個非空白字符處)。 – 2010-09-02 09:34:53
這將刪除當前下面的所有行:
jdG
不幸的是,將光標移動到當前行的開頭刪除作出後。
並且會刪除每一行直到緩衝區結束。 – 2010-09-02 10:42:55
我誤解了原來的問題,對不起。認爲OP想要刪除當前下面的所有行。改變了我的帖子。 – ClosedID 2010-09-02 11:13:49
應該是公認的答案! – 2016-09-06 13:41:06
這是標記的工作!
嘗試maj20dd`a
ma
設置特定文件標記「A」,j20dd
你想要做刪除(20線在這種情況下),並`a
恢復你標記的位置(行和列)。
顯然這種模式可以擴展到做任何你想要的東西,然後再回到標記。如果您使用mA
(或任何其他大寫字母),則該標記在文件中實際上是唯一的,所以您甚至可以在返回之前編輯其他地方。如果你有非常頻繁的使用情況,你可以按照上面的建議把它變成一個宏。
其他的解決方案是提供信息,但我覺得它會是簡單的使用宏爲此:
qq
(開始記錄)
jddk
(下去,刪掉就行了,回去了 - 即次荷蘭國際集團你想要做的)
q
(結束錄音)
現在你可以做@q
執行此操作,保持光標在當前位置。您也可以執行諸如[email protected]
之類的操作來刪除光標下方的5行。
最後,如果你重複動作一次以上,你可能只是第一次運行@q
(此重複上次使用的宏 - 在這種情況下q
)後鍵入@@
得好,只要你可以使用xxdd命令即可。大多數時候我知道(至少有一個想法)我正在編輯的腳本的大小。因此,這個命令如下通常綽綽有餘:
我認爲@Peter Rincker的答案應該被標記爲答案 – gixxer 2017-01-13 01:44:16
done @gixxer,謝謝你的支持 – Valentin 2017-01-13 16:42:47