Vim:一举交换2条遥远的线路

时间:2010-06-03 11:09:57

标签: vim

(注意:我的第一篇文章)

在Vim文件中,如何在一个移动中交换第15行和第33行(例如)?

4 个答案:

答案 0 :(得分:8)

最快的方法是移动线路:

:33m 15|15m 33

将第33行移到第15行下方,然后将第15行移到第33行以下。

最好首先将'高数字低于低数字',否则你必须调整偏移量:

:15m 33|32m 14

答案 1 :(得分:4)

我能想到的两种方式。使用Vim可能还有更多!

:33 | delete | 15 | put | 15 | delete | 32 | put

...或...

13ggdd15ggPjdd33ggP

...写下来的键击次数较少,但写下来时可以理解得少一些!

答案 2 :(得分:3)

如果我在文件中,我发现这个命令是最快的方法:

:15mo33

答案 3 :(得分:1)

我经常使用以下内容:

" Tip #470 : Piet Delport & Anthony (ad_scriven)
vnoremap <silent> g" <esc>:call <sid>SwapVisualWithCut()<cr>

function! s:SwapVisualWithCut()
  normal! `.``
  if line(".")==line("'.") && col(".") < col("'.")
    let c = col('.')
    normal! gvp```]
    let c = col('.') - c
    normal! ``
    :silent call cursor(line("."),col(".")+c)
    normal! P
  else
    normal! gvp``P
  endif
endfunction

想法是删除任何地方的内容,然后在其他地方选择字符,然后点击g"将删除字符与新选择的字符交换。