标签: ex

用于"编辑此文件副本"的Vim命令

我现在似乎遵循的模式是:

  • 编辑文件直到我喜欢它
  • :w another-file 用它作为起点 another-file
  • :e another-file 擦亮 another-file

是否有现成的ex命令一次执行后两个步骤?有点像:writeAndEdit another-file

我可以使用vimscript伪造一个,我只想知道是否存在现有命令.

vim ex

29
推荐指数
2
解决办法
8782
查看次数

Vim中的多个全局命令给出错误:不能执行:全局递归

我想根据他们的首字母用以下全局命令对我的文本中的段落进行排序:

g/_p/,/^$/mo$
Run Code Online (Sandbox Code Playgroud)

这单独工作.但是,当我一次使用多个全局命令时,会发生错误:

g/_p/,/^$/mo$|g/_w/,/^$/mo$
Run Code Online (Sandbox Code Playgroud)

这会出现以下错误:

Cannot do :global recursive
Run Code Online (Sandbox Code Playgroud)

如何一次顺序运行这些命令?

vim global ex

8
推荐指数
1
解决办法
1293
查看次数

在 Vim 中,如何删除某处重复的所有行

我有一个包含以下行的文件:

one one
one one
two two two
one one
three three
one one
three three
four
Run Code Online (Sandbox Code Playgroud)

我想从文件中删除所有出现的重复行,只保留非重复行。因此,在上面的示例中,结果应该是:

two two two
four
Run Code Online (Sandbox Code Playgroud)

我看到了这个类似问题的答案。我尝试修改前一行,如下所示:

:syn clear Repeat | g/^\(.*\)\n\ze\%(.*\n\)*\1$/exe 'syn match Repeat "^' . escape(getline ('.'), '".\^$*[]') . '$"' | d
Run Code Online (Sandbox Code Playgroud)

但它不会删除所有出现的重复行,它仅删除一些出现的重复行。

我怎样才能在 vim 中做到这一点?或者具体来说我怎样才能在 vim 中使用 ex 做到这一点?

澄清一下,我不是在寻找sort u.

vim ex

6
推荐指数
2
解决办法
4383
查看次数

如何将ex模式下的命令字符串复制到剪贴板?

如何将ex模式下的命令字符串复制到剪贴板?

在此输入图像描述

vim copy mode ex

5
推荐指数
1
解决办法
636
查看次数

vim:基于一个 :global 命令运行多个命令

抱歉,如果这已经发布了,因为即使在 vim wiki 上我也找不到答案。

有没有一种方法可以在 vim 命令行模式下通过一次:g搜索运行多个命令?

例如,

:%g/foo/ s/bar/\=@a/g | exe "norm /cat\<enter>\"ayiw"
Run Code Online (Sandbox Code Playgroud)

哪个(对于我打算这样做)应该在匹配的每一行上用 register 的内容foo替换,然后找到下一个迭代(即使它前面有很多行),并将周围的单词放入 register 。baracata

相反,此特定语法使用初始a寄存器的当前内容完成替换命令,然后在单行上执行正常模式命令(在替换完成后)。

此示例不是我的特定用例,而是显示了此功能有用的一个实例。我意识到我可以把它全部放在一个exe,即 ,%g/foo/exe "norm :s/bar/\\=@a/g\<enter>/cat\<enter>\"ayiw"但我想用第一种方式来做,因为我觉得它更灵活。


我更喜欢使用 vanilla vim 来做到这一点,但如果存在一个插件,这是一个不错的选择。有谁知道是否有语法来做这样的事情?

vi vim ex

5
推荐指数
1
解决办法
494
查看次数

将ex命令重定向到vim中的STDOUT

我正在尝试制作一个命令,将vim的突出显示信息转储给STDOUT.我可以成功写入这样的文件:

vim +'redir >outfile' +'hi' +'redir END' +'q'
Run Code Online (Sandbox Code Playgroud)

