我正在编辑线移动的关键映射,如下所示:
vnoremap <silent> <C-j> :m '>+1<CR>gv
vnoremap <silent> <C-k> :m '<-2<CR>gv
Run Code Online (Sandbox Code Playgroud)
它们应该上下移动行块,并且在大多数情况下工作正常,除了文件的顶部和底部.
当我选择线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
Run Code Online (Sandbox Code Playgroud)
<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
Run Code Online (Sandbox Code Playgroud)
谢谢你的想法.