如何查看设置的命令行编辑器

时间:2013-11-20 21:31:45

标签: bash command-line text-editor vi

所以我在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)

“_ =”符号是什么意思 - 我如何检查我当前配置的命令行编辑器。因为无论我将自己设置为什么共同编辑器,EDITOR值都是vi

EDITOR=vi

有时当我登录到机器时,我想查看哪个命令行编辑器设置 - 有时候设置了vi,有时我需要设置它。我想知道如何检查以查看调用哪个命令行编辑器

5 个答案:

答案 0 :(得分:3)

在一个相关的点上,set -o viset -o emacs不会做他们似乎做的事情 - 他们定义了bash本身的关键模式 (具体来说,@ mklement0提到,它们为交互式会话指定命令行键绑定)。这与vi和emacs本身没有任何关系,它只是以它们命名,因为相应的键绑定类似于那些文本编辑器使用的绑定。

如果要切换实际文本编辑器,则需要更改环境变量。

export EDITOR=vi

答案 1 :(得分:2)

_的含义是:

  

_

     

(下划线。)在shell启动时,设置为用于调用在环境或参数列表中传递的正在执行的shell或shell脚本的绝对路径名。随后,在扩展后扩展到上一个命令的最后一个参数。还设置为用于调用已执行并放置在导出到该命令的环境中的每个命令的完整路径名。检查邮件时,此参数保存邮件文件的名称。

(引自参考手册)。这正是你在这里看到的。

答案 2 :(得分:2)

_参数只是上一个命令的最后一个参数。

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

答案 3 :(得分:2)

要查看设置了哪些shell选项,请键入:

set -o

这将显示emacs on/offvi on/off

答案 4 :(得分:1)

对于后来者:OP的问题混淆了两个(大多数)不相关的概念,这引起了混淆并导致了与其中一个或另一个概念相关的答案:

概念1 :在交互式bash shell 中为编辑命令行配置键绑定。< / p>

概念2 :指定某些实用程序调用的外部编辑器程序,通常用于同步编辑给定文件。

概念1最容易通过set -o emacs / set -o vi进行控制,以允许使用emacs- / / 键来编辑命令行绑定(emacs样式是默认值) - 请注意 -like 是这里的操作词:实际上并不涉及emacs或vi 。如接受的答案所述,检查set -o的输出以查看哪种样式有效,或使用bind -v | egrep ' editing| keymap'。有关行编辑界面的详细信息,请参阅man bashREADLINE部分和man bind部分。

通过导出特殊$EDITOR变量并为其分配必须同步执行的外部编辑器程序来控制概念2,以便在编辑器进程终止(完成编辑任务)之前阻止shell;例如:export EDITOR=vi