Vim:スクリプトから検索パターンをどのように強調しますか?


0

これを行うのは難しいとは思いませんでしたが、うまくいきません。私がやろうとしているのは、スクリプトから検索ハイライトを有効にすることです。私は次を試しました:

function! g:TestFunc()
    let @/ ="testtext"
    set hlsearch
endfunction

nnoremap <space> :call g:TestFunc()<cr>

どちらも機能しません。つまり、「testtext」が含まれる一部のテキストの前のスペースを押しても、テキストが強調表示されません。ユーザーはまだ「n」を押す必要があります。

またexec 'normal! n'、関数の最後に追加しようとしましたが、それも機能しませんでした。でもfeedkeys('n')失敗します。

回答:


4

関数は、hlsearch呼び出す前に設定されていない場合、期待どおりに機能します。関数で設定しても、既に設定されている場合は効果がないようです。これを回避するにnohlsearchは、マッピングで設定します。

nnoremap <space> :set nohlsearch\|:call g:TestFunc()<cr>

単に特定のパターンを強調することが目的であり、特にhlsearchメカニズムを使用する必要がない場合は、match代わりにコマンドの使用を検討することができます。同じことをよりきれいに達成します。


その一致コマンドはまさに私が探していたものです、乾杯!
スティーブバーミューレン

1

関数内から最後に使用した検索パターンと強調表示を設定することはできません:help function-search-undo。を参照してください。代わりに、:set hlsearchマッピングに直接移動します。


0
function! wordsubstitute#run()
    execute "normal! gv\"ay"
    let @/ = @a
    "set nohlsearch
    let s:search_cmd = "normal! /".@/."/\<CR>"
    execute s:search_cmd."N"
    "set hlsearch
endfunction

を使用する代わりに、マッピングコマンドをnormal! nN記述nNします。

vnoremap [g/ :<c-u>call wordsubstitute#run()<CR>nN
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.