vim bindkey-snippet可以移动整个代码块

时间:2011-09-23 23:31:01

标签: vim

我刚刚在我的keybindings.vim上制作了一个小小的snipplet来移动一个代码洞。它的工作原理基本上与我采用旧式手动方式相同(在正常模式下,{V}选择可视模式下的孔块,然后>和<移动压痕,并且:m +和:m- 2向下或向上移动。)

我遇到的问题是它只能通过缩进(水平)移动,但对于垂直移动,它不起作用。我只是找不到原因,因为手动完成相同的序列(就像我习惯的那样),它就像一个魅力。

首先:我在Vim 7.2(在Linux上)和Vim 7.3(在MacOS上)上测试过snipplet。 第二:我知道如果我提出一个:

vnoremap < <gv

...和a:

vnoremap > >gv

...在我的键盘图中,我将能够在不失去视觉选择的情况下移动视觉选择的块......尽管如此,我还是想让它工作,所以我不需要用手动ESC {jV} k

来关注视觉选择

有谁能告诉我我做错了什么?我提前谢谢你们! 此致!

"============================================================================
"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
"============================================================================

1 个答案:

答案 0 :(得分:0)

更改这些映射中用于移动段落的:move命令 从:m+:m'>+