列复制并粘贴到行中

时间:2011-04-23 05:33:50

标签: vim

我有一个包含以下内容的文件:

    sensor_write_reg(client,0x57,0x00);
    sensor_write_reg(client,0x58,0x00);
    sensor_write_reg(client,0x59,0x00);
    sensor_write_reg(client,0xfe,0x00);
    sensor_write_reg(client,0x46,0x00);

我想将以下文本列复制到新文件中:

struct reg reg_table[] =
{
// paste here
}

int a;
int b;
int c;
// ...

the following content expected:
struct reg reg_table[] =
{
0xfe,0x01   
0x54,0x11
0x55,0x03
0x56,0x00
0x57,0x00
0x58,0x00
0x59,0x00
0xfe,0x00
0x46,0x00
}

int a;
int b;
int c;
// ...

在源文件中,我输入CTRL + v进入列模式,选择并复制。 键入CTRL + W以输入目标文件,然后键入p以粘贴。 但是,粘贴的内容会覆盖以下语句。那不是我想要的。

0xfe,0x01
0x54,0x11}
0x55,0x03int a;
0x56,0x00int b;
0x57,0x00int c;
0x58,0x00

是否可以通过多种新行将其粘贴到行模式中?

3 个答案:

答案 0 :(得分:3)

始终按行键入内容,您可以使用:put命令。

:put

如果您想转换为字符或块状,可以使用此vim tip中所示的setreg()功能,或使用此插件UnconditionalPaste

答案 1 :(得分:0)

块状选择不像行选择那样。

您正在复制6行文本,因此您必须释放6行进行粘贴。试试6O<CR>p

答案 2 :(得分:0)

你也可以尝试一个宏;经过一番尝试,我找到了这个:

y:tabe^MP:%s/^.*\(0x\x\+,0x\x\+\).*$/\1/^MVggy:tabclose!^M^Wjp

^M^W是回车和控制-W)

你的vim的设置将是......

  • 一个带两个窗口的标签,horz分割(通过C-W S)
  • 上部窗口中的sensor_write_reg-stuff,
  • 粘贴在这里 - 源代码在较低的一个。
  • 下窗口:得到“粘贴在这里”
  • 上部窗口:视觉选择(现在使用大写字母V)您想要的行
  • 然后按@q(如果将宏保存到q;或者只是动态输入命令......)并让魔法发生......

这里发生了什么?

  • y
    我们抓文字
  • :tabe^MP
    并打开一个带有空缓冲区的新标签,粘贴文字
  • (注意:如果你有一个未命名的缓冲区,这将不起作用)
  • :%s/^.(0x\x+,0x\x+).$/\1/
    这里我们过滤:只有两个以逗号分隔的十六进制数字将继续存在。
  • Vggy:tabclose!^M
    猛拉一切,关闭缓冲区(不保存)
  • (现在我们回到第一个标签,仍在上面的窗口中)
  • ^Wjp
    向下移动一个窗口并粘贴。

最后,你可以使用kD删除“粘贴在这里”-line ...