【问题标题】:How to swap the semicolon and colon keys in Normal-mode mappings in Vim?如何在 Vim 的普通模式映射中交换分号和冒号键?
【发布时间】:2020-10-24 13:16:35
【问题描述】:

为了让自己使用较短的击键来获取冒号,我在.vimrc 文件中定义了以下映射:

noremap ; :
noremap : ;

但是,这破坏了我的其他一些映射,因为现在它将冒号解释为分号。比如映射

map ,c :cd ~/code<CR>

变成

map ,c ;cd ~/code<CR>

我该如何解决这个问题?

【问题讨论】:

  • 是否需要重新映射冒号?我只使用nnoremap ; : 就可以了。
  • @alberge:仅使用这些映射中的第一个,您可以隐藏 ; 正常模式命令。当添加第二个映射时,;: 的含义交换了。
  • 哇,我怎么没想到使用这个映射?我现在要把它添加到我的 .vimrc 中。
  • 我刚才也有类似的想法,决定全局交换它们,因为我更经常使用冒号:) unix.stackexchange.com/questions/615799/…

标签: vim


【解决方案1】:

:map 系列的命令解释 映射定义就好像它们是由用户键入的一样,因此任何 当前定义的映射(包括正在定义的映射)是 像往常一样触发。这就是为什么可以定义的原因 必要时递归或嵌套映射。这也是为什么 冒号映射应用于通过:map 定义的其他映射,例如 你的例子中的那个:

:map ,c :cd ~/code<cr>

要避免这种行为,请使用 :noremap 系列命令, 不要解释映射右侧的任何映射 定义(见:help :nore):

:noremap ,c :cd ~/code<cr>

在大多数情况下,这种对其他映射的干扰是不可取的 副作用。作为一个经验法则,我会推荐一个去 定义新映射时遵循以下约定:

始终使用:noremap 系列命令, 除非有明确的理由不这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-10-20
    • 2021-08-05
    • 1970-01-01
    • 2018-11-04
    • 1970-01-01
    • 2019-01-11
    • 1970-01-01
    相关资源
    最近更新 更多