2010-11-23 20 views
36

ViMのsuper star (*)キーは、カーソルの下の単語を検索し、次の一致にジャンプします。ユーザーはnキーで次の一致にジャンプできます。 hlsearchが有効になっている場合は、一致するものも強調表示されます。ViM:検索して強調表示しますがジャンプしません。

*を押して強調表示された一致を取得し、nキーを使用して一致をナビゲートできるようにします。しかし、私はではない *を押すと、ViMは次の一致にジャンプしたいので、現在の単語のままにしておきます。これを行う方法はありますか?

答えて

23

私はマップになります。

nnoremap * *`` 

は、それがジャンプリスト内のジャンプを追加することを除いて、あなたが希望通りのように動作します。あなたが必要とすることを防ぐために:

nnoremap * :keepjumps normal *``<cr> 
+0

"blink" by私は、次の一致する単語が画面外にある場合は、点滅することを意味しました... – khachik

+0

これはまさに私が望んでいたものです!本当にありがとう! :-) –

+17

2番目のものは私のためには動作しません。* E169:Command too recursive – Deqing

2

簡単な解決策が私の頭に浮かんできました。ファイルにmap * *#を入れてください(それでも点滅します)。

+0

どうして* ''カーソルがまったく同じ位置に戻るのですか – mb14

+0

@ mb14 '#'にはない利点がありますか? – khachik

+0

それは動作します;-) *#あなたがnowrapscanを設定し、単語の最後の出現からの検索を行うならば、中と最悪の場合には単語の先頭にカーソルを移動します*#あなたに前の単語に移動します*がどこにもジャンプしなかったため) – mb14

5

を私は他の選択肢よりも良い作品だと思う私の.vimrcに次き:

" Put word under cursor into search register and highlight 
nnoremap <silent> <Leader>* :let @/='\<<C-R>=expand("<cword>")<CR>\>'<CR>:set hls<CR> 
vnoremap <silent> <Leader>* :<C-U> 
    \let old_reg=getreg('"')<Bar>let old_regtype=getregtype('"')<CR> 
    \gvy:let @/=substitute(
    \escape(@", '/\.*$^~['), '\_s\+', '\\_s\\+', 'g')<CR> 
    \gV:call setreg('"', old_reg, old_regtype)<CR>:set hls<CR> 
3

を使用すると、現在のビューを維持し、追加したい場合歴史に検索し、この[それほど効率的ではない]の解決方法を試してください:それはマークを使用している

noremap * msHmt`s*`tzt`s 

s(保存)とt(トップ)。

5

最適なソリューション:

  1. プラグインをしようと、スターキーの動作はとても

を変更することはされていない

  • ジャンプリストにジャンプを追加しないでください。 http://www.vim.org/scripts/script.php?script_id=4335

    よりもはるかに優れ:

    私はまだこれを見ていない
  • +0

    素晴らしいプラグインですが、もう一つの便利な機能は、 '*'を使ってビジュアルモードで選択したテキストを検索することです。欠点は、あなたが単語の真中にいたならば、あなたのカーソルを単語の先頭に移動させることです。 – Deqing

    +0

    第3のオプションが私のために最適です。ハイライト表示され、画面とカーソルの両方が移動しません。 –

    2

    nmap <silent> * "syiw<Esc>: let @/ = @s<CR>

    それは非常に短いですし、点滅中にもたらすことができるの周りにジャンプ含まれません。

    説明:カーソルの下の単語をsレジスタにコピーし、検索レジスタ(/)をsレジスタのレジスタに設定します。検索レジスタは直接書き込み可能ではないため、letが必要であり、したがってsilentではvimのコマンドラインをきれいに保つことができます。

    関連する問題