在此之后,outfile包含我想要的.但我宁愿输出到STDOUT来管道转换为突出显示信息的命令.

此方法尝试将命令重定向到寄存器,写入当前缓冲区,然后将该输出发送到tee.

vim -E +'redir @a' +'silent! hi' +'redir END' +'put a' +'w !tee' +'q!' > outfile
Run Code Online (Sandbox Code Playgroud)

这非常接近,但输出一个主要的分页消息(另外255行...)和一些ANSI转义废话.设置nomore没有为我压制消息.我希望outfile将第一个命令中发送的确切输出发送到STDOUT.

vim ex

4
推荐指数
1
解决办法
1642
查看次数

如何在Vim中选择一行的一部分

我有一行文字看起来像这样

foo bar http://www.example.com -> baz
Run Code Online (Sandbox Code Playgroud)

我想用ex来吸取url部分.任何人对如何做到这一点都有任何想法?

澄清.我想:y/http:.*\.com/从命令行做这样的事情.但这不起作用.

vim ex

3
推荐指数
1
解决办法
382
查看次数

shell 脚本替换文件中的变量 - Sed 的 -i 选项用于就地更新时出错

这是我的test.env

RABBITMQ_HOST=127.0.0.1
RABBITMQ_PASS=1234
Run Code Online (Sandbox Code Playgroud)

我想用它test.sh 来替换 to 中的值test.env

RABBITMQ_HOST=rabbitmq1
RABBITMQ_PASS=12345
Run Code Online (Sandbox Code Playgroud)

这是我的test.sh

#!/bin/bash
echo "hello world"

RABBITMQ_HOST=rabbitmq1
RABBITMQ_PASS=12345
Deploy_path="./config/test.env"

sed -i 's/RABBITMQ_HOST=.*/RABBITMQ_HOST='$RABBITMQ_HOST'/'  $Deploy_path
sed -i 's/RABBITMQ_PASS=.*/RABBITMQ_PASS='$RABBITMQ_HOST'/'  $Deploy_path 
Run Code Online (Sandbox Code Playgroud)

但我有错误

sed: 1: "./config/test.env": invalid command code .
sed: 1: "./config/test.env": invalid command code . 
Run Code Online (Sandbox Code Playgroud)

我该如何修复它?

bash awk sed inplace-editing ex

3
推荐指数
1
解决办法
1101
查看次数

Vim:从函数调用ex命令(set)?

在此上画一个空白,谷歌没有帮助.

想要制作这样的功能:

function JakPaste()
        let tmp = :set paste?
        if tmp == "paste"
                set nopaste
        else
                set paste
        endif
endfunction

map <F2> :call JakPaste()<CR>
Run Code Online (Sandbox Code Playgroud)

但这不起作用.我已经隔离了这条折线:

function JakPaste()
        let tmp = set paste?
endfunction

map <F2> :call JakPaste()<CR>
Run Code Online (Sandbox Code Playgroud)

按F2会导致此错误:

Error detected while processing function JakPaste:
line    1:
E121: Undefined variable: set
E15: Invalid expression:  set paste?
Hit ENTER or type command to continue
Run Code Online (Sandbox Code Playgroud)

我应该如何从vim函数调用ex命令(set)?

似乎有点相关,但我仍然没有得到它.

vim function set ex

2
推荐指数
1
解决办法
2467
查看次数

在vim匹配正则表达式中追加到行

我有一个json文件,可以使用vim进行查找和替换,但是我,在行尾忘记了。

...
"id":41483
"someName":"someValue",
...
Run Code Online (Sandbox Code Playgroud)

使用vim,如何将a附加,到每个匹配的行上\"id\"\:[0-9].*$

vi vim ex

2
推荐指数
1
解决办法
533
查看次数

标签 统计

ex ×10

vim ×9

vi ×2

awk ×1

bash ×1

copy ×1

function ×1

global ×1

inplace-editing ×1

mode ×1

sed ×1

set ×1