2013-11-20 32 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