我怎么能改变我的位置/顺序的当前标签在Vim?例如,如果我想重新定位我的当前标签是第一个标签?
当前回答
我一直在寻找同样的方法,在一些帖子之后,我发现了一种比函数更简单的方法:
:execute "tabmove" tabpagenr() # Move the tab to the right
:execute "tabmove" tabpagenr() - 2 # Move the tab to the left
tabpagenr()返回实际的制表符位置,tabmove使用索引。
我将右侧映射为Ctrl+L,左侧映射为Ctrl+H:
map <C-H> :execute "tabmove" tabpagenr() - 2 <CR>
map <C-J> :execute "tabmove" tabpagenr() <CR>
其他回答
我一直在寻找同样的方法,在一些帖子之后,我发现了一种比函数更简单的方法:
:execute "tabmove" tabpagenr() # Move the tab to the right
:execute "tabmove" tabpagenr() - 2 # Move the tab to the left
tabpagenr()返回实际的制表符位置,tabmove使用索引。
我将右侧映射为Ctrl+L,左侧映射为Ctrl+H:
map <C-H> :execute "tabmove" tabpagenr() - 2 <CR>
map <C-J> :execute "tabmove" tabpagenr() <CR>
这是个好问题,加文,因为这个问题很微妙。
来自maybeshewill和hochl的答案主要回答了这个问题——使用“:tabm”与索引或相对(+/-)索引。
但是请注意,这里可能存在混淆,其他一些答案可能忽略了这一点。看看下面由hochl提供的帮助文本:
:tabm[ove] [N] *:tabm* *:tabmove*
Move the current tab page to after tab page N. Use zero to
make the current tab page the first one. Without N the tab
page is made the last one.
关键词是“之后”。我怀疑这有时会让人们感到困惑。为什么?因为如果使用“:tabm3”将制表符移出第一个位置,随后键入“:tabm2”不会再次移动制表符。占用选项卡#3的文件现在占用选项卡#2,并且“:tabm2”不改变顺序。
这是一个图表。所选选项卡为每行[file_c]。
file_a file_b [file_c] file_d
:tabm0
[file_c] file_a file_b file_d
:tabm3
file_a file_b [file_c] file_d
:tabm2
file_a file_b [file_c] file_d
“:tabm”命令可以被认为是将当前选项卡移动到从0开始计数时当前占据位置的选项卡之后,其中选项卡0是最左边的选项卡,是虚构的。":tabmi"不会移动到第i个位置——如果它移动了,":tabm3"和":tabm2"将产生不同的结果。
最后,如果你有一个好的keymap,相对的move +/-语法会更简单。
下面是我的宏,使用@maybeshewill的答案的相对参数:
" Shortcuts to move between tabs with Ctrl+Shift+Left/Right
function TabLeft()
if tabpagenr() == 1
execute "tabm"
else
execute "tabm -1"
endif
endfunction
function TabRight()
if tabpagenr() == tabpagenr('$')
execute "tabm" 0
else
execute "tabm +1"
endif
endfunction
map <silent><C-S-Right> :execute TabRight()<CR>
map <silent><C-S-Left> :execute TabLeft()<CR>
它处理包装案例。
由于某种原因,函数答案不再适用于我。我怀疑与vim-ctrlspace有冲突。无论如何,函数答案中的数学运算是不必要的,因为Vim可以使用内置函数左右移动制表符。我们只需要处理包装情况,因为Vim对用户不友好。
" Move current tab into the specified direction.
"
" @param direction -1 for left, 1 for right.
function! TabMove(direction)
let s:current_tab=tabpagenr()
let s:total_tabs = tabpagenr("$")
" Wrap to end
if s:current_tab == 1 && a:direction == -1
tabmove
" Wrap to start
elseif s:current_tab == s:total_tabs && a:direction == 1
tabmove 0
" Normal move
else
execute (a:direction > 0 ? "+" : "-") . "tabmove"
endif
echo "Moved to tab " . tabpagenr() . " (previosuly " . s:current_tab . ")"
endfunction
" Move tab left or right using Command-Shift-H or L
map <D-H> :call TabMove(-1)<CR>
map <D-L> :call TabMove(1)<CR>
移动当前标签到第n个位置
:tabm n
其中n是一个数字,表示位置(从0开始)
左/右移动标签
我认为更好的解决方案是将选项卡向左或向右移动到当前位置,而不是计算出您希望它在的新位置的数值。
noremap <A-Left> :-tabmove<cr>
noremap <A-Right> :+tabmove<cr>
使用上面的键映射,你将能够移动当前选项卡:
向左使用:Alt + left 向右使用:Alt + right
推荐文章
- 强迫自己掌握vi的最好方法是什么?
- 如何回到行之前编辑的最后一个在Vim?
- 如何使用HTML/CSS在文本中插入空格/制表符
- 如何跳转到一个特定的人物在vim?
- 如何删除一个大的文本块而不计算行?
- 禁用在android中打开导航抽屉的滑动手势
- 在Vim/Vi中,如何将光标移动到前一个单词的末尾?
- 如何在vim中自动删除尾随空格
- git可以自动在空格和制表符之间切换吗?
- 为什么Vim使用~扩展名保存文件?
- Sublime Text 3,将空格转换为制表符
- 如何在Vim或Linux中将空格转换为制表符?
- 我如何使用vimdiff来解决git合并冲突?
- 在Vim中删除当前缓冲区的文件名/路径
- Git在终端提交时打开VIM,但无法返回终端