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

标签 vim keymapping

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

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/

    相关文章:

    vim - 有什么办法可以在 vim 中删除而不覆盖你上次的拉动吗?

    python - vim 中丰富多彩的 Python 语法?

    禁用另一个 nmap 的 vim nmap

    pycharm - 是否可以在 Pycharm 中映射一个制表符以产生 4 个空格。如果是这样怎么办?

    Vim 在按键映射方面的奇怪之处

    python - Vim 启动时出现 ImportError : No module named UltiSnips

    c - 在 vim 中为 gtk+-2.0 设置 clang_complete

    vim - 在 Vim 中打开所有匹配特定模式的文件

    visual-studio-2010 - 如何覆盖 Visual Studio 的菜单加速器快捷方式?

    Vim:打开新的资源管理器选项卡,其中包含您当前所在文件的目录