2012-08-16 30 views
67

如何刪除一行而不將其放入我的默認緩衝區中?如何在Vim中刪除(不是剪切)?

例子:

line that will be copied. 

line that I want to be substitued with the previous one. 

我想要做的事:

yy 
dd 
p 

但是,Vim在替換最近字符串複製與刪除的(板缺)之一。我知道,我可以使用緩衝區像,"1yydd然後"1p,但我總是忘了把複製的字符串中的一個緩衝區,然後我需要先(將要複製線)貼我的內容,然後刪除我想要的(線我想與前一個被取代。)

如何我真的刪除VI(米)的文本而不復制呢?

另一個相關問題是我怎麼能轉發刪除插入模式句話嗎?我想要類似Ctrl + w

+4

的可能重複[是Vim有沒有辦法刪除不把文本在寄存器?](http://stackoverflow.com/questions/54255/in-vim-is-there-a-way-to-刪除 - 不要把文本在註冊表中) – eckes 2012-08-17 12:37:39

回答

70

使用「黑洞寄存器」,"_真正刪除的內容:"_d
使用"_dP粘貼東西,並保持它可用於進一步粘貼。

對於第二個問題,你可以使用<C-o>dw<C-o>用於執行正常的命令,而不會使用插入模式。

當然,您可以設置自己的映射來保存輸入。我有這些:

nnoremap <leader>d "_d 
xnoremap <leader>d "_d 
xnoremap <leader>p "_dP 
+0

thx,你回答我的兩個問題。但我不明白這些noremap命令如何幫助我。我是否失去了功能,對吧? – MaikoID 2012-08-16 19:28:22

+1

沒有,'D'仍然是「削減」和'p'仍然「粘貼」,而' D'刪除真正和' p'扔掉選定的文本,粘貼默認寄存器的內容。 ' p'允許我多次粘貼相同的文本,而不必使用命名寄存器。 – romainl 2012-08-16 20:04:23

6

您可以使用"_d防止事情覆蓋你抽出文本。您可以在任何需要的寄存器中存儲已抽出或已刪除的文本,其中"_是「黑洞」註冊表,您可以在其中發送您不關心的內容。

欲瞭解更多信息,您可以鍵入:help "_:help deleting

15

這就是我不喜歡有關VIM的東西之一......我最終映射dd黑洞寄存器在我的vimrc,自生活一直很好:

nnoremap d "_d 
vnoremap d "_d 
+4

那你怎麼削減? – VitalyB 2016-03-09 13:23:33

+2

'v/V'與'x'也被剪切。在任何操作系統中,使用'x'切割也與'Ctrl + x'一致。 – FaithReaper 2016-11-03 11:43:24

39

黑洞寄存器"_會做的伎倆,但有一個更好的解決方案:

當你進入行回來要粘貼內容的p命令(易失性)默認寄存器"",已被覆蓋dd。但是,你仍然可以從(非易失性)抽出寄存器"0,這將不會被刪除命令dd覆蓋粘貼。

因此,這些都是你希望按你的例子​​使用命令:

yy 
dd 
"0p 
5

以下映射將產生:

  • d => 「刪除」
  • 領袖d => 「cut」
nnoremap x "_x 
nnoremap d "_d 
nnoremap D "_D 
vnoremap d "_d 

nnoremap <leader>d ""d 
nnoremap <leader>D ""D 
vnoremap <leader>d ""d 

而且,這是一個很好的做法有「領頭羊」鍵設置爲逗號, e.g:

let mapleader = "," 
let g:mapleader = "," 

這2段將「D」是您新的剪切命令。

如果您想togther使用這些映射與共享系統剪貼板配置,見進一步的細節在https://github.com/pazams/d-is-for-delete

+1

這很好,謝謝 – 2015-10-21 22:50:59

1
yy 
Vx 
p 

當視覺模式,x將刪除選擇,所以如果你想刪除首先按V在視覺模式下選擇該行,然後按x刪除選擇。