2011-03-15 6 views
0

最近、ハイライト検索を切り替えるためのマッピングを作成します。これはシンプルですが、かなり役に立ちます。nmap ,m :set hlsearch!のようなものです。私が直面している唯一の問題は、時々私がちょうど,mを押した後に失われるということです。マッピング内のスクリプト

「それが仕事でしたか?」「それは、オンまたはオフになりましたか?」...

:-)フィードバックを受けていないのパニックからのよくある質問は、だから私は、エコー、「オン」または「オフすることを考えました"私は落ち着かせるだろう。ここで大きな質問が到着しました。マッピング内に小さなスクリプトを含めることは可能ですか?私は機能を作成することができます知っているが、それは、この単純なスクリプトのための私の意図ではありません。

if (&hlsearch) 
    echo "Search Highlight On" 
else 
    echo "Search Highlight Off" 
endif 

私は多分、プリプロセッサディレクティブのように改行を「エスケープ」する必要があることを推測:

nmap ,m :set hlsearch!    \ 
    if (&hlsearch)     \ 
     echo "Search Highlight On" \ 
    else       \ 
     echo "Search Highlight Off" \ 
    endif 

しかし、おそらくそれは適切な方法ではなく、うまくいかず、可能かどうかわからない。

私が気付くもう1つのことは、ifechoの両方が "コロン"コマンドであっても、:if (1) echo "works"のようなタイプ入力は機能しません。 echoでエラーが発生します。だから私は何らかの方法で各コマンドを分離する必要がありますか?他のコロンでechoに先行すると、問題は解決されませんでした。

ありがとうございました!

答えて

2

あなたはそれをすることができますが、私はそれに対してお勧めしたいと思います。マッピングでは、1つまたは2つのキープレス(,m)がキー入力のシーケンスにリンクします。したがって、あなたが対話的にそれをやっていたならば、あなたがやりたいために、あなたはちょうどあなたと同じようにコマンドを入力する必要があります。

nmap <silent> ,m :set hlsearch!<CR>:if (&hlsearch)<CR>echo "Search Highlight On"<CR>else<CR>echo "Search Highlight Off"<CR>endif<CR> 

<CR>を押すのと同じですを押します。 <silent>は、マッピングの内容全体を画面に表示しないようにします。そのため、「検索ハイライトのオン/オフ」のみが表示されます。

あなたは(いくつかのケースで)コマンドに参加することができ、他の方法は、例えばので|である:

:if (1) | echo "works" | endif 

はこのについての詳細は、:help :barを参照してください。

機能で実行してください!これは、長期的には、より多くのメンテナンスを行います。

+0

ありがとう、私はここで関数の役割を理解しています。すべてのヒント、特に ':bar'に感謝します。 – sidyll

4

この文脈でifを使用する必要はありません。三元演算子?:が行います。

nnoremap <silent> ,m :set hlsearch!<bar>echo "Search Highlight ".(&hlsearch?"On":"Off")<cr> 

また、この特定のケースでは、:set-?は十分に考えられます。

nnoremap <silent> ,m :set hlsearch!<bar>:set hlsearch?<cr> 
+0

+1、他の解決策に感謝;-)非常に興味深く簡単ですが、私はVimの三項演算子について認識していませんでした。 – sidyll

+1

terserバージョンを使うことができます: ':nnoremap 、m:set hls! hls? '。 –

1
:nohlsearch 

:set hlsearch! hlsearch? 

:nnoremap <C-l> :<C-u>nohlsearch<bar>set nocursorline nocursorcolumn nolist<CR><C-l> 
+0

JA:いいえ。 – sidyll

1

受け入れ答えと同様の方法でこれを行う別の方法:

map ,m :set hlsearch! \| echo &hlsearch?"on":"off"<cr> 

if elseコンストラクトの代わりに?オペレータを使用します。

+0

ありがとう@skeept。これはLuc Hermitteによって提案されました – sidyll

+0

Opps、私はそれを逃した。私は後で自分の答えを削除するかもしれません。 – skeept

関連する問題