说我有一个文本文件中的行以下样式:
"12" "34" "some text "
"56" "78" "some more text"
.
.
.
etc.
我希望能够去除环境的前两列的报价。 什么是用Vim做到这一点的最佳方式(我目前使用gVim的)?
我想出如何至少通过视觉方式删除每一行的开头引用,然后输入命令'<,'>s!^"!!
我不知道是否有一种方法来选择文本的整列(一个字符直行下文件...或大于1,但在这种情况下,我将只需要一个)。 如果可能的话,那么你会能够运用x命令(删除字符)到整列。
有可能是更好的方式来做到这一点。 我正在寻找任何建议。
更新
公正仅供参考,我联合了几个建议。 我的_vimrc
文件现在有下面几行:
let @q=':%s/"\([0-9]*\)"/\1/g^M'
(注: ^M
是CTRL Q + 输入模拟按压运行命令后回车键)
现在我可以通过@ q使用宏来从文件中都列数删除所有的报价。
控制-V是用于区块选择。 这将让你在相同的字符列中选择的事情。
好像你要删除围绕数字引号。 对于使用,
:%s/"\([0-9]*\)"/\1/g
这里是一个你可以用vim做什么模式列表 。
还有一个(排序的丑陋)形式,将限制到每行4所替换。
:%s/^\( *\)"\([ 0-9]*\)"\([ 0-9]*\)"\([ 0-9]*\)"/\1\2\3\4/g
而且,如果你已经sed
方便,你可以从shell尝试这些了。
head -4 filename.txt | sed 's/pattern/replacement/g'
将尝试在第4行中文件的命令。
如果你想删除所有列,但第一个说了,简单和容易的方法是输入这个Vim中:
:%!awk '{print $1}'
或者你希望所有列,但第一位的,你也可以这样做:
:%!awk '{$1="";$0=$0;$1=$1;print}'
事实上,它需要外部工具来完成任务,但AWK安装在Linux和Mac在默认情况下,我认为,没有类似UNIX的系统经验的乡亲在Windows中很少使用Vim,否则你可能知道如何获得AWK的Windows版本。
虽然这种情况是相当简单的用正则表达式来解决,如果你想要做一些更高级的甚至有点我也建议录制像布莱恩·沃德的宏。 另外宏比记住哪些字符需要在vim的正则表达式来进行转义来容易给我。 和宏是好的,因为你可以看到你的改变就会立即生效,并在同一时间在较小的位上的线路改造工作。
所以你的情况,你会按QW开始录制寄存器宏W(当然你也可以使用任何你想要的字母)。 我通常用^移动到一行的开始,因此宏不依赖于光标的位置开始我的宏。 然后,你可以做AF“跳转到第一个” X将其删除,F“跳转到下一个”和X删除了。 那么q完成录音。
相反,在从下一行的微距端的我竟迟至今天想通了,你可以只V(视觉系选择)您想您的宏适用于并执行所有行:它适用您的宏在寄存器W正常@w每个视觉上选择的行。
请参阅在vim列编辑 。 它描述列插入,但基本上应该以同样的方式工作去除。
你也可以创建一条删除引号,然后下降到下一行宏(Q)。 然后,你可以告诉VI多少次执行它运行了一堆倍。 所以,如果你存储宏说字母M,那么你可以跑100 @米,它会删除引号为100线。 有关宏的一些详细信息:
http://vim.wikia.com/wiki/Macros
其他解决方案都不错。 您也可以尝试...
:1,$s/^"\(\w\+\)"/\1/gc
欲了解更多Vim的正则表达式的帮助也看到http://vim.wikia.com/wiki/Search_patterns 。