2013-02-06 39 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,功能相当强大!