0

我想知道如何使用字符串在 VIM 中移动列/文本。我有一个必须重新排序的名称的简短列表,需要将其放置在姓氏 First Middle 到 First Middle Last 中。

所以这里是一个示例列表:

  • 工厂,罗伯特 A.
  • 佩奇,吉米
  • Bonhham,约翰 H.
  • 琼斯,约翰·保罗

我在想字符串应该是这样的:

:s/\([A-z]\{2}\)\(\[A-z]\{2}\)/2\1/

谢谢

4

2 回答 2

3

首先,我建议使用\v“非常神奇”标志来避免元字符的所有其他内部转义。这将与以下替代品一起使用:

 :s/\v([A-z]+),\s+([A-z]+)(\s+[A-z.]+)?/\2\3 \1

分解它:

  • ([A-z]+)将姓氏捕获到\1
  • ,\s+文字逗号和一个或多个空格
  • ([A-z]+)将名字捕获到\2
  • (\s+[A-z.]+)?捕获中间名及其前导空格,因为它可能不存在。还允许., 并以 a 结尾?以使整个构造成为可选的\3
  • \2\3 \1替换为第二组(名字),紧跟中间名\3,中间没有空格,因为空格与中间名一起被捕获。然后附加\1姓氏。

如果名称可能超过[A-z]+,您也可以使用[\S]+来捕获所有非空白字符。

于 2013-10-06T19:26:41.763 回答
0

这个怎么样:

:%s/\([[:alpha:]]\+\), \([[:alpha:]]\+\)\( [[:alpha:]]\+\.\?\)\?/\2\3 \1/g

这将捕获最后一个、中间(可选)和第一个,并在替换中重新排序它们。您可能需要在[[:alpha:]]集合中包含其他字符,但这适用于您的示例。

欲了解更多信息,请了解优秀和综合:help是如何构建的;所有的信息都在那里(你只需要知道如何找到它)!Stack Overflow 上也有很多非常相似的正则表达式问题。

于 2013-10-06T19:27:45.440 回答