vim选择文字

时间:2013-02-15 19:44:33

标签: vim

我有一个看起来像这样的文件:

1 148 1  4
2 333 1  3
3 534 2  3
4 772 g  7
5 921 p  2

我想从第1行到第5行以及从第1列到第7行抽取文本:

1 148 1  
2 333 1  
3 534 2  
4 772 g  
5 921 p   

我可以从vim命令行执行此操作吗?如果我输入

:1,5ya a

整条线被拉入注册“a”,我只想要某些列。

感谢。

5 个答案:

答案 0 :(得分:2)

您可以在:normal的帮助下在命令行上执行任何命令:

:execute "normal! 1G^\<C-v>6l5j\"ay"

这会构建一个块顺序选择,然后将其拉出来注册a。使用:execute以便可以使用\<C-v>表示法而不是字面插入它。它还允许您用变量替换硬编码限制。

答案 1 :(得分:1)

您不能以简单的方式从vim命令行执行此操作。 :y linewise 命令 - 它只影响整行。您正在寻找的是 blockwise 。块状命令涉及可视模式。所以你能做的最好的事情是:

  1. CTRL-V启动可视模式。
  2. 突出显示所需的文字。
  3. "ay将突出显示的文字放入注册a

答案 2 :(得分:0)

不是很普通,但这应该有效:

:1,5y|put|-4,.s/\(.\{7\}\).*/\1/|-4,.d a

Yank 5行,放(复制)它们,删除所需列后的所有内容,将它们删除到缓冲区中。

答案 3 :(得分:0)

另一种方法,更适合脚本:

:let @a = join(map(getline(1, 5), 'matchstr(v:val, ".*\\%<9v")'), "\n")

它将行检索为List(getline()),然后通过特殊的/\%<v正则表达式原子匹配前7个虚拟列,并将其(join() ed指定为字符串)到寄存器@a

答案 4 :(得分:0)

我会做

C-V 2瓦特 ý

并完成(从 g g 的文档顶部开始)

当然,如果您想要注册 a ,请添加"a

了Cv 2瓦特 ý