【问题标题】:Create a command in vim for all modes在 vim 中为所有模式创建命令
【发布时间】:2015-05-11 20:50:37
【问题描述】:

如果我想将 <C-s> 重新映射到 :w<CR> 我必须这样做

nnoremap <C-s> :w<CR>
inoremap <C-s> <Esc>:w<CR>

因为插入模式需要在输入命令之前转义到正常模式(当然,另一个 &lt;Esc&gt; 不会杀死任何东西,但它很丑,我的终端铃声响了,并且所有其他模式都可用 [n, i, v, s, x, c and o] 有很多情况下额外的&lt;Esc&gt; 不会削减它)。

有没有一种简单的方法可以在 Vim 中为“所有模式”映射命令?

【问题讨论】:

  • 你看过stackoverflow.com/questions/3446320/…了吗?你可以用 3 个案例覆盖所有内容,没有 &lt;Esc&gt;
  • 不,我没有。老实说,我知道我只需要三种模式(v、i 和 n),但如果要映射很多线仍然很麻烦。哦,它足够聪明,可以正确处理逃跑吗?有趣的。有谁知道更多关于它“足够聪明”的处理方式?
  • 注意:有一个dedicated site for vi & vim
  • 哇,我不知道。估计是新的吧?我想我会在那儿呆上一阵子。 :) 编辑:是的,它绝对是新的。 “测试版”。

标签: vim


【解决方案1】:

利用CTRL-\ CTRL-N 命令,您可以非常接近。 CTRL-\ CTRL-N 从任何模式进入普通模式。

我们可以只定义两个具有相同右侧的映射,以涵盖正常、可视、选择、运算符挂起、插入和命令行模式。

noremap  <C-S> <C-\><C-N>:write<CR>
noremap! <C-S> <C-\><C-N>:write<CR>

:h CTRL-\_CTRL-N

【讨论】:

  • 这可能是一般性的。谢谢你。 :)
【解决方案2】:

没有简单的“一个映射来统治他们所有”的方式来做这样的事情。从好的方面来说,当您完成所有映射时,您可以将它们放入您的 ~/.vimrc 并忘记它。

但是我必须说这是从正常模式进行保存的 Vim 方式(事实上,在正常模式下做大部分事情)。例如,如果您在插入模式下执行此操作,如果您想退出插入模式、保存,然后重新插入插入模式(请参阅:h i_Ctrl-o),您将破坏您的撤消块。更不用说这样的映射可能会影响到超级方便的. 命令。

您可能还想避免终端上的&lt;c-s&gt; 键,因为它经常会触发终端的软件流控制 (XON/XOFF)。您可以使用 stty -ixon 为您的终端禁用此功能。

【讨论】:

  • 映射&lt;C-s&gt; 以写入缓冲区只是作为示例。我正在寻找一个通用的解决方案。
  • 但问题依然存在。您正在尝试创建一个在每种模式下都“相同”的映射。这听起来不像你吗?我知道它对我有用。
猜你喜欢
  • 1970-01-01
  • 2011-04-22
  • 1970-01-01
  • 1970-01-01
  • 2011-09-21
  • 1970-01-01
  • 2011-10-18
  • 2015-10-26
  • 2012-08-29
相关资源
最近更新 更多