我有一个文本文件中的两行内容如下:
S<Switch_ID>_F<File type>
_ID<ID number>_T<date+time>_O<Original File name>.DAT
我想在vi中像下面这样拼接两行:S<Switch_ID>_F<File type>_ID<ID number>_T<date+time>_O<Original File name>.DAT
使用vi的命令模式,如何将第二行删除并将第二行的内容追加到第一行?
Shift+J 可以去除当前行的换行符,在任意位置按下 "J" 键,就可以按照你想要的方式将当前行和下一行组合在一起。
Vi还是Vim?
无论如何,在“nocompatible”模式下,以下命令适用于Vim。也就是说,我想几乎等同于纯vi。
:join!
如果你想从普通命令中执行此操作,请使用:
gJ
使用'gJ'命令可以将行连接起来,不会添加或删除任何空格:
S<Switch_ID>_F<File type>
_ID<ID number>_T<date+time>_O<Original File name>.DAT
结果:
S<Switch_ID>_F<File type>_ID<ID number>_T<date+time>_O<Original File name>.DAT
'J' 命令将会使你:
S<Switch_ID>_F<File type> _ID<ID number>_T<date+time>_O<Original File name>.DAT
注意type>
和_ID
之间的空格。
g/pattern/join
是有效的,而g/pattern/J
则不行。这可能会帮助一些未来的人。 - jisaacstonegJ
会保留这些空格,而 J
看起来只会放置一个空格字符,无论下一行开头有多少个空格。 - userrandrand这应该就可以了:
J
在 vi 中,J
(即 Shift + J) 或 :join
命令通常可以实现你想要的结果。需要注意的是它们会调整空格。尤其是在许多情况下,两个合并的行之间会有一个空格,在第二行缩进的情况下,缩进将被移除后再进行合并。
在 Vim 中,你还可以使用 gJ
(按下 G 键,然后再按下 Shift + J 键)或 :join!
命令来连接行,而不进行任何空格调整。
在 Vim 中,查看 :help J
获取更多信息。
gJ
和 J
的一个注意事项是,它们都会将光标更改为连接点,但 :join!
和 :join
不会。 - SergioAraujo只需将 "\n
" 替换为 ""。
在 vi/Vim 中,对于文档中的每一行:
%s/>\n_/>_/g
如果你想要确认每一次替换:
%s/>\n_/>_/gc
另一种不需要将光标放到该行的方法是连接两行:
:6,6s#\n##
这里的数字6是另一行将要加入的行号。要显示行号,请使用:set nu
命令。
如果我们在光标所在位置,需要将下一行加入到该位置,则执行以下操作:
:s#\n##
:s#\n##g
一样使用 g
,因为每行只有一个 \n
。Shift+V
更容易选择要合并的所有行,除了最后一行,然后在此示例中使用 :'<,'>s/\n/, /
合并行并在每行末尾放置逗号和空格。请注意,当选定某些内容并在正常模式下键入 :
时,'<,'>
会自动出现在命令行上。 - Evgeni Sergeev在第一行按下 Shift + 4("$"),然后按下 Shift + j ("J")。
如果需要帮助,请进入vi,然后按下F1。
gJ
可以避免额外的空格。你试过吗? - Peter MortensengJ
。
ََ
if err != nil { return err }
合并成return err }```
- Rishabh Bhatnagar