Odpowiedzi:
Możesz przenieść kartę za :tabm
pomocą względnych lub bezwzględnych argumentów o indeksie zerowym.
absolutny:
:tabm i
krewny:
:tabm +i
:tabm -i
To stosunkowo nowa funkcja. Więc jeśli to nie działa spróbuj zaktualizować vima.
:tabm
akceptuje względne argumenty w vimie 7.3.
Masz na myśli przesunięcie bieżącej karty? Działa to przy użyciu tabmove.
: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.
Mam dwa powiązania klawiszy, które przesuwają moją bieżącą kartę o jeden w lewo lub jeden w prawo. Bardzo przydatne!
EDYCJA: Oto moje makro VIM. Nie jestem wielkim programistą ViM , więc może lepiej to zrobić, ale tak to działa dla mnie:
" Move current tab into the specified direction.
"
" @param direction -1 for left, 1 for right.
function! TabMove(direction)
" get number of tab pages.
let ntp=tabpagenr("$")
" move tab, if necessary.
if ntp > 1
" get number of current tab page.
let ctpn=tabpagenr()
" move left.
if a:direction < 0
let index=((ctpn-1+ntp-1)%ntp)
else
let index=(ctpn%ntp)
endif
" move tab page.
execute "tabmove ".index
endif
endfunction
Następnie możesz powiązać klucze, na przykład w następujący sposób .vimrc
:
map <F9> :call TabMove(-1)<CR>
map <F10> :call TabMove(1)<CR>
Teraz możesz przenieść bieżącą kartę, naciskając F9 lub F10.
Szukałem tego samego i po kilku postach znalazłem prostszy sposób niż funkcję:
:execute "tabmove" tabpagenr() # Move the tab to the right
:execute "tabmove" tabpagenr() - 2 # Move the tab to the left
Tabpagenr () zwraca rzeczywiste położenie zakładki i tabmove wykorzystuje indeksów.
Odwzorowałem prawą stronę na Ctrl + L, a lewą na Ctrl + H:
map <C-H> :execute "tabmove" tabpagenr() - 2 <CR>
map <C-J> :execute "tabmove" tabpagenr() <CR>
:execute "tabmove" tabpagenr() + 1 <CR>
do przejścia w prawo. Dla MacVim 8.0.1420 (144) .
:tabm n
Gdzie n
jest liczba oznaczająca pozycję (od zera)
Myślę, że lepszym rozwiązaniem jest przesunięcie tabulatora w lewo lub w prawo do jego aktualnej pozycji zamiast obliczania wartości liczbowej nowej pozycji, w której chcesz.
noremap <A-Left> :-tabmove<cr>
noremap <A-Right> :+tabmove<cr>
Dzięki powyższym mapom klawiszy możesz przenieść bieżącą kartę:
Oprócz drobnych sugestii w innych odpowiedziach, możesz także przeciągać tabulatory za pomocą myszy, aby je przenosić, jeśli masz włączoną obsługę myszy.
Jest to domyślnie włączone w MacVim i innych implementacjach GUI vim, bez względu na to, czy korzystasz z kart widgetów GUI, czy kart stylów terminali w trybie GUI.
Działa również w trybie VIM w czystym tty, jeśli masz set mouse=a
i masz odpowiedni terminal (xterm i większość jego emulatorów, takich jak gnome-terminal, Terminal.app, iTerm2 i PuTTY / KiTTY, aby nazwać widok). Pamiętaj, że kliknięcia myszą poza kolumną 222 również wymagają set ttymouse=sgr
; zobacz w Vimie, dlaczego moja mysz nie działa poza 220. kolumną? na tle tego.
Napisałem wtyczkę o nazwie vim-tabber, która zapewnia pewne dodatkowe funkcje do zamiany kart, przesuwania ich i dodawania możliwości wbudowanych poleceń manipulacji tabulatorami, pozostając w dużej mierze kompatybilnymi z wbudowanymi. Nawet jeśli zdecydujesz się nie używać wtyczki, w pliku README znajduje się kilka ogólnych informacji o użyciu kart.
Z jakiegoś powodu funkcja przestała działać. Podejrzewam konflikt z vim-ctrlspace . Niezależnie od tego, matematyka w odpowiedzi na funkcję jest niepotrzebna, ponieważ Vim może przesuwać tabulatory w lewo i prawo dzięki wbudowanym funkcjom. Musimy po prostu poradzić sobie z opakowaniem , ponieważ Vim nie jest przyjazny dla użytkownika.
" 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>
-tabm
I +tabm
moim vim 7.4 nie prawidłowo przenieść karty. Również mój :help tabm
nie wymienia tego jako prawidłowej składni. Więc otrzymuje ostatni else execute ...endif
z elseif a:direction == 1 execute "tabmove" s:current_tab else execute "tabmove" s:current_tab - 2 endif
użyciem Pablo odpowiedź
tabmove
i znak -
/ +
w execute
linii.
Oto moje makro, używając względnych argumentów z odpowiedzi @ 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>
Obsługuje opakowanie owijające.