我现在似乎遵循的模式是:
:w another-file 用它作为起点 another-file:e another-file 擦亮 another-file是否有现成的ex命令一次执行后两个步骤?有点像:writeAndEdit another-file?
我可以使用vimscript伪造一个,我只想知道是否存在现有命令.
我想根据他们的首字母用以下全局命令对我的文本中的段落进行排序:
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)
如何一次顺序运行这些命令?
我有一个包含以下行的文件:
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 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 来做到这一点,但如果存在一个插件,这是一个不错的选择。有谁知道是否有语法来做这样的事情?
我正在尝试制作一个命令,将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.
我有一行文字看起来像这样
foo bar http://www.example.com -> baz
Run Code Online (Sandbox Code Playgroud)
我想用ex来吸取url部分.任何人对如何做到这一点都有任何想法?
澄清.我想:y/http:.*\.com/从命令行做这样的事情.但这不起作用.
这是我的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)
我该如何修复它?
在此上画一个空白,谷歌没有帮助.
想要制作这样的功能:
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)?
这似乎有点相关,但我仍然没有得到它.
我有一个json文件,可以使用vim进行查找和替换,但是我,在行尾忘记了。
...
"id":41483
"someName":"someValue",
...
Run Code Online (Sandbox Code Playgroud)
使用vim,如何将a附加,到每个匹配的行上\"id\"\:[0-9].*$?