Достижение перемещения и дублирования линий в стиле Netbeans в VIM - PullRequest
1 голос
/ 12 июля 2010

В Netbeans Ctrl-Shift-Up / Down дублирует текущую строку или выделенную область, а Alt + Shift + Up / Down / Left / Right перемещает текущую строку или выделенную область.Как этого достичь в 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 + Up / Down.Простое изменение «вверх» на «k» не работает.
  2. Отображения Ctrl-Shift-Up / Down не работают.Это не отображаемая последовательность?
  3. Чтобы сопоставить Alt + Shift + up и Alt + Shift + k с одной и той же командой, есть ли лучший способ, чем дублирование команды map в другой строке?

Ответы [ 2 ]

1 голос
/ 13 июля 2010

Не все это работает в 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 голосов
/ 12 июля 2010

Вместо того, чтобы вводить последовательность клавиш, нажмите Ctrl-V (или Ctrl-Q в Windows) и затем свою последовательность клавиш.

Другими словами, вместо ввода этого:

<</kbd> A - S - u p >

Введите это:

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 , по крайней мере, на моей машине.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...