2011-12-07 5 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') 

私が入力した場合:レジスタが、それは示しています

--- Registers --- 

"g ^Mj 

^Mは、特別な色ではありません。

私は自分の.vimrcに次のようにあります

map <CR> :call MyFunction<CR> 

私はレジスタに格納するキャリッジリターンがMyFunctionを実行することです。 MyFunctionは、setregを使用するのではなく、手動でバッファを満たす限り完全に呼び出されます。

どこが間違っていますか?私のプラットフォームはLinuxです。

+2

'call setreg( 'g'、 '^ Mj')'に^ Mをどのように入力しましたか?あなたはctrl-v ctrl-mを使いましたか?または、キャレットとMをタイプしただけですか? – sidyll

+0

キャレットM ...ああ...私はキャレットvキャレットmを入力しようとしましたが、それは失敗しました。私は文字列 "^ V^M"を書くのではなく、実際にctrl-v ctrl-mを挿入モードで入力しなければならないことに気づいていませんでした。ありがとう!実際にそれらのキーを押すことはうまくいった。レジスタは正しく設定されています。私はあなたの助けに感謝します。 – renick

+0

ctrl-v は私が通常 '^ M'を得るために使うものです。 – overthink

答えて

2

一般的なルールでは、vimスクリプトの行の中でascii制御文字(0x20以下)を避けてください。 vimrcに十分な行がない場合は、vimが不正な行終了パターン(mac?)を検出する可能性があります。

nr2char(13)を使用すると、文字列リテラルに^Mを含めることができます。 sidyllは彼のコメントにあなたに言ったよう

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

そうでない場合は、制御文字が挿入モードでCTRL-Vを使用して入力することができます。

6

あなたはより多くの助け

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

Vimについて学ぶには常に新しいことがあります! – lucapette

0

doesntのは、常に動作し、トップの答えのために、より簡単に

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

"\<cr>"または"\r"

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

を探したりしています。私の場合は、/ nはトリックを提供しました。

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

必ず二重引用符を使用してください。

関連する問題