以可视模式选择多个文本点?

问题描述 投票:0回答:2

我正在在vim中对文件进行一些markdown编辑。我正在尝试通过代码突出显示等将其转换为markdown。

- Arithmetic operators:`+,−,*, /`
- Constants: `e`, `pi`
- Functions: (abs x), (max x y... ), (ceiling x) (expt x y), (exp x),
    (cos x), ...

[我想在下面使用可视模式仅选择处于括号中的事物(包括括号)(这样它们将被逗号分隔):

(abs x), (max x y... ), (ceiling x) (expt x y), (exp x), (cos x), ...

然后执行S`将每个文本都用反引号引起来。如何做到这一点而不选择每个,然后重复执行S`?

text vim markdown
2个回答
0
投票

使用全局命令(假设`S``来自Surround.vim):

:global/(/normal f(ysab`

(这会影响整个文件,一次只能更改一个。以@:重复)

带有宏:

qqf(ysab`q

@q,然后用@@重复

或替换为:

:substitute/([^)]\+)/`&`/g

0
投票

我如何不选择每个而又反复进行S`来做到这一点?

这实际上是在Vim中最有效的方法。在宏的帮助下:

交互式版本:

/(.\{-})<CR>
qqysa)`nnq
@q
@@
@@

...直到全部完成并环绕到开始的地方。

非交互式“随便做”版本:

:set nows<CR>
gg
/(.\{-})<CR>
qqqqqysa)`nn@qq@q

[您可能之后需要回到:set ns

当然,如果您知道没有嵌套的括号,那么最简单的答案就是使用:s,就像建议的其他答案一样。

© www.soinside.com 2019 - 2024. All rights reserved.