如何忽略VIM键映射命令系列中的错误?

时间:2014-09-27 06:23:54

标签: vim keymapping

我正在编辑线移动的键映射,如下所示:

vnoremap <silent> <C-j> :m '>+1<CR>gv
vnoremap <silent> <C-k> :m '<-2<CR>gv

他们应该上下移动行块,并且在大多数情况下工作正常,除了文件的顶部和底部。

当我选择第1行并输入ctrl-k时,确定它不能再向上移动,而预期的行为是在视觉模式下线1 2仍然高亮显示。

当前的外观是,线1 2不再突出显示。我知道这是因为&#34;:m&#39;&lt; -1&#34;失败了,那么gv就不会被执行了。

所以我的问题是如何忽略此错误以确保gv执行?还是其他一些解决方案?

请注意,我知道解决方案linemovement.vim。它在两个独立的命令和一些函数中运行它们。虽然我认为这应该是一个轻量级的代码。

1 个答案:

答案 0 :(得分:6)

您需要:silent!来抑制输出并跳过错误:

vnoremap <C-j> :<C-u>silent! '<,'>m '>+1<CR>gv
vnoremap <C-k> :<C-u>silent! '<,'>m '<-2<CR>gv
  • <C-u>删除&#34;选择范围&#34;由Vim自动插入,因为:silent不接受范围。
  • 我们在'<,'>之前添加:move,以便它仍可用于视觉选择。

以下是应用于我的增强(添加自动延迟)版本的映射的修复:

nnoremap ,<Up>   :<C-u>silent! move-2<CR>==
nnoremap ,<Down> :<C-u>silent! move+<CR>==
xnoremap ,<Up>   :<C-u>silent! '<,'>move-2<CR>gv=gv
xnoremap ,<Down> :<C-u>silent! '<,'>move'>+<CR>gv=gv

感谢您的想法。