2016-11-08 82 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{),并在可视化模式下工作。