Vim コマンドマッピング

Vim コマンドマッピング

私の質問は、いくつかの部分で構成されたコマンドを単一のキーの組み合わせにマッピングすることです。

私の.vimrcには次の行があります。

nnoremap <leader>ss :w\|:silent !execute_external_script > output_of_script.txt\|:redraw!<cr>

ご覧のとおり、キーを押すと3つのコマンドを実行したいと思います<leader>ss。まず、ファイルを作成してから外部スクリプト(単位テスト実行)を実行します。残念ながら、私の端末はシェルコマンドを実行した後にVimを再描画しません。だから私はコマンドを追加しようとしましたが、:redraw!コマンドはVimではなくシェルに渡されるようです。次のエラーが発生したためです。

bash: :redrawecho: command not found

スクリプトがシェルで実行され、Vimで再描画されるようにコマンドを作成するにはどうすればよいですか? (また、ボーナスで誰かがそれが何で<cr>あるかを説明できますか?)

ベストアンサー1

はい、この:!コマンドはコマンドラインの残りの部分を引数として使用します。他のVimコマンドをリンクするには、次のコマンドをラップします:execute

nnoremap <leader>ss :w\|:silent execute '!execute_external_script > output_of_script.txt'\|:redraw!<cr>

または;で区切って複数のコマンドラインを実行することもできます<CR>。結局のところ、マッピングは固定マクロです。

nnoremap <leader>ss :w\|:silent !execute_external_script > output_of_script.txt<cr>:redraw!<cr>

注:\|一般的なアプローチは、<Bar>コマンド区切り文字をエスケープするのではなく、特別なキーコードを使用することです。完全なリストを参照してください:help keycodes<CR>入力する

おすすめ記事