![](/img/trans.png)
[英]Error when executing sudo rm commands in shell script (osascript) on MacOS
[英]Executing Vim commands in a shell script
我正在編寫一個運行命令行程序 (Gromacs) 的 Bash 腳本,保存結果,修改輸入文件,然后再次循環執行該過程。
我正在嘗試使用 Vim 來修改輸入文本文件,但是在打開我的輸入文件后,我一直無法找到一種方法來從 .sh 文件中執行內部 Vim 命令,例如:1234、w、x、dd 等在 Vim ("vim conf.gro") 中。
有沒有一種實用的方法可以從 shell 腳本執行 Vim 命令?
我認為vim -w/W and vim -s
就是你要找的。
您還可以使用vim -w test.keys input.file
記錄“Vim 操作/按鍵序列”。 您也可以編寫test.keys
。 例如,將其保存在文件中:
ggwxjddZZ
這將:
Move to the first line,
move to the next word,
delete one character,
move to the next line,
delete the line, and
save and quit.
使用此test.keys
文件,您可以執行以下操作:
vim -s test.keys myInput.file
您的“myInput.file”將通過上述操作進行處理並保存。 您可以在 shell 腳本中包含該行。
VimGolf正在使用相同的方式來保存用戶的解決方案。
您可以通過-c
標志編寫 Vim 腳本。
vim -c "set ff=dos" -c wq mine.mak
然而,這只能讓你走到這一步。
:normal
。 例如:norm dd
commands.vim
),然后:source
通過-S
。:h ex-cmd-index
所以你最終會得到這樣的結果。 在 commands.vim 中使用所有 Vim commands.vim
。
vim -S commands.vim mine.mak
您可能還想考慮使用sed
和/或awk
進行文本處理。
除非您真的需要特殊的 Vim 功能,否則最好使用非交互式工具,例如sed
、 awk
或 Perl/Python/Ruby/此處您最喜歡的腳本語言。
也就是說,您可以非交互式地使用 Vim:
對於非常簡單的文本處理(即使用 Vim 就像增強的 'sed' 或 'awk',也許只是受益於:substitute
命令中增強的正則表達式),使用Ex-mode 。
REM Windows
call vim -N -u NONE -n -es -S "commands.ex" "filespec"
注意:靜默批處理模式 ( :help -s-ex
) 會弄亂 Windows 控制台,因此您可能需要在 Vim 運行后執行cls
進行清理。
# Unix
vim -T dumb --noplugin -n -es -S "commands.ex" "filespec"
注意:如果"commands.ex"
文件不存在,Vim 將掛起等待輸入; 最好事先檢查它的存在! 或者,Vim 可以從標准輸入讀取命令。 如果使用-
參數,您還可以使用從 stdin 讀取的文本填充新緩沖區,並從 stderr 讀取命令。
對於涉及多個窗口的更高級處理和 Vim 的真正自動化(您可以與用戶交互或讓 Vim 運行以讓用戶接管),請使用:
vim -N -u NONE -n -c "set nomore" -S "commands.vim" "filespec"
以下是所用參數的摘要:
-T dumb Avoids errors in case the terminal detection goes wrong.
-N -u NONE Do not load vimrc and plugins, alternatively:
--noplugin Do not load plugins.
-n No swapfile.
-es Ex mode + silent batch mode -s-ex
Attention: Must be given in that order!
-S ... Source script.
-c 'set nomore' Suppress the more-prompt when the screen is filled
with messages or output to avoid blocking.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.