2013-02-06 42 views
4

通常,例如當我編寫Latex代碼時,我遇到了重新排列由逗號分隔的列表項的任務。如果兩個項目都不在列表的開始或結束處,這可以很快完成。但是,如果他們處於邊緣,則必須格外小心分隔逗號。用逗號分隔列表交換項目

例如,考慮

\cite{GirR84, Tar00, Tem77}. 

有vim的一種智能的方式說,例如,在最後一個項目的前面或中間位置?

+0

說有一行'\ foo {1,2,3,4,5,6,7,8}'你想幹什麼?按什麼樣的關鍵?或通過命令?像Swap(8,3)獲得1,2,8,4,5,6,7,3? – Kent

+0

可能不太具體。就像移動光標到一個項目,剪切它,移動到一個不同的項目,並在之前或之後粘貼... – Jan

回答

4

我在.vimrc以下映射,我覺得我有他們this tip on wikia

nnoremap <silent> gl "_yiw:s/\(\%#\w\+\)\(\_W\+\)\(\w\+\)/\3\2\1/<CR><c-o>/\w\+\_W\+<CR><c-l> 
nnoremap <silent> gh "_yiw?\w\+\_W\+\%#<CR>:s/\(\%#\w\+\)\(\_W\+\)\(\w\+\)/\3\2\1/<CR><c-o><c-l> 

gh將交換光標左邊和gl向右下的單詞。

+0

謝謝,gl顯然交換了兩個後續項目。呃應該做什麼?沒有它的工作.. – Jan

+0

對不起,如果我[vim 7.3,GUI版本]使用它\ cite {bla00,tr05,blaba,HinPUU09} – Jan

+0

@Jan:我已經將映射更改爲更便攜的版本, 現在就試試。 – Thor

1

Vim Tips Wiki交換任意事物的另一種有趣的方式:

:vnoremap <C-X> <Esc>`.``gvP``P 
+1

我現在正在使用它,它運作良好。任何人都可以解釋使用的命令嗎? – ziggystar

9

我曾作過一個插件來對付所謂argumentative.vim類似的情況。 (很抱歉的插頭。)

Argumentative.vim提供以下映射:

  • [,],運動,這將去到前一個或下一個參數
  • <,>,到移位參數向左或right
  • i, and a,參數文本對象。例如da,ci,yi,

所以用這個插件,你移動到有問題的論證,然後根據需要做<,>,多次。它也可以計算例如2>,

如果您有Tim Pope的優秀repeat.vim插件安裝<,>,變得可重複使用.命令。

2

你可以試試vim插件vim-swap,功能相當強大!