回答:
別の解決策は、vim-textobj-entireというプラグインを使用することです。デフォルトでは、このプラグインは、先頭および末尾の空行を除くバッファ全体に対して、ae
バッファ全体に対してテキストオブジェクトを提供しますie
。
このプラグインは、同じ作成者によるvim-textobj-userに依存しているため、ユーザーは任意のテキストオブジェクトを快適に定義できます。これをうまく利用する多くのプラグインがあります。
デフォルトではファイル全体のテキストオブジェクトはありませんが、を使用して作成できますomap
。この場合、次のようになります。
onoremap f :<c-u>normal! mzggVG<cr>`z
仕組みの内訳は次のとおりです。
onoremap f " make 'f' the text object name
:<c-u> " use <c-u> to prevent vim from inserting visual selection marker at the beginning of the command automatically.
normal! " use normal to make key presses ignoring any user mappings
mzggVG<cr>`z " make a marker in register z, select the entire file in visual line mode and enter the normal command, and go back to the z marker
ノート:
Ctrluコマンドラインモードで使用すると、カーソル位置の左側にあるすべてのものを削除できます。これが実行される理由は、ビジュアルモードからコマンドラインを直接入力すると、コマンドラインに自動的に挿入'<,'>
されるためです。またf
、f
通常は行の次の検索文字に移動するために使用されるため、以外の何かを使用することをお勧めします。たとえば、現在の行のfi
次i
の行に移動します。
関連するヘルプトピック:
:help omap-info
:help :normal
:help c_CTRL-U
:help v_:
``
と、カーソルが前の場所に戻ります。
以下は、タスクを達成するためのいくつかの素早いn 'dirtyマッピングです。
nnoremap yY :%yank <c-r>=v:register<cr><cr>
nnoremap dD :%delete <c-r>=v:register<cr><cr>
これでとを使用してyY
、dD
それぞれヤンク/削除できます。完全なテキストオブジェクトを使用するほど良いとは言えませんが、最も単純なソリューションが最適な場合があります。
詳細については、以下を参照してください。
:h :y
:h :d
:h [range]
:h v:register
:h c_ctrl-r
:h @=
mmgg"+yG`m
、これを考えたことはありませんでした。おかげで、これは.vimrcで正しく行われています。