Vim:在 shell 脚本中将反引号转换为 $()​​ 符号

vat*_*sug 3 vim text-processing

假设我在 shell (bash) 脚本中有一些语句,例如

var=`cat file.txt`
echo "Date is: `date`"
Run Code Online (Sandbox Code Playgroud)

我想将反引号符号转换为$()符号,如:

var=$(cat file.txt)
echo "Date is: $(date)"
Run Code Online (Sandbox Code Playgroud)

如何在 Vim 中使用搜索/替换对整个文件执行此操作?

动机:https : //github.com/koalaman/shellcheck/wiki/SC2006

Val*_*yKr 5

你可以试试

:% s/`\([^`]*\)`/$(\1)/gc
Run Code Online (Sandbox Code Playgroud)

g使得全球(对线中的所有条目),c使vim询问用户关于每个更换。

但它不适用于嵌套反引号和多行代码。仅适用于成对的反引号。

您也可以退出vimsed用于此:

sed -n -i.backup 'N; ${s/`\([^`]*\)`/$(\1)/g; p; q}; b' filename
Run Code Online (Sandbox Code Playgroud)

它将与多行 backtrics 一起使用,但没有嵌套。