Help us understand the problem. What is going on with this article?

Vimで、特定の範囲内(textobj)で検索する

More than 5 years have passed since last update.

問題

行とかファイル全体とかではなく、特定の範囲内で検索をしたいことがある。その場合、ヴィジュアルモードで選択して検索するのではなく、textobjの範囲内でできると便利そう。

たとえば、以下のようなすげー長い関数があった時に、

function longLongFunction ($arg) {
   $foo = $arg + 'foo';

    // ... とても長い ...

   $bar = $arg + 'bar';
}

この関数内で$argがどんな使われ方をしているか検索したいことがある。普通に検索すると、別の関数で定義されている$argもひっかかってしまうし、textobjをヴィジュアルモードで選択して検索するのは二度手間だし、表示も微妙。

解決

vim-operator-searchを使う。

上記のブログの通り、以下のように設定しているとする。

nmap <Space>s <Plug>(operator-search)
nmap <Space>/ <Plug>(operator-search)if

前述の関数の場合、#にカーソルがあった場合、

function longLongFunction ($arg) {
   $foo = $arg + 'foo';
#
    // ... とても長い ...

   $bar = $arg + 'bar';
}

<Space>si{とするとInput search pattern:ときかれるので、arg<CR>と入力すると、上記の関数内のargが検索される。つまり、この場合のi{のように、operatorの次に入力したtextobjの範囲内で検索が行われるということ。

vim-textobj-functionに対応したプラグイン(Vim, C, Perl, Ruby, JavaScript, PHPがいまのところあるようだ)を使うと、上記の設定の2番めが使える。

たとえばPerlなら、カーソルが以下の関数内にあるときに、

sub long_long_sub {
   my $arg = shift;

   # ...

   $arg = '...'
}

<Space>/と入力するだけで、Input search pattern:ときかれ、argと入力すればよい。

議論

vim-textobj-functionに対応した言語が少なくて悲しい……。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away