vim - 非矩形视觉块

时间:2011-06-10 00:32:09

标签: vim

有没有办法在以下代码中选择第二列,
结果证明是非矩形的。

我尝试过“CTRLv 3jE”,但这不起作用。

int var_one = 1;
int var_two = 2;
int var_three = 3;
int var_very_long = 4;

3 个答案:

答案 0 :(得分:4)

您可以使用其中一个Align插件来对齐您的列,选择并复制它,然后撤消对齐(或保持对齐)

答案 1 :(得分:0)

根据评论,我认为要走的路是编写一个自定义函数 将任务传递给awk。它也可以用一些正则表达式来完成,每个都分开 空格线,但awk应该更容易。这是我的第一次尝试:

function! ExtractColToRegister(reg, ...) range
    let input = join(getline(a:firstline, a:lastline), "\n")
    if a:1 | let column = a:1
    else   | let column = 1 | endif
    exec "let @". a:reg . " = system(\"awk '{ print $" .
       \ column . " }'\", input)"
endfunction

如果你已经在写Vim,你应该没有理解它 脚本:-)然而,让我知道它的某些部分是否不清楚,如果有的话 还有待改进的地方。

该功能基本上是将特定列保存到寄存器。如果 您可以直观地选择问题中给出的示例代码,然后:

:'<,'>call ExtractColToRegister("a", 2)

注册 a 现在将包含:

var_one
var_two
var_three
var_very_long

你可以轻松"ap在其他地方。请注意,如果是,则列默认为1 论点被省略了。

创建自定义命令“Column to Register”使得该过程更加精确 在Vim脚本之外使用:

:command! -range -nargs=+ CTR <line1>,<line2>call ExtractColToRegister(<f-args>)

答案 2 :(得分:0)

使用http://vim.wikia.com/wiki/Copy_the_search_results_into_clipboard

中的CopyMatches功能

然后选择行并执行类似

的操作
:'<,'>CopyMatches .*=