vim在单词周围加上引号和逗号

问题描述 投票:6回答:4

我有缩写形式和长格式的货币列表:

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中。

即使我已经在notepad ++中做到了,也可以将自己扩展到其他编辑器。

建议非常感谢。

vim editor text-editor
4个回答
9
投票

以ex模式尝试此命令。

%s/\w\+/"&",/g | $s/,$//

它应该可以解决问题。

说明:%s替代所有行

在匹配部分:

[\w是“文字字符”,不包含空格

[\+说要匹配前面的一个或多个字符

在替换部分:

[&指整个匹配的字符串

最后,g意味着在该行上进行全局替换,而不仅仅是在第一行之后停止替换。

竖线|可用于分隔ex命令并按顺序运行它们。

$s表示替换为最后一行。竖线后的替换将删除行尾的所有逗号,如$锚点所示。这样可以确保列表末尾没有逗号。


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",

0
投票

要在建议的解决方案中四舍五入,您还可以选择可视块,并用引号引起来。这可能是与NP ++最相似的方法(即使到目前为止我从未使用过Notepad!)。用ctrl-v选择了一个可视块,所以我的解决方法是:

  • 转到第一行的开头:gg0
  • 选择第一个可视块:<ctrl-v>Ge
  • 带引号的包围块:s""<esc>P
  • 跳转到空格并将其全部选择到底部:f<space><ctrl-v>G
  • 替换所选空格:s,"

现在,要完成此过程,请在每行末尾添加引号。您可以记录一个宏(请参见romainl的先前答案),或者-我更喜欢---执行一个快速替换::%s/$/"/g<enter>,就完成了!


0
投票

我知道这是一个老问题,但我想我会考虑一下。

这是答案中最长的击键,但我认为这是快速完成此操作的最简单/最自然的方法,至少对我而言(这实际上取决于您更熟悉什么以及您的思维方式。]

qq
cw"",<Esc>
h
h
p
W
C
""<Esc>
h
p
j
0
q

然后13@q在其余的行上运行宏。

这是结果:

"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"
© www.soinside.com 2019 - 2024. All rights reserved.