neovim 键位映射
neovim的键位映射是指将键盘上的一组按键绑定到vim 插件的某一个功能。
7 种模式
官方文档原文:
There are seven sets of mappings
For Normal mode: When typing commands.
For Visual mode: When typing commands while the Visual area is highlighted.
For Select mode: like Visual mode but typing text replaces the selection.
For Operator-pending mode: When an operator is pending (after “d”, “y”, “c”, etc.). See below: omap-info.
For Insert mode. These are also used in Replace mode.
For Command-line mode: When entering a “:” or “/” command.
For Terminal mode: When typing in a :terminal buffer.
- 正常模式,也是打开文件后的默认模式。在此模式下,可以执行vim的基本操作。其他的任意模式均可以通过esc键回退到正常模式。
- 可视模式,在正常模式执行v命令选中对应的文本,进入此模式。
- 选择模式,和可视模式类似,也是通过v命令先选中文本,然后可以对选中的文本进行替换。
- 追加操作符模式,在正常模式执行完"d", “y”, "c"等操作后可以追加一个操作符。
- 插入模式,在正常模式执行 “a”, “i”, "o"等命令后对文本进行操作。
- 命令行模式,在正常模式执行 “:”, “/” 命令后进入此模式。
- 终端模式,正常模式执行":terminal"命令后进入此模式,此模式模拟进入shell 的操作。通过再进入插入模式,即可执行shell 操作。
11种映射命令
这11种映射命令可以在7种模式中进行键位映射。
COMMANDS | MODES |
---|---|
:map :noremap :unmap | Normal, Visual, Select, Operator-pending |
:nmap :nnoremap :nunmap | Normal |
:vmap :vnoremap :vunmap | Visual and Select |
:smap :snoremap :sunmap | Select |
:xmap :xnoremap :xunmap | Visual |
:omap :onoremap :ounmap | Operator-pending |
:map! :noremap! :unmap! | Insert and Command-line |
:imap :inoremap :iunmap | Insert |
:lmap :lnoremap :lunmap | Insert, Command-line, Lang-Arg |
:cmap :cnoremap :cunmap | Command-line |
:tmap :tnoremap :tunmap | Terminal |
6种映射参数
6种映射参数如下。
-
<buffer>
此映射命令在当前buffer中立即生效。
-
<nowait>
当匹配到输入的字符时立即执行,不再等待可能出现的后续字符。
-
<silent>
让映射命令静默执行,不在命令行打印回显。
-
<script>
防止一个功能被多次绑定。
-
<unique>
防止一个键位组合被多次绑定。
-
<expr>
可以在{rhs}中使用表达式(函数)。
2种键位映射方案
通过API设置映射键
API定义如下
nvim_set_keymap({mode}, {lhs}, {rhs}, {*opts})
Parameters:
- {mode} 模式简写
"n", "i", "v", "x" for nmap, imap, vmap, xmap
"!", "" for :map!, :map
"ia", "ca" or "!a" for abbreviation in Insert mode, Cmdline mode, or both
- {lhs} 要绑定的键位组合
- {rhs} 要绑定的目标功能
- {*opts} 支持除了buffer之外的映射参数,此外,还支持 "noremap","desc","callback","replace_keycodes" 等参数
此API的调用方式为,vim.api.nvim_set_keymap()文章来源:https://www.toymoban.com/news/detail-516366.html
例子文章来源地址https://www.toymoban.com/news/detail-516366.html
vim.api.nvim_set_keymap(
"n",
"<F6>",
[[<cmd>lua require('cscope_maps').cscope_prompt('s', vim.fn.expand("to find a string"))<cr>]],
{ noremap = true, silent = true }
),
在正常模式将功能键 F6 绑定到 cscope_maps 这个lua 模块的某项功能上。
通过命令设置映射键
{command} {argument} {lhs} {rhs}
- {command} 11种映射命令
- {argument} 6种映射参数
- {lhs} 要绑定的键位组合
- {rhs} 要绑定的目标功能
特殊键位
标记法 | 描述 |
---|---|
<Nul> |
0 |
<BS> |
退格键 |
<Tab> |
tab键 |
<NL> |
换行 |
<CR> <Return> <Enter>
|
回车 |
<Esc> |
esc 键 |
<Space> |
空格键 |
<lt> |
小于号 |
<Bslash> |
\ |
<Bar> |
| |
<Del> |
delete 键 |
<CSI> |
主要用于检测terminal类型 |
<EOL> |
根据系统不同可以是<CR> , <NL> 或者 <CR> <NL>
|
<Ignore> |
取消字符等待功能 |
<NOP> |
no-op: 什么都不做 |
<Up> <Down> <Left> <Right>
|
光标上下左右移动键 |
<S-Up> <S-Down> <S-Left> <S-Right>
|
shift键 + 光标上下左右移动键 |
<C-Left> <C-Right>
|
ctrl键 + 光标左右移动键 |
<F1> - <F12>
|
功能键 F1 到 F12 |
<S-F1> - <S-F12>
|
shift键 + 功能键 F1 到 F12 |
<Help> <Undo> <Insert>
|
帮助、重做、插入键 |
<Home> <End>
|
home、end 键 |
<PageUp> <PageDown>
|
翻页键 |
<kUp> <kDown> <kLeft> <kRight>
|
小键盘对应键位 |
<kHome> <kEnd> <kOrigin>
|
小键盘对应键位 |
<kPageUp> <kPageDown> <kDel>
|
小键盘对应键位 |
<kPlus> <kMinus> <kMultiply> <kDivide>
|
小键盘对应键位 |
<kPoint> <kComma> <kEqual> <kEnter>
|
小键盘对应键位 |
<k0> - <k9>
|
小键盘对应键位 |
<S-…> |
shift键 + 任意键 |
<C-…> |
ctrl键 + 任意键 |
<M-…> <A-…>
|
alt键 + 任意键 |
<D-…> |
command键 + 任意键 |
到了这里,关于neovim 键位映射的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!