Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vim 交换ex中的字符_Vim_Vi_Ex - Fatal编程技术网

Vim 交换ex中的字符

Vim 交换ex中的字符,vim,vi,ex,Vim,Vi,Ex,我对vim和ex很陌生,我想知道是否有人能帮我解决我不清楚的问题。我想知道如何在模式的每一行或每一次出现时交换字符。例如,如何交换文件中每行的前2个字符。我知道这是可以做到的,而且我很确定这涉及到使用括号来存储字符。但我只知道这些。另外,假设我想用一些字符串替换everyline上的第二个字符,我该怎么做 交换每行的前两个字符: :%s/^\(.\)\(.\)/\2\1/g 将每行的第二个字符替换为“字符串”: 有关替换命令的详细信息:将每行中的第二个字符替换为vim中的r::%s/^\(.\

我对vim和ex很陌生,我想知道是否有人能帮我解决我不清楚的问题。我想知道如何在模式的每一行或每一次出现时交换字符。例如,如何交换文件中每行的前2个字符。我知道这是可以做到的,而且我很确定这涉及到使用括号来存储字符。但我只知道这些。另外,假设我想用一些字符串替换everyline上的第二个字符,我该怎么做

交换每行的前两个字符:

:%s/^\(.\)\(.\)/\2\1/g
将每行的第二个字符替换为“字符串”:


有关替换命令的详细信息:

将每行中的第二个字符替换为vim中的
r
:%s/^\(.\)/\1r/

  • :%s/p/r/
    将所有行的模式
    p
    替换为
    r
    (因为
    %
  • ^
    起始行
  • \(
    启动一个组
  • 任何字符(本例中的第一个)
  • \)
    结束分组
  • 任何字符(本例中的第二个字符)
  • \1
    返回对第一组的引用(本例中的第一个字符)
  • r
    替换文本

要交换前两个字符:
:%s/^\(.\)\(.\)/\2\1/

可以执行以下操作来交换缓冲区中每行的前两个字符:

:%norm xp
或:

您需要使用
:global
命令将上述命令应用于与特定模式匹配的每一行:

:g/foo/norm xp
或:

参考:

:help :normal
:help :global
:help :s
:help range
:g/foo/norm xp
:g/foo/s/\v^(.)(.)/\2\1
:help :normal
:help :global
:help :s
:help range