小编kin*_*ine的帖子

是否可以对不同的命令使用不同的 zsh 菜单选择行为?

我正在使用 中的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),而所有其他命令都需要按两次?

terminal zsh autocomplete

13
推荐指数
1
解决办法
1394
查看次数

UTF-8 语言环境可移植性(和 ssh)

我花了很多时间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)

linux bsd shell locale utf-8

9
推荐指数
1
解决办法
5803
查看次数

如何使用制表符对文本进行列化(在 vim 中或在 shell 中)

我经常需要手动操作制表符分隔的文本以进行数据输入和其他目的。当我这样做时,如果文本正确对齐到列中会有所帮助。例如(假设有 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,但老实说,我宁愿手工将它列成列而不是把它弄乱......

vim shell text-editors

8
推荐指数
2
解决办法
8153
查看次数

标签 统计

shell ×2

autocomplete ×1

bsd ×1

linux ×1

locale ×1

terminal ×1

text-editors ×1

utf-8 ×1

vim ×1

zsh ×1