2001 "Some Kind of Title," Author's Name, Publication Name, 1 Mar.
2002 "Some Kind of Title," Author's Name, Publication Name, 12 Oct.
2003 "Some Kind of Title," Author's Name, Publication Name, 8 Apr.
2004 "Some Kind of Title," Author's Name, Publication Name, 3 Jun.
有没有办法我可以抓住前四个字符(年份)并将其复制到行的结尾,因此看起来像这样:
2001 "Some Kind of Title," Author's Name, Publication Name, 1 Mar. 2001
2002 "Some Kind of Title," Author's Name, Publication Name, 12 Oct. 2002
2003 "Some Kind of Title," Author's Name, Publication Name, 8 Apr. 2003
2004 "Some Kind of Title," Author's Name, Publication Name, 3 Jun. 2004
#1 楼
:% s/\v^(\d{4})(.*)$/ /
是一种方法
\v
魔术选项,以避免逃避分组()
^
行首\d{4}
正好匹配四位数字.*
其余行
在()
内具有匹配的模式编辑:@Jair Lopez在评论中提及,正则表达式可以进一步改进:
:% s/\v^(\d{4}).*/& /
或等效的
/>
:% s/\v^(\d{4}).*/q4312078q /
&
和q4312079q
包含整个匹配的模式为进一步阅读,vimregex和regex FAQ
评论
:%s / \ v ^(\ d {4})。* /&\ 1 /将是一个较短的命令。
–贾尔·洛佩斯(JairLópez)
16年5月1日在15:21
#2 楼
还有一个带有宏的解决方案:qqyiwA <Esc>pj0q
意思是:
qq Record the macro in the register q
yiw Yank the text described by the text object iw (inner word): The date
A <Esc> Append a white space to the end of the line and go back to insert mode
p Paste the date
j0 Place your cursor on the first column of the next line (to be able to repeat the macro)
q Stop recording
然后可以重播宏与
3@a
一样,只要有足够多的时间。 > :%normal @q
您当然可以用描述要修改的行的范围替换
%
。评论
您也可以使用:%normal @q在每一行上执行它
– evilsoup
16年5月1日在9:03
@evilsoup:感谢您提及,我将编辑答案。
–statox♦
16年5月1日在9:19
#3 楼
这是我的处理方式::%norm y4lA <C-o>p
说明:
:%norm "Apply the following keystrokes to every line:
y4l "Yank 4 letters. You could also do 'yiw'
A "Add a space to the end
<C-o> "Do a single normal command
p "Paste
#4 楼
如果可以访问标准UNIX命令,则可以使用AWK
::%!awk '{print q4312078q" "}'
评论
那么,不是vi / vim还是前四个字符。
–烟斗
16年5月1日在18:04
考虑到:help过滤器是Vim的内置功能,考虑到该功能允许Vim适应UNIX范式的程度,我会说实际上是vi / vim。
– romainl
16年5月1日在18:29
#5 楼
我认为执行此操作的现有机制更好,但是也可以使用可视块模式来执行此操作。复制日期:
gg # Go to the top of the file
<ctrl>y # Enter visual block mode
G # Go to the bottom of the file
w # Select the first word
"jy # Copy in to the j register
粘贴第一行的结尾:
gg # Top of file
A # Append the line
# Some spaces
<ESC> # Return to command mode
粘贴:
gg
# Move right to the length of the longest line
"jp # Paste the block
评论
请注意,您只能执行4l而不是llll
–EvergreenTree
16年5月25日在21:40
@EvergreenTree-更新。
–sixtyfootersdude
16年5月25日在21:58
#6 楼
从UNIX命令行(或Windows(如果已安装UNIX命令行工具))sed -e "s/\(....\)\(.*\)/ " < inputFile > outputFile
评论
当然有::%g / ^ \ d \ {4} \ d \ @!/ s / ^ \(\ d \ {4} \)。* \ zs / \ 1 /。