【问题标题】:Vim newbie: Mapping kj key to <Esc> not working in gnome terminalVim 新手:将 kj 键映射到 <Esc> 在 gnome 终端中不起作用
【发布时间】:2016-03-02 10:07:19
【问题描述】:

我刚刚开始学习 Vim。我在 gnome-terminal 中使用 Vim(在 Ubuntu 14.04 上)。我想在我的 vimrc 文件中将 kj 键映射到 Esc 。我在我的 vimrc 文件 (~/.vimrc) 中添加了以下两行:

inoremap kj <Esc>
cnoremap kj <Esc>

问题 1: 我找到了我的 vimrc 文件(甚至重新启动了终端),但是当我在插入模式下快速输入 kj 时,它只输入了这两个字母 kj 而不会进入正常模式。难道我做错了什么?将 Esc 键映射到其他东西的正确方法是什么?

问题 2: 我应该如何编辑我的 vimrc 以将 caps 键映射到 Esc?

在 Vim 中,

:echo $COLORTERM

显示“gnome 终端”

作为参考,这是我完整的 vimrc 文件(没有 cmets):

set t_Co=256
colorscheme wombat256mod
syntax on
set hlsearch
set incsearch
set number
set autoindent
set ts=4
set ignorecase
set title
set scrolloff=5

" Map <ESC> key to kj
inoremap kj <Esc>
cnoremap kj <Esc>

set paste
set cursorline

【问题讨论】:

    标签: ubuntu vim gnome-terminal


    【解决方案1】:

    当粘贴模式处于活动状态时,插入模式键盘映射将不起作用,默认情况下您将其设为活动状态:

    set paste
    

    删除该行可能会更好,因此粘贴模式不处于活动状态,并添加一种简单的方法来在需要时将其打开。我用这个:

    set pastetoggle=,p
    

    粘贴模式默认为关闭,我可以使用,p轻松切换它

    来自:help 'paste

    When the 'paste' option is switched on (also when it was already on):
            - mapping in Insert mode and Command-line mode is disabled
            - abbreviations are disabled
            - 'textwidth' is set to 0
            - 'wrapmargin' is set to 0
            - 'autoindent' is reset
            - 'smartindent' is reset
            - 'softtabstop' is set to 0
            - 'revins' is reset
            - 'ruler' is reset
            - 'showmatch' is reset
            - 'formatoptions' is used like it is empty
    These options keep their value, but their effect is disabled:
            - 'lisp'
            - 'indentexpr'
            - 'cindent'
    

    【讨论】:

    • 亲爱的丹。非常感谢。那行得通!也感谢您的详细解释。
    【解决方案2】:

    在 2)

    不完全回答这个问题,因为这会将 CapsLock 映射为所有应用程序的转义,而不仅仅是 Vim。

    xmodmap - <<EOD
    ! Set caps lock as escape, losing Caps Lock
    remove Lock = Caps_Lock
    keysym Caps_Lock = Escape
    EOD
    

    我将该脚本作为 capswapchmod +x 放在 PATH 的某处。在您注销之前,不再有 CapsLock 并且 Esc 应该是 vi 的位置,靠近左小指。

    允许 Esc 锁定大写,(我发现,即使作为 COBOL 程序员,也很少需要,如果有的话)

    xmodmap - <<EOD
    ! Set caps lock as escape, and escape as CapsLock
    remove Lock = Caps_Lock
    keysym Caps_Lock = Escape
    keysym Escape = Caps_Lock
    add Lock = Caps_Lock
    EOD
    

    顺便说一句,我习惯称它为 capswap,但实际上我很久以前就删除了“交换”部分,就像在第一个列表中一样,并且在没有 CapsLocking 的情况下运行。您的偏好可能会导致不同的选择。第一个脚本相当于两个 Esc 键。

    【讨论】:

    • 谢谢布赖恩。我只想将我的键映射到 Vim 而不是所有东西。但我会记住您的建议并等待我的问题的更多答案。
    猜你喜欢
    • 2010-10-20
    • 2011-10-10
    • 2017-05-23
    • 2014-08-15
    • 2014-09-06
    • 1970-01-01
    • 2011-12-13
    • 2014-07-28
    相关资源
    最近更新 更多