【问题标题】:can't get these control keys to work in vim无法让这些控制键在 vim 中工作
【发布时间】:2019-05-21 04:43:01
【问题描述】:

我正在查看来自 Ben Frain 的 vimrc 文件的一部分

https://gist.github.com/benfrain/f09dd39e66fe2da9cf0a

" Allow line movement on wraps with CTRL+usual {{{
vmap <C-j> gj
vmap <C-k> gk
vmap <C-h> g$
vmap <C-6> g^
vmap <C-0> g^
nmap <C-j> gj
nmap <C-k> gk
nmap <C-4> g$
nmap <C-6> g^
nmap <C-0> g^
" }}}

我确实注意到该列表中有一个问题,例如ctrl-k 已经做了 gk。所以当它起作用时,它不是来自他的映射。

我正在使用 macvim

即使我尝试一些简单的事情

~/.vim$ cat vimrc
nmap <C-0> aaaa
~/.vim$ 

~/.vim$ cat vimrc
nmap <C-0> aaaa
vmap <C-0> aaaa
~/.vim$ 

它不起作用,它没有将 ctrl-0 映射到 'aaaa' 的输入

我试过/usr/local/bin/vim(这是通过brew cask install macvim 安装的macvim),我试过/usr/bin/vim(这是预装的vim)。所以我使用哪个 vim 没有区别。

我想知道可以映射哪些 ctrl 键(如果有)。

我听说映射 ctrl 键是个坏主意,可能因为很多都在使用中,并且最好使用领导键,其默认值为反斜杠。所以 。 map &lt;leader&gt;0 aaaa 。这行得通,但我仍然对 ctrl 的映射感到好奇。

【问题讨论】:

    标签: vim


    【解决方案1】:

    Vim 不会“看到”所有可用的 Ctrl 组合。 Vim 是为 Unix 终端开发的,这些终端并不为应用程序提供所有 Ctrl 键。

    要测试 ctrl 组合是否可映射,请执行以下操作:

    打开 Vim 并进入插入模式。然后点击 Ctrl-v 后跟要映射的 Ctrl 组合。如果显示某些内容,则 Ctrl 组合是可映射的。

    例子:

    • 如果您按 Ctrl-v,然后按 Ctrl-k,则会显示字符 ^k(通常为浅蓝色)。所以 Ctrl-k 是可映射的。
    • 如果您按 Ctrl-v,然后按 Ctrl-0,则不会显示任何内容。所以 Ctrl-0 不是可映射的。
    • 如果您按 Ctrl-v 然后按 Ctrl-3 字符 ^[ 将显示。所以... Ctrl-3 等于 ESC

    【讨论】:

    • 知道哪些命令键是可映射的吗? (macbook 键盘上的命令键)
    【解决方案2】:

    本页提到xmap、vmap和nmap的区别https://vim.fandom.com/wiki/Mapping_keys_in_Vim_-Tutorial(Part_1)

    :map <-- (presumably display all maps)
    
    :nmap - Display normal mode maps
    :imap - Display insert mode maps
    :vmap - Display visual and select mode maps
    :smap - Display select mode maps
    :xmap - Display visual mode maps
    :cmap - Display command-line mode maps
    :omap - Display operator pending mode maps
    

    nmap, nnoremap, nunmap          Normal mode
    imap, inoremap, iunmap          Insert and Replace mode
    vmap, vnoremap, vunmap          Visual and Select mode
    xmap, xnoremap, xunmap          Visual mode
    smap, snoremap, sunmap          Select mode
    cmap, cnoremap, cunmap          Command-line mode
    omap, onoremap, ounmap          Operator pending mode
    

    看起来你不能用 ctrl 做数字。

    nmap 用于普通模式,所以要输入 aaaa,您需要先输入 iaaaa 才能进入插入模式。因此,使用 nmap,映射到 iaaaa 以输入 'aaaa'。

    您可以尝试nmap &lt;C-a&gt; iaaaa 一直到&lt;C-z&gt;,并得到大多数人的回复。你可以map &lt;C-a&gt; aaaa:map &lt;C-a&gt; aaaa

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-03
      • 2015-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多