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

发布于 2024-12-10 04:42:24 字数 230 浏览 0 评论 0原文

我知道您可以使用 .vimrc 文件中的 imap 将自定义键盘映射添加到 vim。我的问题是,如果要创建额外的自定义运算符、动作、命令并将它们映射到按键,添加它们以免与现有绑定冲突的最佳方法是什么?

打个比方,在 emacs 中,很多自定义按键命令都是通过 Cc 序列添加的。更技术性地说,vim 中是否有允许用户自定义的未绑定键?换句话说,是否有免费的密钥空间可供用户使用?

I know you can add custom keymappings to vim with imap in the .vimrc file. My question is, if one is to create additional custom operators, motions, commands and map them to keys, what is the best way to add them in so they don't conflict with existing bindings?

An analogy, in emacs, a lot of custom key commands are added via the C-c sequence. To be more technical, are there unbound keys in vim that allow for user customization? In other words, is there a free keyspace available to users?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

白日梦 2024-12-17 04:42:25

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

我的问题是,如果要创建额外的自定义运算符,
动作、命令并将它们映射到按键,添加的最佳方式是什么
以便它们不会与现有绑定冲突?

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


此外,您可以使用 我使用 有些使用 \

例如 :let mapleader = ","

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

:mapp :MyCustomCommand

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

nnoremapx :normal 2wdw


多个命令可用于创建新删除列出映射,这里是工作模式列表,来自 :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

更多信息
: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>)

现在,下面的两行是等效的

  • :call MoveLastLines('newFile.txt')
  • :移动到newFile.txt

:imapEnter will show a list of your insert mode mappings.

My question is, if one is to create additional custom operators,
motions, commands and map them to keys, what is the best way to add
them in so they don't conflict with existing bindings?

In my opinion the best way is creating custom command, they start with uppercase, native ones with lowercase.


Additionally, you can use a <leader> I use , some use \.

e.g. :let mapleader = ","

then, you can use the leader to combine it with other keys, like ,p to call a command, native or custom, see below:

:map <leader>p :MyCustomCommand<CR>

A custom motion example. Delete the third word after the cursor.

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


Several commands can be used to create new, remove and list the mappings, here is a list of working modes, from :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

further info
:help map


Here's an example function, converted to a custom command

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>)

Now, both lines below are equivalent

  • :call MoveLastLines('newFile.txt')
  • :MoveTo newFile.txt
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文