我有缩写和长格式的货币清单:
AED United Arab Emirates dirham
AFN Afghani
ALL Lek
AMD Armenian Dram
ANG Netherlands Antillian Guilder
AOA Kwanza
ARS Argentine Peso
AUD Australian Dollar
AWG Aruban Guilder
AZN Azerbaijanian Manat
BAM Convertible Marks
BBD Barbados Dollar
BDT Bangladeshi Taka
BGN Bulgarian Lev
我实际上有182行它们......在记事本++中我可以在几秒钟内轻松获得每个单词后面的单词和逗号的引号,我想知道是否有办法在vim或其他任何其他内容中执行此操作Linux中的编辑器。
尽管我已经在记事本++中完成了它,但是将自己扩展到其他编辑也是很好的。
建议非常感谢。
答案 0 :(得分:7)
在ex模式下尝试此命令。
%s/\w\+/"&",/g | $s/,$//
它应该做的伎俩。
说明:
%s
代替所有行
在比赛部分:
\w
是一个"字符",它不包含空格
\+
表示匹配前面一个或多个字符
在替换部分:
&
指的是整个匹配的字符串
最后,g
表示在线上全局替换,而不仅仅是在第一行之后停止替换。
垂直条|
可用于分隔ex命令并按顺序运行它们。
$s
指的是替换最后一行。
垂直条之后的替换将删除行末尾的任何逗号,由$
锚点指示。这样可以确保您在列表末尾没有逗号。
答案 1 :(得分:4)
可以记录一个宏:
gg
qq
I"<Esc>
f<space>
s","<Esc>
A",<Esc>
q
并在每一行执行:
:%norm @q<CR>
或者一气呵成地做同样的事情:
:%norm I"<C-v><Esc>f<space>s","<C-v><Esc>A",<C-v><Esc><CR>
或者,当然使用替换:
:%s/\(\w\+\) \(.\+\)$/"\1","\2",
答案 2 :(得分:0)
要对上述建议的解决方案进行舍入,您也可以选择可视块,并用引号将它们包围起来。这可能是与NP ++最相似的方法(即使我到目前为止从未使用过记事本!)。使用ctrl-v
选择可视块,因此我的解决方案是:
gg0
<ctrl-v>Ge
s""<esc>P
f<space><ctrl-v>G
s,"
现在,要完成此过程,请在每行末尾添加引号。你可以录制一个宏(参见romainl的上一个答案)或者 - 我更喜欢---执行快速替换::%s/$/"/g<enter>
,你就完成了!
答案 3 :(得分:0)
我知道这是一个老问题,但我想我会考虑一下。
这是答案中最长的按键,但我认为这是快速完成此操作的最简单/最自然的方法,至少对我而言(这实际上取决于您更熟悉的内容和思维方式)。
Cannot use mutating member on immutable value: 'self' is immutable'
然后qq
cw"",<Esc>
h
h
p
W
C
""<Esc>
h
p
j
0
q
在其余的行上运行宏。
这是结果:
13@q