2008-09-07 61 views
64

我想編寫一個指定VIM中「光標下的單詞」的命令。例如,假設我將光標放在一個單詞上,並讓它出現兩次。舉例來說,如果這個詞是「ABC」,我想「ABCABC」那麼我可以輸入:如何在VIM的命令行中指定「光標下的單詞」?

:s/\(abc\)/\1\1/ 

但後來我想能夠將光標移動到「高清」,並使用相同的命令將其更改爲「defdef」:

:s/\(def\)/\1\1/ 

如何在命令行中編寫命令以便它能夠執行此操作?

:s/\(*whatever is under the commandline*\)/\1\1 

回答

46

<cword>是光標下的單詞(:幫助<cword>)。

對不起,我應該在這個答案更完整。

可以NMAP的命令,或者這一系列擊鍵懶惰的將工作:

b #go to beginning of current word 
yw #yank to register 

然後,當你在你的模式輸入,你可以打<control-r>0<enter>將在您的命令粘貼第0個寄存器的內容。

你也可以做一個命令爲這個像:

:nmap <leader>w :s/\(<c-r>=expand("<cword>")<cr>\)/ 

將其映射打「\」和「W」在同一時間與

:s/\(<currentword>\)/ 
+13

我很感謝偉大的答案,但我可能會建議`yiw`過`byw`只是因爲肌肉記憶。在你的光標已經出現在單詞中的第一個字符的情況下,你必須**省略`b`並且簡單地輸入`yw`與你**可以**在`yiw中省略`i` `。意外可能發生,修復錯誤肯定是更重要的。:) – 2012-01-03 23:41:40

1

更換你的命令行你需要在映射中避開反斜槓。您也可以在映射中包含替代字符串。

:nmap <leader>w :s/\\(<c-r>=expand("<cword>")<cr>\\)/\\1\\1<cr> 
1
ywPx 

會做你的描述。

ywPxw 

也會將光標前進到下一個單詞。

+0

問題主要是關於從Vim的命令行指定「光標下的單詞」,而不是命令模式 – 2014-12-09 08:13:22

22
yiwP 

yiw:內聯字(遊標下的單詞)。該命令還會將光標移動到單詞的開頭。

P:粘貼在光標前面。

然後,您可以e.g <ALT> - D映射:此命令:

:nmap <ALT>-D yiwP 
+1

問題是關於指定「光標下的單詞」從Vim的命令行,不是從命令模式 – 2014-12-09 08:13:48

11

另一種簡單的方式做,這是使用*命令。

在常規模式下,在一個字的情況下,類型

*:s//\0\0<Enter> 

*使得搜索圖案當前的單詞(例如\ ABC < \>)。

:s//使用當前搜索模式進行替換,並且替換 部分中的\0部分是匹配的字符串。

然後可以重複這種行爲,說了一句話「高清」,通過鍵入相同的再次,或鍵入

*@: 

@:只是重複過去的ex命令,而不需要一個<輸入>,在這種情況下是替代。

您還可以錄製快速宏來做到這一點使用的q命令

qd*:s//\0\0<Enter>q 

然後鍵入

@d 

當過一個字要加倍重複你的心內容。由於這隻比先前的解決方案少一個字符,所以對您而言可能不值得 - 除非您將在單詞加倍之間進行其他前指令,這會改變行爲@:

96

而在命令-line模式,CTRL + - [RCTRL + W¯¯將插入光標下的單詞。

c_CTRL-R幫助所有其他專用寄存器的列表:

:help c_CTRL-R 
-1
" count word (case sensitive) 
nmap <F4> :%s/\(<c-r>=expand("<cword>")<cr>\)//gn<cr> 
+0

你能評論這是什麼? – 2009-05-15 16:59:13

+1

這對`:substitute`命令使用`n`標誌來打印光標下的單詞出現在當前緩衝區中的次數。非常聰明,但實際上並不是這個問題的答案。 – Jacob 2012-05-26 14:00:18

0

@user11211has the most straightforward way複製光標所在的字:

yiwP 

使勁內字(將光標移動到單詞的開頭),粘貼(在光標前)。

例如。 straigh [T]向前----> straightforwar [d]簡單

[]是光標

要精心...

你可能想有以下光標你重複的話:

yiwPea 

straigh [T]向前----> straightforwardstraightforward []

注:

yiw 

被猛拉內字(無空白)

yaw 

是抽出所有單詞(包括結尾的空白)。

yawPea 

因此是包含空格和位置光標的重複單詞。

straigh [T]向前---->簡單明瞭[]

相關問題