簡體   English   中英

如何猛拉一行上的文本並將其粘貼到 Vim 中?

[英]How to yank the text on a line and paste it inline in Vim?

說,我有以下幾行:

thing();
getStuff();

我想使用yy命令獲取getStuff() ,前進到thing() ,將光標放在( ,然后通過p命令粘貼,但是由於我拉了整行, p會將getStuff()粘貼回原來的位置曾是。

我知道您可以先將光標移動到該getStuff()行的開頭,然后通過^D命令從那里剪切字符直到其結尾——然后p將執行我想要的操作。 但是,我發現鍵入^Dyy繁瑣得多。

有沒有辦法yy ,而是粘貼行內聯

問題是y y正在復制整行,包括換行符。 另一種方法是從行的開頭復制到行尾,然后粘貼。

^ y $

  • ^轉到該行的第一個字符。
  • y直到
  • $行尾。

// 歸功於:測試人員和 Idan Arye 對 Vim 高爾夫的改進。

使用y i w ("yank internal word") 而不是y y來拉你想要的東西:

y y是逐行猛拉,將抓取包括回車在內的整行,如果您查看:registers中用作粘貼源的未命名寄存器 ( "" ),您可以看到這一點。 請參閱:help ""

Vim 將未命名寄存器的內容用於任何未指定寄存器的放置命令( pP )。 此外,您可以使用名稱"訪問它。這意味着您必須鍵入兩個雙引號。寫入 "" 寄存器將寫入寄存器"0

y i w的另一個好處是,您不必位於要拉動的“單詞”的前面!

簡化對相同文本模式進行操作的一種方法是定義模仿文本對象選擇命令的映射。

下面的兩對映射——一個用於 Visual 模式,另一個用於 Operator-pending 模式——提供了一種選擇當前行上除換行符 ( al ) 之外的所有內容以及從第一個非空白字符開始的所有內容的方法。當前行通過最后一個非空白字符,包括 ( il )。

:vnoremap <silent> al :<c-u>norm!0v$h<cr>
:vnoremap <silent> il :<c-u>norm!^vg_<cr>
:onoremap <silent> al :norm val<cr>
:onoremap <silent> il :norm vil<cr>

因此,不是使用yy復制yal字符(而不是按行)粘貼的行的內容,而是可以使用yalyil命令進行 yank,然后使用p命令進行粘貼,如通常。

一種效率較低但簡單的方法:

  • v突出顯示單詞,
  • y猛拉突出顯示的單詞,
  • p (在行尾)要粘貼

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM