如何移动一个块或一列文本

时间:2009-03-06 20:47:04

标签: vim

我将以下文字作为一个简单的案例:

...
abc xxx 123 456
wer xxx 345 678676
...

我需要将文本块xxx移动到另一个位置:

...
abc 123 xxx 456
wer 345 xxx 678676
...

我认为我使用可视模式来阻止一列文本,将该块移动到另一个位置的其他命令是什么?

5 个答案:

答案 0 :(得分:42)

您应该使用逐块可视模式( Ctrl + v )。 然后 d 删除块, p P 以粘贴块。

答案 1 :(得分:15)

尝试link


标记文字(视觉模式)

  • v - 启动视觉模式,标记线条,然后执行命令(例如y-yank)
  • V - 启动Linewise可视模式
  • o - 移至标记区域的另一端
  • Ctrl + v - 启动视觉阻止模式
  • O - 移至街区的其他角落
  • aw - 标记一个单词
  • ab - a()块(带括号)
  • aB - 一个{}块(带括号)
  • ib - inner()块
  • iB - inner {} block
  • Esc - 退出视觉模式

视觉命令

  • > - 右移
  • < - 向左移动
  • y - 猛拉(复制)标记文字
  • d - 删除标记文字
  • - 切换案例

剪切和粘贴

  • yy - 猛拉(复制)一行
  • 2yy - 猛拉2行
  • yw - 猛拉词
  • y $ - 抽到行尾
  • p - 在光标
  • 之后放置(粘贴)剪贴板
  • P - 在光标
  • 之前放置(粘贴)
  • dd - 删除(剪切)一行
  • dw - 删除(剪切)当​​前单词
  • x - 删除(剪切)当​​前字符

答案 2 :(得分:9)

我在学习VIM之初学到的几个有用的命令之一就是 :1,3 mo 5 这意味着将文本第1行到第3行移到第5行。

答案 3 :(得分:5)

  1. 在VIM中,按 Ctrl + V 进入可视阻止模式
  2. 使用箭头键选择所需的列,然后按 x 将其剪切到缓冲区中。
  3. 将光标移动到第1行第9列并在命令模式下按 P (即大写字母P)。
  4. Ctrl + Shift + b 进入和退出。 (source

答案 4 :(得分:0)

使用外部命令“awk”。

%!awk '{print $1,$3,$2,$4}' test.txt 

使用纯vim

:%s,\v(\w+) (\w+) (\w+) (\w+),\1 \3 \2 \4,g

使用全局命令的另一个vim解决方案

:g/./normal wdwwP