バッファ全体のテキストオブジェクトはありますか?


28

gg"+yGまたはのようなコマンドを入力することがよくありggdG、カーソルを2回移動することなくこれを実行するためのより効率的な方法が必要です。たとえばy[movement]、カーソルを移動せずにバッファ全体をコピーするために使用できるコマンドはありますか?

回答:


36

vimはパーセント記号を使用して現在のバッファーを参照するため、これを使用してすべてをすばやく取得できます。

:%yバッファ全体 :%y+をヤンクして+レジスタにヤンクします(vimが適切なオプションでコンパイルされていれば、おそらくクリップボードも)。

:%dそして:%d+削除のために同じことをするでしょう。

これらの各ケースでは、カーソルは所定の位置に残ります。


うわー、今までずっと使っていてmmgg"+yG`m、これを考えたことはありませんでした。おかげで、これは.vimrcで正しく行われています。
ドアノブ

@Doorknobマークを設定して使用する代わりに、C-o2回使用して戻ることができます。
ルスラン

10

別の解決策は、vim-textobj-entireというプラグインを使用することです。デフォルトでは、このプラグインは、先頭および末尾の空行を除くバッファ全体に対して、aeバッファ全体に対してテキストオブジェクトを提供しますie

このプラグインは、同じ作成者によるvim-textobj-userに依存しているため、ユーザーは任意のテキストオブジェクトを快適に定義できます。これをうまく利用する多くのプラグインがあります。


8

デフォルトではファイル全体のテキストオブジェクトはありませんが、を使用して作成できます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コマンドラインモードで使用すると、カーソル位置の左側にあるすべてのものを削除できます。これが実行される理由は、ビジュアルモードからコマンドラインを直接入力すると、コマンドラインに自動的に挿入'<,'>されるためです。またff通常は行の次の検索文字に移動するために使用されるため、以外の何かを使用することをお勧めします。たとえば、現在の行のfiiの行に移動します。

関連するヘルプトピック:

:help omap-info
:help :normal
:help c_CTRL-U
:help v_:

カーソルをそのままにしてこれを行う方法はありますか?
Random832

@ Random832を末尾に追加する``と、カーソルが前の場所に戻ります。
SnoringFrog

これにより、選択がyankコマンドに適用されなくなることが心配です。今日はいくつか実験します。
Random832

1
マッピングにマーカーコマンドを追加しました。現在の位置にカーソルを残します。
エバーグリーン

2

以下は、タスクを達成するためのいくつかの素早いn 'dirtyマッピングです。

nnoremap yY :%yank <c-r>=v:register<cr><cr>
nnoremap dD :%delete <c-r>=v:register<cr><cr>

これでとを使用してyYdDそれぞれヤンク/削除できます。完全なテキストオブジェクトを使用するほど良いとは言えませんが、最も単純なソリューションが最適な場合があります。

詳細については、以下を参照してください。

:h :y
:h :d
:h [range]
:h v:register
:h c_ctrl-r
:h @=
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.