Я только что сделал небольшой фрагмент кода для своих keybindings.vim, чтобы сдвинуть блок кода дыры вокруг. Он работает в основном так же, как я делаю это старомодным ручным способом (в обычном режиме: {V} для выбора блока отверстия в визуальном режиме, затем> и <для перемещения по отступу, и: m + и: m-2 для двигаться вниз или вверх). </p>
Проблема, которую я получаю, состоит в том, что она работает только для перемещения через отступ (по горизонтали), но для вертикального перемещения она не работает. Я просто не могу найти причину, так как, выполняя точно такую же последовательность вручную (как я привык), она работает как шарм.
Прежде всего: я протестировал снипплет на Vim 7.2 (на Linux) и Vim 7.3 (на MacOS).
Второе: я знаю, если я положу:
vnoremap < <gv
... и a:
vnoremap > >gv
... в моих раскладках клавиш я смогу перемещать выбранные визуально блоки без потери визуального выделения ... несмотря на это, я бы хотел, чтобы это работало, поэтому мне не нужно брать уход за визуальным отбором с помощью ручного ESC {jV} k
Кто-нибудь может сказать мне, что я делаю не так? Я благодарю вас всех заранее!
Привет! * * 1013
"============================================================================
"Ctrl + Shift + > [normal or insert mode] - move entire block around
"============================================================================
nnoremap <silent> <C-S-Right> :let savecur=getpos(".")<CR>{V}><CR>
\:call setpos('.', savecur)<CR>4l
inoremap <silent> <C-S-Right> <Esc>:let savecur=getpos(".")<CR>{V}><CR>
\:call setpos('.', savecur)<CR>5li
nnoremap <silent> <C-S-Left> :let savecur=getpos(".")<CR>{V}<<CR>
\:call setpos('.', savecur)<CR>4h
inoremap <silent> <C-S-Left> <Esc>:let savecur=getpos(".")<CR>{V}<<CR>
\:call setpos('.', savecur)<CR>3hi
nnoremap <silent> <C-S-Up> :let savecur=getpos(".")<CR>{V}:m-2<CR>
\:call setpos('.', savecur)<CR>k
inoremap <silent> <C-S-Up> <Esc>:let savecur=getpos(".")<CR>{V}:m-2<CR>
\:call setpos('.', savecur)<CR>ki
nnoremap <silent> <C-S-Down> :let savecur=getpos(".")<CR>{V}:m+<CR>
\:call setpos('.', savecur)<CR>j
inoremap <silent> <C-S-Down> <Esc>:let savecur=getpos(".")<CR>{V}:m+<CR>
\:call setpos('.', savecur)<CR>ji
"============================================================================