2011-03-15 37 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 

但可能這不是正確的方式,不起作用,我甚至不知道它是否可能。

我注意到的另一件事是,即使ifecho都是「冒號」命令,類似:if (1) echo "works"之類的東西也不起作用。它給出了一個錯誤echo。那麼我需要以某種方式分離每個命令嗎?用另一個冒號前面的echo並沒有解決問題。

感謝您的幫助!

回答

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>是按ENTER的等價物。 <silent>阻止它將映射的全部內容回顯到屏幕,因此您只能看到「搜索亮點開/關」。

,您可以加入命令(在某些情況下),另一種方法是用|因此,例如:

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

更多這方面的信息,請參閱:help :bar

用功能做!從長遠來看,這將使事情變得更加可維護。

+0

謝謝Al,現在我明白了這裏一個函數的作用。感謝每一個提示,特別是':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 niebędęgrzesząwięcej:-) – sidyll

1

類似於接受的答案的方式這樣做的另一種方式:

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

但使用?運算符而不是if else構造。

+0

謝謝@skeept。這也是Luc Hermitte提出的 – sidyll

+0

奧普斯,我錯過了。我稍後可能會刪除我的答案。 – skeept