在VIM中实现Netbeans风格的移动和复制

时间:2010-07-12 17:43:45

标签: vim netbeans

在Netbeans中,Ctrl-Shift-Up / Down复制当前行或选择,Alt + Shift +向上/向下/向左/向右移动当前行或选择。如何在VIM 7中实现这一目标?

到目前为止,我可以使用这些映射来使Alt + Shift + Up / Down工作:

:nmap <A-S-up> :m .-2<Enter>
:imap <A-S-up> <Esc>:m .-2<Enter>gi
:vmap <A-S-up> :m .-2<Enter>gv

:nmap <A-S-down> :m .+1<Enter>
:imap <A-S-down> <Esc>:m +1<Enter>gi
:vmap <A-S-down> :m '>+1<Enter>gv

我仍然坚持:

  1. 让Alt + Shift + j / k像Alt + Shift +向上/向下一样工作。只需将“向上”更改为“k”即可。
  2. Ctrl-Shift-Up / Down映射无法正常工作。这是一个不可映射的序列吗?
  3. 要将Alt + Shift +向上和Alt + Shift + k都映射到同一个命令,有没有比将map命令复制到另一行更好的方法?

2 个答案:

答案 0 :(得分:1)

并非所有这些都适用于VIM,但它们都适用于GVIM。

" Alt+Shift+Up/k moves content up
:nmap <M-S-Up> :m .-2<Enter>
:nmap <M-S-k> <M-S-Up>
:imap <M-S-Up> <Esc>:m .-2<Enter>gi
:imap <M-S-k> <M-S-Up>
:vmap <M-S-Up> :m .-2<Enter>gv
:vmap <M-S-k> <M-S-Up>

" Alt+Shift+Down/j moves content down
:nmap <M-S-Down> :m .+1<Enter>
:nmap <M-S-j> <M-S-Down>
:imap <M-S-Down> <Esc>:m .+1<Enter>gi
:imap <M-S-j> <M-S-Down>
:vmap <M-S-Down> :m '>+1<Enter>gv
:vmap <M-S-j> <M-S-Down>

" Ctrl+Shift+Up/k copies content up
:nmap <C-S-Up> :co .-1<Enter>
:nmap <C-S-k> <C-S-Up>
:imap <C-S-Up> <Esc>:co .<Enter>gi
:imap <C-S-k> <C-S-Up>
:vmap <C-S-Up> :co '><Enter>gv
:vmap <C-S-k> <C-S-Up>

" Ctrl+Shift+Down/j copies content down
:nmap <C-S-Down> :co .<Enter>
:nmap <C-S-j> <C-S-Down>
:imap <C-S-Down> <Esc>:co .<Enter>gi<Down>
:imap <C-S-j> <C-S-Down>
:vmap <C-S-Down> :co .-1<Enter>gv
:imap <C-S-j> <C-S-Down>

" Alt+Shift+Left/h shifts content left 
:nmap <M-S-Left> <<
:nmap <M-S-h> <M-S-Left>
:imap <M-S-Left> ^D
:imap <M-S-h> <M-S-Left>
:vmap <M-S-Left> <gv
:vmap <M-S-h> <M-S-Left>

" Alt+Shift+Right/l shifts content right
:nmap <M-S-Right> >>
:nmap <M-S-l> <M-S-Right>
:imap <M-S-Right> ^T
:imap <M-S-l> <M-S-Right>
:vmap <M-S-Right> >gv
:vmap <M-S-l> <M-S-Right>

答案 1 :(得分:0)

不要输入键序列,而是按Ctrl-V(或Windows上的Ctrl-Q),然后按键序列。

换句话说,而不是输入:

&lt; A - S - u p &gt;

输入:

Ctrl - Q Alt - Shift - Up

我真的不明白为什么,但由于某种原因,vim并没有以你认为的方式翻译所有的组合键。例如, Alt - Shift - K 对我来说显示为Ë,但键映射仍然有效。并且 Alt - Shift - Up 转换为<M-S-Up>而不是<A-S-Up>

关于第三个问题,请将一个组合键映射到另一个组合键。

:nmap <A-S-up> :m .-2<Enter>
:nmap Ë <A-S-up>

(请记住,Ë Alt - Shift - K ,至少在我的机器上。)