Linux

如何解決 __vi_internal_vim_alias: command not found?

  • February 4, 2021

我最近在我的機器上升級到 Fedora 33 (Linux 5.9.16-200)。我正在執行 vim 增強版 8.2。當我鍵入sudo vim(或什sudo vi至)以編輯具有管理員權限的文件時,我收到以下錯誤。

sudo: __vi_internal_vim_alias: command not found

我不確定是什麼原因造成的。沒有 sudo,Vim 可以正常載入。你能告訴我如何解決這個問題嗎?謝謝你。


更新: 執行後which vim,我得到以下結果。

alias vim='__vi_internal_vim_alias'
   __vi_internal_vim_alias ()
   { 
       ( test -f /usr/bin/vim && exec /usr/bin/vim "$@";
       test -f /usr/bin/vi && exec /usr/bin/vi "$@" )
   }

我不確定這是做什麼的,在哪裡做的。也許這是 Fedora 33 的事情。鑑於上述資訊,您認為什麼是永久性修復?

正如@scy 提到的 unalias-ing vi 和 vim 是保留 sudo=“sudo " 別名的解決方案,因此它可以與其他別名一起使用。

擴展他/她對不同外殼的答案:

ZSH Shell:添加到.zshrc文件(您希望受更改影響的使用者)

  • 位於:

對於 Fedora 33 工作站(或伺服器或其他非原子作業系統發行版):/ home/$USER/ .zshrc

對於 Fedora CoreOS 33.x(或 Silverblue 33 或其他類似的原子作業系統發行版):/ var/home/$USER/ .zshrc

  • 以下程式碼行:
[ "$(type -w vi)" = 'vi: alias' ] && unalias vi
[ "$(type -w vim)" = 'vim: alias' ] && unalias vim

BASH Shell:添加到.bashrc文件(您希望受更改影響的使用者)

  • 位於相同的位置,分別對應於 $USER 的主目錄的 OS/Distro 特定位置(檢查 Fedora Workstation 的說明等…)
  • 以下程式碼:
[ "$(type -t vi)" = 'alias' ] && unalias vi
[ "$(type -t vim)" = 'alias' ] && unalias vim

PS關於ZSH Shell,此解決方案可以解決其他處於類似初始化情況的 CLI 應用程序的類似問題。例如:mc(午夜指揮官)。同時,mc在****BASH Shell中不會出現這樣的問題。

在 Fedora 33 上遇到同樣的問題。這似乎是由於sudo在我的環境中定義了一個別名:

$ alias sudo
alias sudo='\sudo '

因此,bash 會以某種方式解析作為參數傳遞給sudo別名的別名,如下例所示:

$ alias foo='echo foo'
$ sudo foo
foo

我本來希望有這個:

$ sudo foo
$ sudo: foo: command not found

刪除此別名對我有用。此別名由項目的/usr/local/bin/alias.sh一部分synth-shell( https://github.com/andresgongora/synth-shell )創建

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