Vim

雙引號和單引號都失敗時設置別名

  • August 23, 2018

這個問題與為什麼別名的行為與直接執行 bash 命令不同?因為我已經嘗試過該解決方案,但沒有奏效。我用雙引號替換了所有單引號,反之亦然。該命令不起作用。

我正在嘗試實現一個別名,sys這將打開一個我跟踪系統更改的文件sys.md,附加一個日期,拉出該行,粘貼該行,將其替換-為 markdown h2 格式的 ‘s,打開一個新行,並為 markdown 項目符號格式插入一個-。從 vi.stackexchange.com 我收到了一些實現命令的幫助。有用:

nvim +'$pu_|r!date' +'norm yypVr-o ' ~/notes/sys.md

當我用雙引號替換單引號時, $pu_ 被評估並且我得到

zsh: event not found: date

所以單引號很重要。但是,當我實現別名時

alias sys="nvim +'$pu_|r!date' +'norm yypVr-o- ' ~/notes/sys.md"

別名失敗。nvimopens ,但日期附加到第二行而不是底部。顯然 $pu_ 被評估為來自 BASH 的變數。(nvim的語法檢查器甚至顯示它被評估。) 反轉雙打和單打以產生

alias sys='nvim +"$pu_|r!date" +"norm yypVr-o- " ~/notes/sys.md'

具有相同的行為。反引號,

alias sys=`nvim +"$pu_|r!date" +"norm yypVr-o- " ~/notes/sys.md`

凍結 bash 上source .zshrc。我不知道該怎麼做。任何幫助將不勝感激。

只需將其放入 bash 函式中(您可以將函式添加到.bashrc):

sys() {
   nvim +'$pu_|r!date' +'norm yypVr-o ' ~/notes/sys.md
}

然後您可以像使用別名一樣呼叫它。

如果您唯一的問題是了解如何single quote在單引號字元串中包含一個字元,那麼這裡是方法。採用:

'\''

對於single quote單引號字元串中的字元。

這會結束目前引用的字元串,然後插入一個帶引號的引號,然後開始一個新的帶引號的字元串。

順便說一句:由於這是一個常見問題,因此bosh提供了一種自動化此轉換的方法。您可以獲取schilytools並編譯它們,然後使用bosh. 如果你打電話:

set -o hashcmds
#b aliasname aliasreplacement

in 的值aliasreplacement是在 mode 中輸入的raw,如果您稍後呼叫:

alias aliasname

您會以正確引用的形式看到別名,如果您輸入

alias -R aliasname

raw您會在模式中看到別名。

引用自:https://unix.stackexchange.com/questions/464396