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

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

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

var=`cat file.txt`
echo "Date is: `date`"

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

var=$(cat file.txt)
echo "Date is: $(date)"

我如何在 Vim 中通过搜索/替换来对整个文件执行此操作?

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

答案1

你可以试试

:% s/`\([^`]*\)`/$(\1)/gc

g使其全局化(对于行中的所有条目),c使vim询问用户每次替换。

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

您还可以退出vim并用于sed此目的:

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

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

相关内容