テキスト編集作業で Vim を試してから約 1 週間が経ちました。C 関数定義を選択する最速の方法を知りたいです。
たとえば、次のような関数があるとします。
void helloworlds( int num )
{
int n;
for ( n = 0; n < num; ++n ) {
printf( "Hello World!\n" );
}
}
関数名を含む定義全体を削除するにはどうすればよいですか?
テキスト編集作業で Vim を試してから約 1 週間が経ちました。C 関数定義を選択する最速の方法を知りたいです。
たとえば、次のような関数があるとします。
void helloworlds( int num )
{
int n;
for ( n = 0; n < num; ++n ) {
printf( "Hello World!\n" );
}
}
関数名を含む定義全体を削除するにはどうすればよいですか?
Vim ではよくあることですが、方法はたくさんあります。
最初の 2 つの解決策は、空白行がないことに依存することに注意してください。
カーソルが関数名の行にある場合は、 を試してくださいd}。次のブロック (つまり、関数本体) まですべてが削除されます。
関数本体自体の中でdap、「段落」を削除します。
で中括弧ブロックを削除できますda}。(この構文が気に入った場合は、Tim Pope の素晴らしい Surround.vim をお勧めします。これは、同様の感覚でより多くの機能を追加します)。
正規表現を使用して、左端にインデントされた次の右中括弧まで削除することもできます。d/^}Enter
]][[次/前の最初の列の中括弧に移動します (上で述べた正規表現と/
を使用することと同等です。モーションと組み合わせると、同じ効果が得られます。Python -modeなどのアドオンでは、これらの演算子は正確に意味するように再定義されます。探しているもの: 関数から関数へ移動します。?
d
ヘッダー/名前、またはブロックの前の行にいる場合は、da}うまくいくはずです。
ブロックの下にいる場合は、Vim 検索の便利な「オフセット」機能を利用することもできます。d?^{?-1最初の列の左中括弧が最初に出現する前の 1 行まで逆方向に削除します。このコマンドは入力するのが少し難しいです。<leader>
そこからショートカットを作ってもいいかもしれません。
私は Vim で C プログラミングをあまり行いませんが、そのようなことを支援するプラグインは確かにあります。GitHub でVim Scriptsまたはそのミラーを試してください。
プラグインをインストールする場合は、vim-textobj-functionを使用するvif
と、Visual の場合は Inside Function を選択しvaf
、Visual の場合は A Function を選択します。
daf
署名のある行と関数本体の両方の関数を削除します({}
)
このプラグインによって定義されたテキスト オブジェクトはより具体的であり、関数本体がテキストの連続したブロックであるか{
、行の最初の文字に配置されていることに依存しません。
欠点は、外部プラグインに依存することです。
最も単純で直接的な方法は次のとおりです (関数内のどこでも機能します)。
v enter visual mode
{ move to first brace in function (may have to press more than once)
o exchange cursor from top to bottom of selection
} extend selection to bottom of function
d delete selected text
完全なコマンド シーケンスは次のようになりますv{o}d
。同じ方法で削除以外の操作を実行できることに注意してください。たとえば、関数をコピーするには、 のy
代わりに (yank) を使用しd
ます。
この簡単な方法を使用してください
1.Go to the function definition
2.dd - delete function definition
3.d -start delete operation
4.shift+5(%) - delete the lines between { to }
もう 1 つの方法は、関数の開始行に移動して : を押すことですVj%
(またはV%%
、スタイルが同じ行に左中括弧を配置する場合)。これにより、Visual-Line モードになり、パーセントによって対応する右中括弧が表示されます。2 番目のスタイルでは、最初の % は選択した行の左中括弧に移動し、2 番目は対応する右中括弧に移動します。
括弧、角かっこ、C スタイルの複数行コメント、およびプリプロセッサ ディレクティブに対しても機能します。
詳細については、マニュアルを参照してください。
非視覚的な方法:
d/^}/e
... 削除対象}
の行を含めて検索して削除します。
/e
(上記の回答には記載されていません)なしでは、解決策は不完全です。
with /e
- 検索は一致の最後まで行われるため、閉じ括弧が含まれ、コマンドはヤンクにも適しています:
y/^}/e