2010-07-12 55 views
1

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

到目前为止,我能够得到Alt + Shift +向上/向下使用这些映射工作:

: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 

我仍然strugging:

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

回答

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

除了输入键序列外,请按Ctrl-V(或Windows上的Ctrl-Q),然后按键序列。

换句话说,而不是键入这样的:

<-小号-üp>

类型此:

按Ctrl - QAlt键 - - 最多

我真的不明白为什么,但由于某种原因,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键 - - ķ,至少在我的机器上)

+0

顺便说一句,Ctrl-V适用于GVIM,但不适用于VIM。 – 2010-07-12 19:20:58