Vim関数をサイレントに呼び出す


25

カーソルを現在の行の最初の文字に移動する小さなVim関数を作成しました。カーソルがすでに最初の文字にある場合、カーソルは代わりに最初の列に移動します。

" Jump to first character or column
noremap H :call FirstCharOrFirstCol()<cr>

:function! FirstCharOrFirstCol()
:  let current_col = virtcol('.')
:  normal ^
:  let first_char = virtcol('.')
:  if current_col == first_char
:    normal 0
:  endif
:endfunction

この関数をサイレントモードで呼び出すにはどうすればよいですか?むしろ、「:call FirstCharOrFirstCol()」はステータス行に表示されませんでした。単に変更するだけnoremap H :silent call…では十分ではないようです。


7
ちょっとしたメモ:VimScriptファイル(つまり*.vim)では、先頭の:文字は必要ありません。
tommcdo

回答:


34

サイレントマップを定義することで、関数をサイレントに呼び出すことができます。

noremap <silent> H :call FirstCharOrFirstCol()<cr>

詳細については、を参照してください:h :map-<silent>。特に、これはマッピングが実行されたときにコマンドが画面にエコーされないことだけを保証することに注意してください。この:silentコマンドは、関数自体からの出力を抑制するために使用されます(を参照:h :silent)。


1
良い:silentものは、私が望んでいたものです。関数にエラーがある場合、を使用しない限りメッセージが表示されることに注意してください!。コードが無効な状態の:silentままになっていることに気がつかなかったので、エコーを抑制せず、出力にエラーが表示される可能性があるため、正しく使用していないと思いました!!
JonnyRaa
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.