在vim中循环旋转选定的数组

时间:2015-10-08 08:58:10

标签: vim

vim中有一个简单的命令可以循环旋转数组吗?

例如,在文本中选择“1,2,3”并按快捷键 应将所选文本替换为“2,3,1”。

理想情况下,该命令应允许任意循环移位。

3 个答案:

答案 0 :(得分:4)

你的意思是:

function! s:Rotate(list, rot)
   let res = a:list[a:rot :] + a:list[: (a:rot-1)]
   return res
endfunction

xnoremap <silent> <c-x>r s<c-r>=join(s:Rotate(split(@", ', *'), v:count1), ', ')<cr><esc>gv

直观地选择您的列表。点击CTRL-X然后r和tada!。如果您想一次旋转多个元素,请在CTRL-X_r

答案 1 :(得分:3)

Argumentative.vim插件允许转换参数。这个想法是你用一个过大的数量来移动第一个参数,例如99。

99>,

这会将第一个参数移动到数组的末尾。然后,您可以使用边界运动[,

返回第一个带有类似技巧的参数
99[,

您可能还想看一下sideways.vim,它提供与argumentative.vim类似的功能。

答案 2 :(得分:1)

我不知道Vim是否有某种内置的“移位技术”,但我建议使用yank和put命令,甚至更好地使用exchange.vim。有关详细信息,请在video上观看此vimcast.org