2011-12-07 37 views
4

我在.vimrc裏有這樣的命令:在vim中,如何使用setreg將回車添加到寄存器?

vip:normal @g<CR> 

當我通過鍵入緩衝區,這樣設置寄存器「G」,它的工作原理:

qg<CR>jq 

如果鍵入:寄存器,它示出了:

--- Registers --- 

"g ^Mj 

在此之後,在一個回車鍵入@g結果,然後將光標移動到下一行。^M以特殊顏色顯示。

但是,當我在我的vimrc中使用setreg命令時,如果鍵入@g,則不會發生任何事情。

call setreg('g','^Mj') 

如果I型:寄存器,它示出了:

--- Registers --- 

"g ^Mj 

的^ M是不是在一種特殊的顏色。

我在我的.vimrc如下:

map <CR> :call MyFunction<CR> 

回車我想在寄存器中存儲的運行MyFunction的。只要手動填充緩衝區而不是使用setreg,就可以調用MyFunction。

我哪裏出錯了?我的平臺是Linux。

+2

你是如何在'call setreg('g','^ Mj')'中輸入^ M的?你用ctrl-v ctrl-m嗎?或者只是輸入一個脫字號和一個M? – sidyll

+0

插頁M ......呃......我曾嘗試打字脫字符和插入符號,但失敗了。我沒有意識到你實際上必須在插入模式下鍵入ctrl-v ctrl-m,而不是寫入字符串「^ V^M」。感謝那!實際上擊中這些鍵工作。寄存器設置正確。我感謝您的幫助。 – renick

+0

ctrl-v 是我通常用來獲取'^ M'的東西。 – overthink

回答

2

在一般規則中,避免在vim腳本的行內使用ascii控制字符(低於0x20)。當您再次閱讀您vimrc如果沒有足夠的線,VIM可以檢測到不良線路終端模式(MAC?)

使用nr2char(13)包括在字符串字面^M

call setreg('g', nr2char(13).'j') 

否則,如sidyll在他的評論中告訴你的,可以在插入模式下使用CTRL-V輸入控制字符。

6

您正在尋找"\<cr>""\r"

call setreg('g',"\<cr>j") 
call setreg('g',"\rj") 

或者更簡單地說

let @g = "\<cr>j" 
let @g = "\rj" 

如需更多幫助

:h expr-quote 
:h [email protected] 
+0

Vim總會有新的東西可以學習! – lucapette

0

頂端回答總不工作。提供/ n在我的情況下做到了這一點。

:let @a="foo" 
:let @a="/nbar" 

請務必使用雙引號。