2013-09-23 26 views
0

這個問題其實和我以前的question有關。爲什麼setreg在預期的Vim的自定義命令中不起作用?

我在_vimrc以下自定義命令:

command! Test %s/some/\=setreg('C', submatch(0), 'l')/g 

我在下面的文字中使用該自定義命令Test

something 

運行此命令後的文字將變爲:

=setreg('C', submatch(0), 'l')thing 

但是,如果我運行相同的命令%s/some/\=setreg('C', submatch(0), 'l')/g從Vim的命令行,我得到:

0thing 

當運行自定義命令Test寄存器C沒有改變。但是,當我從命令行運行上述命令時,它會發生變化,這與預期一致。

回答

1

我不確切地知道什麼在擾亂你,就像上次一樣,你的兩個命令對我來說都很好。

通常這與一些非默認設置有關,通常是'cpoptions'。試用:set cpo&vim -N -u NONE後。另外,請檢查反斜槓是否在:command Test的命令輸出中。

最後(你不應該找到問題的根源),你可以解決它通過使用中間功能:

function! Test() 
    %s/some/\=setreg('C', submatch(0), 'l')/g 
endfunction 
command! Test call Test() 
+1

我猜他錯過了'的反斜槓:command'以及... – Kent

+0

非常感謝。確實增加了一個額外的反斜槓。 '命令!測試%s/some/\\ = setreg('C',submatch(0),'l')/ g'。所以,我需要在自定義命令中轉義反斜槓,但不能在函數定義中使用。 –

+0

那麼,通常不會(除非你執行整個':command'定義並使用雙引號)。我不知道爲什麼你必須這樣做,但只要它有效...... –

相關問題