我正在使用 中的menu select行为zsh,它调用光标下方的菜单,您可以在其中看到各种可能性。我为此设置的 .zshrc 选项是
zstyle ':completion:*' menu select=2
Run Code Online (Sandbox Code Playgroud)
默认情况下,按Return选择此菜单中的可能性只会完成单词——它实际上并不发送命令。例如,我可能会得到这样的菜单
~ % cd de<TAB>
completing directory:
[Desktop/] Development/
Run Code Online (Sandbox Code Playgroud)
按Return这里会导致
~ % cd Desktop/
Run Code Online (Sandbox Code Playgroud)
然后,我必须按Return一个第二时间实际发送命令。
我可以修改此行为以使其同时按下Return两个选择完成并通过执行此操作发送命令
bindkey -M menuselect '^M' .accept-line
Run Code Online (Sandbox Code Playgroud)
但是,这有一个问题:有时我需要在不发送命令的情况下完成文件或目录。例如,我可能需要这样做ln -s Desktop Desktop2- 使用这种bindkey行为,尝试完成桌面将导致ln -s Desktop/作为命令发送,显然我不希望那样。
我知道只需按空格键就可以让我继续执行命令,但现在已成为一种习惯。
鉴于此,有没有办法让只有某些命令让您按Return一次(例如cd),而所有其他命令都需要按两次?
我花了很多时间ssh在各种机器上进行研究,所有机器都不同(有些是嵌入式的,有些运行 Linux,有些运行 BSD,等等)。然而,在我自己的本地机器上,我使用 OS X,它当然有一个基于 BSD 的用户空间。我在这些机器上的语言环境设置为 en_GB.UTF-8,这是可用选项之一:
% echo `sw_vers`
ProductName: Mac OS X ProductVersion: 10.8.2 BuildVersion: 12C60
% locale -a | grep -i 'en_gb.utf'
en_GB.UTF-8
Run Code Online (Sandbox Code Playgroud)
我使用的几个更强大的 Linux 系统似乎有一个等效的选项,但我注意到在 Linux 上名称略有不同:
% lsb_release -d
Description: Debian GNU/Linux 6.0.3 (squeeze)
% locale -a | grep -i 'en_gb.utf'
en_GB.utf8
Run Code Online (Sandbox Code Playgroud)
这让我想知道:当我ssh从我的 Mac 进入一台 Linux 机器时,它LC_*使用“UTF-8”后缀转发我的所有变量,那台 Linux 机器甚至理解它的要求吗?或者它只是回退到其他地方?
编辑:这是我所指的一个例子:
% ssh -v odin
...
debug1: Entering interactive session.
debug1: Sending environment.
debug1: Sending env LC_ALL = …Run Code Online (Sandbox Code Playgroud) 我经常需要手动操作制表符分隔的文本以进行数据输入和其他目的。当我这样做时,如果文本正确对齐到列中会有所帮助。例如(假设有 4 个空格的制表符):
# original format
abcdefghijklmnop field2
abcdefgh field2
abcdefghijkl field2
# ideal format
abcdefghijklmnop field2
abcdefgh field2
abcdefghijkl field2
Run Code Online (Sandbox Code Playgroud)
我非常熟悉使用该column实用程序以这种方式对文本进行列化,但问题在于它使用空格来对齐列,而我特别需要制表符。这一要求似乎也排除了 Tabularize 插件。
有什么方法可以vim在 shell内或在 shell 中专门使用选项卡对文本进行列化?看起来我可以用groff/做到这一点tbl,但老实说,我宁愿手工将它列成列而不是把它弄乱......
shell ×2
autocomplete ×1
bsd ×1
linux ×1
locale ×1
terminal ×1
text-editors ×1
utf-8 ×1
vim ×1
zsh ×1