使用 set -o vi 的优点

Cha*_*ani 67 bash vim vi

我见过很多开发者使用这个命令来设置 vi 的选项。我一直不明白这个的真正用途?

使用 bash 命令时,切换到 vi 有什么帮助?

jas*_*yan 67

通过将您的 readline 编辑设置为 emacs(默认)或 vi ( set -o vi),您实质上是在跨 shell 和您选择的编辑器1标准化您的编辑命令。

因此,如果您想在 shell 中编辑命令,请使用与在文本编辑器中相同的命令2。这意味着只需要记住一种命令语法(如果这还不够优势)可能会使您在两种环境中的编辑速度更快,更不容易出错......

您可以通过从 shell 历史记录中提取任何命令,点击Escape进入命令模式,然后点击v,在 vi 模式下进一步利用这种关系,这将打开您的 $EDITOR 并加载命令,以便使用 vim 的全部功能进行更复杂的编辑。一旦您完成了对命令的满意编辑,:wq该命令就会在您的 shell 中执行。


1. 当然,假设您使用 Emacs 或 Vi/m 作为编辑器。
2. 或者,更准确地说,是其中的一个子集……

  • Esc-v 技巧是大多数人不知道的 `set -o vi` 的最佳功能之一。如果您想使用不同的参数多次发出相同的命令(作为多个命令行命令),则尤其如此。 (4认同)
  • Esc-v 技巧并不是`set -o vi` 特有的优势。在 `set -o EMACS` 的默认设置下,Cx,C​​e 将打开一个 emacs 窗口(或 `$EDITOR`,如果设置了),您可以在其中编辑命令,然后再运行它。 (3认同)
  • 我得到了圣杯:)... (2认同)
  • 使用 Esc-v 时,您必须小心,因为执行 `:q!` 也会执行该命令。您不希望在命令行上使用“rm -rf珍贵目录”并意外地按Esc-v,然后条件反射地按“:q!”,以为您是安全的。我将 vim 设置为在执行 Esc-v 时立即在行首添加“#”,以保护自己免受这种可能性的影响。 (2认同)

Kaz*_*Kaz 11

如果您使用的是像 ConnectBot for Android 这样的移动 SSH 客户端,Vi 模式是一个巨大的可用性改进。

这是由于减少了对修饰键的依赖。

Vim 在智能手机或平板电脑上使用虚拟键盘比……其他任何东西都更容易使用,包括 Android UI 中内置的本机编辑方法。具有讽刺意味的是,在 SSH 会话中使用 Vim 编辑 C 源代码比为此目的使用平台自己的编辑小部件编辑即时消息更容易。

Shell vi 模式带来了类似的好处。


Mic*_*ant 6

它允许您使用 vi 模式和操作在命令行中编辑内容。

一个例子将有助于使其更加清晰:

你输入 cp tmp/some_other_long_directory/file1.xt /tmp2/some_other_xtra_long_dir/

但你得到一个错误-你应该键入file1.txtfile1.xt

如果没有设置此选项,则按向上箭头,然后按向左箭头,然后重复... 35 次,直到到达.xt,然后键入额外的t. 总击键次数:37 次

有了这个选项设置你可以(例如)按向上箭头一次,然后逃命命令模式,0去行的开始,然后/xt[return]才能到xt,然后你可以输入i为插入模式并键入缺少吨。这在某些方面可能看起来非常复杂,但是如果您是 vim 用户,这些命令已经非常熟悉了。总击键次数:9

  • 当我们打高尔夫球时:Emacs 模式:`Up`、`Ctrl+Alt+]`、`.`、`Right`、`t`、`Enter` = 8。Vi 模式:`Up`、`F`、 `.`、`a`、`t`、`Enter` = 7。:) (2认同)

Arc*_*ege 5

我不确定是否有直接优势。我已经是vi20 多年的用户了。我也是screen更长时间的用户,以及其他使用vi密钥的程序。我更喜欢在 bash 中设置“vi”模式是很自然的。但我的工作中也有数百台服务器,大多数都设置为默认的“emacs”模式。所以我需要同时使用这两种模式。但这实际上只是一个偏好问题。