在vim/vi中添加自定义键映射的最佳方法是什么?(是否存在用于自定义的未绑定密钥空间?)

bmi*_*are 3 vi vim hotkeys

我知道你可以imap.vimrc文件中添加自定义键映射到vim .我的问题是,如果要创建其他自定义运算符,运动,命令并将它们映射到键,那么添加它们的最佳方法是什么,这样它们就不会与现有绑定冲突?

类似地,在emacs中,通过Cc序列添加了许多自定义键命令.为了更加技术化,vim中是否存在允许用户自定义的未绑定密钥?换句话说,用户可以使用免费密钥空间吗?

Eri*_*tis 14

:imapEnter 将显示插入模式映射的列表.

我的问题是,如果要创建其他自定义运算符,运动,命令并将它们映射到键,那么添加它们的最佳方法是什么,这样它们就不会与现有绑定冲突?

在我看来,最好的方法是创建自定义命令,它们以大写,本地的小写开头.


另外,你可以使用<leader>我使用,一些\.

例如 :let mapleader = ","

然后,您可以使用领导者将其与其他键组合,例如,p调用命令,本机或自定义,请参阅下文:

:map <leader>p :MyCustomCommand<CR>

自定义动画示例.删除光标后的第三个单词.

nnoremap <leader>x :normal 2wdw<CR>


可以使用几个命令来创建新的,删除列出映射,这里是一个工作模式列表:help map-overview

                                        Normal  Visual+Select  Operator-pending ~
:map   :noremap   :unmap   :mapclear     yes      yes                yes
:nmap  :nnoremap  :nunmap  :nmapclear    yes       -                  -
:vmap  :vnoremap  :vunmap  :vmapclear     -       yes                 -
:omap  :onoremap  :ounmap  :omapclear     -        -                 yes
Run Code Online (Sandbox Code Playgroud)

更多信息 :help map


这是一个示例函数,转换为自定义命令

function! MoveLastLines(f)
  exe '$-9,$w ' . a:f    "write last ten lines to the passed filename
  $-9,$d                 "delete last ten lines
endfunction

command! -nargs=1 -range MoveTo :call MoveLastLines(<f-args>)
Run Code Online (Sandbox Code Playgroud)

现在,下面两行都是等价的

  • :call MoveLastLines('newFile.txt')
  • :MoveTo newFile.txt