![](/img/trans.png)
[英]How can I set the default bash/zsh mode to vi command mode instead of vi insert mode?
[英]How can I give special command (insert) to vi?
我记得通过使用输入命令“编程”它来用vi
做魔术,但我不记得具体是怎么做的。
我的特殊要求是:
vi
。vi
命令行中使用$VARIABLE
来替换命令中的某些内容。:wq
结束。我的记忆中,我发送的命令与 vi 中的完全一样,并且 ESC 键被 '[' 或附近的东西模拟。
我在脚本中使用了这个命令来编辑和更改文件。
我将看到 -c 选项,但现在我不能使用 $VARIABLE 并且插入是不可能的(使用“i”或“o”)。
#!/bin/sh
#
cp ../data/* .
# Retrieve filename.
MODNAME=$(pwd | awk -F'-' '{ print $2 }')
mv minimod.c $MODNAME.c
# Edit and change filename into the file (from mimimod to the content of $VARIABLE).
vi $MODENAME.c -c ":1,$s/minimod/$MODNAME/" -c ':wq!'
这个例子不起作用(似乎 $VARIABLE 在 -c 命令中不好)。
你能帮我记住记忆吗 ;) ?
非常感谢。 乔。
您不应将 vi 用于非交互式编辑。 已经有另一个工具,它被称为sed
或stream editor
。
你想做的是
sed -i 's/minimod/'$MODNAME'/g' $MODNAME.c
替换你的 vi 命令。
也许您正在寻找可以非交互运行的ex
命令:
ex $MODENAME.c <<< "1,\$s/minimod/$MODNAME/
wq!
"
或者,如果您使用未在此处实现字符串的旧外壳:
ex $MODENAME.c << EOF
1,\$s/minimod/$MODNAME/
wq!
EOF
或者,如果您也不想使用此处的文档:
echo "1,\$s/minimod/$MODNAME/" > cmds.txt
echo "wq!" >> cmds.txt
ex $MODENAME.c < cmds.txt
rm cmds.txt
标准输入中每行一个命令。 只要记住不要写领先的:
。 查看此页面以快速查看ex
命令。
当然,最好使用合适的工具来完成这项工作,这将是sed
,正如@IsaA 的回答所暗示的那样,或者awk
用于更复杂的命令。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.