vim 中的 D-S-Up 是什么意思?
What the D-S-Up means in vim?
我找到一个 .vimrc 文件配置:
" Move selection up/down (add =gv to reindent after move)
:vmap <D-S-Up> :m-2<CR>gv
:vmap <D-S-Down> :m'>+<CR>gv
我知道D-S-Up一定是一个key,但是key是什么?
我输入:
:help D-S-Up
什么都没发生
看看Move entire line up and down in Vim
您可以在答案中阅读(关于行 :vmap <D-S-Up> :m-2<CR>gv
):
According to the shortcuts above, pressing Cmd-Shift-Up/Down will shift the block selection up/down. "D" is the Command key in MacVim, for Windows try "C" (Control), or "A" (Alt) (eg. would be Control Alt f).
因为我自己没有Mac,所以我无法核实,但这肯定是真的。
:help key-notation
告诉你所有这些 <key>
符号的含义。
你不能期望 :help D-S-Up
做任何事情,因为:
- 它不遵循
i_ctrl-r
、 等既定模式
- 它是一个自定义映射,Vim 只为它自己的命令提供文档。
<D>
是 Mac 键盘上的 Cmd
键,<S>
是 Shift
键,<Up>
是 Up
方向键。
所以<D-S-Up>
表示Cmd
+ Shift
+ Up
.
Cmd
键仅在 MacVim GUI 中有效。
Non-portable 映射毫无价值。
视觉模式映射应该使用:xmap
或:xnoremap
,而不是:v*
。
Non-recursive 应该默认使用映射 除非 确实需要递归。
使用别人的 vimrc
是一个 糟糕的 想法。
顺便说一下,这里是这些映射的增强版本:
nnoremap <silent> <D-S-Up> :<C-u>move-2<CR>==
nnoremap <silent> <D-S-Down> :<C-u>move+<CR>==
xnoremap <silent> <D-S-Up> :move-2<CR>gv=gv
xnoremap <silent> <D-S-Down> :move'>+<CR>gv=gv
其中:
<silent>
防止映射中的命令回显无用信息,
<C-u>
删除由 Vim、 插入的任何默认范围
move-2<CR>
是 m-2<CR>
、 的可读性更高的版本
==
re-indents行,
gv=gv
重新选择这些行,re-indents 它们,然后再次选择 re-selects 它们。
我找到一个 .vimrc 文件配置:
" Move selection up/down (add =gv to reindent after move)
:vmap <D-S-Up> :m-2<CR>gv
:vmap <D-S-Down> :m'>+<CR>gv
我知道D-S-Up一定是一个key,但是key是什么?
我输入:
:help D-S-Up
什么都没发生
看看Move entire line up and down in Vim
您可以在答案中阅读(关于行 :vmap <D-S-Up> :m-2<CR>gv
):
According to the shortcuts above, pressing Cmd-Shift-Up/Down will shift the block selection up/down. "D" is the Command key in MacVim, for Windows try "C" (Control), or "A" (Alt) (eg. would be Control Alt f).
因为我自己没有Mac,所以我无法核实,但这肯定是真的。
:help key-notation
告诉你所有这些<key>
符号的含义。你不能期望
:help D-S-Up
做任何事情,因为:- 它不遵循
i_ctrl-r
、 等既定模式
- 它是一个自定义映射,Vim 只为它自己的命令提供文档。
- 它不遵循
<D>
是 Mac 键盘上的Cmd
键,<S>
是Shift
键,<Up>
是Up
方向键。所以
<D-S-Up>
表示Cmd
+Shift
+Up
.Cmd
键仅在 MacVim GUI 中有效。Non-portable 映射毫无价值。
视觉模式映射应该使用
:xmap
或:xnoremap
,而不是:v*
。Non-recursive 应该默认使用映射 除非 确实需要递归。
使用别人的
vimrc
是一个 糟糕的 想法。顺便说一下,这里是这些映射的增强版本:
nnoremap <silent> <D-S-Up> :<C-u>move-2<CR>== nnoremap <silent> <D-S-Down> :<C-u>move+<CR>== xnoremap <silent> <D-S-Up> :move-2<CR>gv=gv xnoremap <silent> <D-S-Down> :move'>+<CR>gv=gv
其中:
<silent>
防止映射中的命令回显无用信息,<C-u>
删除由 Vim、 插入的任何默认范围
move-2<CR>
是m-2<CR>
、 的可读性更高的版本
==
re-indents行,gv=gv
重新选择这些行,re-indents 它们,然后再次选择 re-selects 它们。