比如,我想把键盘中的 jj 映射到功能键:Esc
这个映射该如何写呢?
如何在 keymaps.cson 中将 jj 映射到 Esc?
'atom-text-editor':
'j j': 'core:cancel'
再请教一个问题,如果想把kk映射为Esc+:save要怎么写?
谢谢!
不行呀,你中间加空格了?
一个快捷键只能映射为一个命令,你这种情况需要自己创建一个命令,然后在其中调用要用到的两个命令。
# File: keymap.cson
'atom-text-editor.vim-mode:not(.command-mode)':
'j j': 'vim-mode:reset-command-mode'
这是我的写法。
vim-mode:reset-command-mode
在vim-mode
的package settings
里可以看到。
1赞
嗯,试了一下,确实实现了!
谢谢!
可以映射两个命令吗?
比如:kk 想映射到 normal模式并保存修改,这个能做到吗?
这个写法好像会引发一些问题,比如,在insert-mode
中想输入j
的时候,会因为触发keymap导致无法输入j
。
@Nixus你有遇到这样的问题吗?
我是这样设置的:只在插入模式下有效,只要不是连续输入j
,只是回显会慢半拍,但是直接输入后面的内容就会跳出keymap
,如果需要连续输入j
,第一次输入后稍等,出现回显即可继续输入,这和 vim 下的体验是一致的。可以参考 vim-mode 的默认设置,来进行更多的尝试。
# vim-mode
# jj => esc
'atom-text-editor.vim-mode.insert-mode':
'j j': 'vim-mode:reset-normal-mode'
1赞
写一个可用的方法:
http://guolinn.com/2016/atom-vi-mode-maping-jj2esc/
~/.atom/keymap.cson
'atom-text-editor.vim-mode.insert-mode':
'j': 'exit-insert-mode-if-preceded-by-j'
~/.atom/init.coffee
atom.commands.add 'atom-text-editor', 'exit-insert-mode-if-preceded-by-j': (e) ->
editor = @getModel()
pos = editor.getCursorBufferPosition()
range = [pos.traverse([0,-1]), pos]
lastChar = editor.getTextInBufferRange(range)
if lastChar != "j"
e.abortKeyBinding()
else
editor.backspace()
atom.commands.dispatch(e.currentTarget, 'vim-mode:activate-normal-mode')
1赞