有没有办法选择下列代码中的第二列,即
,结果是非矩形。vim - 非矩形可视块
我试过“CTRLv 3jE”,但那不起作用。
int var_one = 1;
int var_two = 2;
int var_three = 3;
int var_very_long = 4;
有没有办法选择下列代码中的第二列,即
,结果是非矩形。vim - 非矩形可视块
我试过“CTRLv 3jE”,但那不起作用。
int var_one = 1;
int var_two = 2;
int var_three = 3;
int var_very_long = 4;
基础上的评论,我觉得要走的路正在编写一个自定义函数,它将 将任务传递给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)
注册一个现在将包含:
var_one
var_two
var_three
var_very_long
您可以轻松地"ap
别处。注意,如果省略参数 ,那么该列默认为1。
创建自定义命令“列注册”使这一过程甚至nicier到 境外使用的Vim的脚本:
:command! -range -nargs=+ CTR <line1>,<line2>call ExtractColToRegister(<f-args>)
使用CopyMatches功能从http://vim.wikia.com/wiki/Copy_the_search_results_into_clipboard
然后选择线路,做一些像
:'<,'>CopyMatches .*=
已经回答了,但你想要做什么?如果你在选择后告诉你假装做什么,也许还有另一种方法。 – sidyll 2011-06-10 01:26:44
@sidyll:我想复制该列,然后在另一个位置重现它。 这只是一个例子,实际上我需要这个特性来为我的单元测试编写脚本,这些脚本有很多重复的列。 – 2011-06-10 01:59:39