gVim
是否有办法通过鼠标拖放来重新排列标签?我正在寻找的行为类似于Firefox和Chrome中的标签。
我知道可以使用:tabm n
更改标签顺序,但这需要确定您想要移动到的标签数量。使用鼠标对此空间任务更有用。
任何将标签左/右移动一个位置的方法也很有用,因为可以重新映射键并移动标签而不用太费劲。
答案 0 :(得分:24)
以下是我的vimrc中有关标签的内容:
" Move tabs with alt + left|right
nnoremap <silent> <A-Left> :execute 'silent! tabmove ' . (tabpagenr()-2)<CR>
nnoremap <silent> <A-Right> :execute 'silent! tabmove ' . tabpagenr()<CR>
答案 1 :(得分:10)
这是将标签移动到左侧一个位置的功能。把它放在你的vimrc文件中,然后根据你的需要设置你的密钥(用它来称呼:execute TabLeft()
)。
请注意,这些功能分别从第一个到最后一个“滚动”标签,最后一个到第一个,因此向左移动第一个标签使其成为最后一个标签,向右移动最后一个标签使其成为第一个标签。
function TabLeft()
let tab_number = tabpagenr() - 1
if tab_number == 0
execute "tabm" tabpagenr('$') - 1
else
execute "tabm" tab_number - 1
endif
endfunction
......并在右边
function TabRight()
let tab_number = tabpagenr() - 1
let last_tab_number = tabpagenr('$') - 1
if tab_number == last_tab_number
execute "tabm" 0
else
execute "tabm" tab_number + 1
endif
endfunction
答案 2 :(得分:4)
谢谢,我修改了我的vimrc代码:
function ShiftTab(direction)
let tab_number = tabpagenr()
if a:direction == 0
if tab_number == 1
exe 'tabm' . tabpagenr('$')
else
exe 'tabm' . (tab_number - 2)
endif
else
if tab_number == tabpagenr('$')
exe 'tabm ' . 0
else
exe 'tabm ' . tab_number
endif
endif
return ''
endfunction
然后在我的GVim中,我将[ctrl + shift + left]向左移动,[ctrl + shift + right]向左移动
inoremap <silent> <C-S-Left> <C-r>=ShiftTab(0)<CR>
inoremap <silent> <C-S-Right> <C-r>=ShiftTab(1)<CR>
noremap <silent> <C-S-Left> :call ShiftTab(0)<CR>
noremap <silent> <C-S-Right> :call ShiftTab(1)<CR>
答案 3 :(得分:3)
chris.ritsen的解决方案在vim v7.4中停止了为我工作所以这里有一个更简单的选择:
" Move tabs left/right
nnoremap <silent> <s-left> :-tabmove<cr>
nnoremap <silent> <s-right> :+tabmove<cr>
答案 4 :(得分:1)
Ken Takata写了一个补丁来执行此操作https://groups.google.com/forum/#!msg/vim_dev/LnZVZYls1yk/PHQl4WNDAgAJ。一种选择是下载vim源代码,这个补丁和编译。
答案 5 :(得分:0)
这不涉及使用鼠标,但它使用非常简单的gvim
键盘映射:
noremap <A-[> :-tabmove<cr>
noremap <A-]> :+tabmove<cr>
现在您可以移动当前标签: