2013-11-20 37 views
1

所以我設置的命令行編輯器在bash爲vi與此:如何看哪個命令行編輯器設置

set -o vi 

,我可以看到它的一套「_ =」下:

WEBJAVA=/production/webjava 
_=vi 
cvsServer=usaddat01p 
ovMsgGrp=ETC_US 
ovObject=PROD_US 
(END) 

我將它設置爲Emacs和我看到它的「_ =」

set -o emacs 
WEBJAVA=/production/webjava 
_=emacs 
cvsServer=usaddat01p 
ovMsgGrp=ETC_US 
ovObject=PROD_US 
(END) 

但後來我檢查重新設置下沒有什麼「_ =」

WEBJAVA=/production/webjava 
_= 
cvsServer=usaddat01p 
ovMsgGrp=ETC_US 
ovObject=PROD_US 
(END) 

什麼是「_ =」符號的意思 - 以及如何檢查我目前使用的命令行編輯器。監守不管commnand編輯,我給自己定下了到,編輯值是六

EDITOR=vi 

有時,當我登錄到一臺機器,我想看看哪些命令行編輯器設置 - 有時VI設定,有時我需要設置它。我想知道如何檢查,看看哪些命令行編輯器調用

+0

命令行用於其命令的內容與外部程序使用的內容無關。 –

+0

我正在設置一些東西 - 設置 - 必須設置的地方。集合o在哪裏存儲它的值? – capser

+0

在shell的數據結構中。 –

回答

2

要查看哪些外殼選項設置,鍵入:

set -o 

這將顯示emacs on/offvi on/off

+0

非常感謝。 – capser

3

與此相關的點,set -o viset -o emacs不這樣做,他們似乎做什麼 - 他們定義鍵模式的bash本身的(特別是,就像@ mklement0提到的那樣,它們爲交互式會話指定命令行鍵綁定)。這與vi和emacs本身沒有任何關係,只是以它們命名,因爲相應的鍵綁定與這些文本編輯器使用的綁定類似。

如果你想切換實際文本編輯器,你需要改變環境變量。

export EDITOR=vi 
+1

+1來澄清概念(儘管最終,OP *正在尋找與行編輯界面有關的答案)。更具體地說:'set -o vi'和'set -o emacs'使用vi/emacs-LIKE密鑰綁定來配置用於在交互式bash shell中編輯命令行的密鑰綁定。 – mklement0

+0

@ mklement0:重新閱讀這個問題,我不能說我爲什麼如此確信OP是誤解了一些東西......不過,謝謝你的評論。我修改了更直接的答案,並從你的評論中加入了一些(希望你不介意)。 – voithos

+0

感謝您修改您的帖子。我認爲OP會誤將這兩個概念混爲一談,如通過用'文本編輯器'和'vi'標記他的文章所證明的那樣。這句話:「因爲不管我給自己設置了什麼命令編輯器,EDITOR的值是vi」;一貫使用「編輯器」,暗示一個外部程序。 – mklement0

2

_含義是:

_

(下劃線)在殼啓動時,設置爲用於調用所述殼或外殼腳本的絕對路徑名作爲傳遞正在執行在環境或參數列表中。隨後,展開後展開到上一個命令的最後一個參數。還設置爲用於調用每個執行的命令並放置在導出到該命令的環境中的完整路徑名。在檢查郵件時,該參數保存郵件文件的名稱。

(引用參考手冊)。這正是你在這裏看到的。

2

_參數只是上一個命令的最後一個參數。

$ : foo 
$ echo $_ 
foo 
$ : a b c d e 
$ echo $_ 
e 
1

對於後來者:該OP的問題來源於二個(大部分)無關概念,曾引起混亂並導致答案與任一種或另一種概念:

概念1:配置鍵綁定 for 編輯命令行 in interactive bash shell

概念2:指定由某些公用事業用於同步編輯給定的文件被調用,通常外部編輯器程序。

概念1通過set -o emacs/set -o vi最容易控制編輯與emacs- 命令行類似/VI - 鍵綁定(emacs的風格是默認設置) - 注意,這是這裏的操作字:既不emacs也不是vi實際上涉及。正如接受的答案所述,請檢查set -o的輸出以查看哪種風格有效,或使用bind -v | egrep ' editing| keymap'。有關行編輯界面的更多信息,請參閱man bash,部分READLINEman bind

概念2是通過導出特殊的$EDITOR變量併爲其分配一個必須同步執行的外部編輯器程序來控制的,以便在編輯器進程終止之前(在完成編輯任務時)阻止shell;例如:export EDITOR=vi