我正在编辑线移动的键映射如下:
vnoremap <silent> <C-j> :m '>+1<CR>gv
vnoremap <silent> <C-k> :m '<-2<CR>gv
他们应该上下移动行块并且在大多数情况下工作正常,除了在文件的顶部和底部。
当我选择第 1 2 行并输入 ctrl-k 时,当然,它不能再向上移动,而预期的行为是第 1 2 行在视觉模式下仍然是高亮显示。
目前的情况是,第 1 2 行不再突出显示。我知道那是因为 ":m '<-1"失败了,那么 gv 将不会被执行。
所以我的问题是如何忽略这个错误以确保 gv 无论如何执行?或者其他一些解决方案?
请注意,我知道一个解决方案 linemovement.vim。它在两个单独的命令和一些函数中运行这些。虽然我认为这应该是一个轻量级的代码。
最佳答案
您需要 :silent!
来抑制输出并跳过错误:
vnoremap <C-j> :<C-u>silent! '<,'>m '>+1<CR>gv
vnoremap <C-k> :<C-u>silent! '<,'>m '<-2<CR>gv
<C-u>
删除 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
谢谢你的想法。
关于vim - 如何忽略 VIM 键映射命令系列中的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26071935/