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,所以我无法核实,但这肯定是真的。

  1. :help key-notation 告诉你所有这些 <key> 符号的含义。

  2. 你不能期望 :help D-S-Up 做任何事情,因为:

    • 它不遵循 i_ctrl-r
    • 等既定模式
    • 它是一个自定义映射,Vim 只为它自己的命令提供文档。
  3. <D> 是 Mac 键盘上的 Cmd 键,<S>Shift 键,<Up>Up 方向键。

    所以<D-S-Up>表示Cmd + Shift + Up.

  4. Cmd 键仅在 MacVim GUI 中有效。

  5. Non-portable 映射毫无价值。

  6. 视觉模式映射应该使用:xmap:xnoremap,而不是:v*

  7. Non-recursive 应该默认使用映射 除非 确实需要递归。

  8. 使用别人的 vimrc 是一个 糟糕的 想法。

  9. 顺便说一下,这里是这些映射的增强版本:

    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 它们。