2016-11-08 33 views

回答

4

這裏有替代DJ的映射與hlsearch發揮出色:

  • 跳轉到下一個非空行

    nnoremap <key> :<C-u>call search('^.\+')<CR> 
    
  • 跳轉到以前的非空行

    nnoremap <otherkey> :<C-u>call search('^.\+', 'b')<CR> 
    
  • 將視覺選擇延伸到下一個非空l INE

    xnoremap <key> :<C-u>k`\|call search('^.\+')\|normal! <C-r>=visualmode()<CR>``o<CR> 
    
  • 可視選擇延伸到先前的非空行

    xnoremap <otherkey> :<C-u>k`\|call search('^.\+', 'b')\|normal! <C-r>=visualmode()<CR>``o<CR> 
    
  • 操作以下一個非空行

    omap <key> :<C-u>normal! v<key><CR> 
    
  • 操作以先前的非空行

    omap <otherkey> :<C-u>normal! v<otherkey><CR> 
    

解釋...

隨着hlsearch啓用,/anything將突出每場比賽。由於我們不積極搜索非空行,但僅移動給他們,由此產生的突出顯示是毫無意義的嘈雜。

通過使用:help search(),我們繞過hlsearch,從而使映射更少噪音。

<C-u>用於在調用我們的函數之前去除任何意外範圍。

視覺模式映射的工作原理是這樣的:

  1. 我們定義的「前一個標記」與:help :k
  2. 我們進行搜索,
  3. 我們運行下面的普通模式命令與:help :normal
  4. 我們檢索以前的視覺模式:help i_ctrl-r:help "=,並且:help visualmode()
  5. 我們擴展ŧ他通過:help '',
  6. 對「上一個標記」的位置進行視覺選擇,最後我們將光標移動到:help v_o的視覺選擇的另一端。

運算符掛起的映射只是重用可視化模式映射。

+0

非常感謝!這些工作完美。 – HaySwim

1

我不確定你想要映射這兩個,所以我只使用{}。這個怎麼樣?

nnoremap } /^\S<cr> 
nnoremap { ?^\S<cr> 

該解釋非常簡單。

/   " Search forward 
^   " For the start of a line 
    \S  " Followed by a non-whitespace character 
    <cr> " Enter 

?映射是相同的除了向後而不是向前搜索。

當然爲了完整,你需要添加

nnoremap } /^\S<cr> 
xnoremap } /^\S<cr> 
onoremap } /^\S<cr> 
nnoremap { ?^\S<cr> 
xnoremap { ?^\S<cr> 
onoremap { ?^\S<cr> 

這將使作爲參數傳遞給操作者(例如d{),並在可視化模式下工作。