澄清一下:我不是问在终端中使用 vim 时如何更改光标。我希望在 Bash 的 vi 模式中在输入模式和命令模式之间切换时更改光标:
set -o vi <CR> type some text <ESC> (the cursor changes shape/color)
i (cursor change back) etc...
Run Code Online (Sandbox Code Playgroud)
我找到了一个脚本,可以在zsh 中更改模式更改时光标的颜色,但我不想只为这个功能更改 shell。
在 Bash 命令行上在命令和插入模式之间切换时,有没有办法让光标改变形状,就像在 gvim 中一样(甚至只是颜色)?
我在 bash 提示符下播放,按 ESC 后跟 { ,然后,shell 显示所有文件以供完成,在 fileglob 字符串中。例如:如果我输入bash C后跟ESC+{,shell 将显示:bash CHECK{,1,2{,23{336{,66666},6},3{,6}}}自动完成所有以 C 开头的可能文件和目录,显示我创建的所有实验文件和目录。
什么是ESC + {以及我可以在哪里了解更多信息?
我在 CENTOS 和 Mac OSX 上用 bash 看到了这个。
我最近发现,如果我们按Ctrl+ X Ctrl+ E,bash 会在编辑器中打开当前命令(在$VISUAL或 中设置$EDITOR)并在编辑器关闭时执行它。但它似乎没有记录在man页面中。
目前,我的 .zshrc 中有以下内容:
bindkey '^[[A' up-line-or-search
bindkey '^[[B' down-line-or-search
Run Code Online (Sandbox Code Playgroud)
但是,这似乎只在出现空格字符之前与我当前输入的内容相匹配。例如,sudo ls /将匹配我历史记录中以 开头的每一行sudo,而我希望它只匹配与我的整个输入匹配的行。(即sudo ls /etc会匹配,但不会sudo cat /var/log/messages)
为了获得所需的行为,我需要改变什么?
这是我的整个 .zshrc 以防万一它是相关的:https : //gist.github.com/919566
我只是在输入以下内容:
mv foo/bar/poit/zoid/narf.txt
Run Code Online (Sandbox Code Playgroud)
突然意识到,该死的,我必须再次输入该参数的大部分内容
mv foo/bar/poit/zoid/narf.txt foo/bar/poit/zoid/troz.txt
Run Code Online (Sandbox Code Playgroud)
即使使用tabcompletion,也很痛苦。我知道我可以通过鼠标选择文本和中键来复制粘贴参数,但这还不够好。我想留在键盘上。
那么有没有办法使用键盘复制粘贴该行的当前参数?
前两个字符在我Tab用来完成时重复。在下面的屏幕截图中,cd重复了。

我试过 rxvt-unicdoe、xterm、终结者。所有这些终端模拟器都有这个问题。
Zsh 版本 5.0.2,配置文件on-my-zsh
当您重新使用和编辑以前的命令时,bash 的某些实例会更改命令历史记录,而其他实例显然不会。我一直在搜索和搜索,但找不到任何说明如何防止历史记录中的命令在重用和编辑时被修改的内容。
有这样的问题这一个,但似乎说如何应对历史正在编辑。我最近才遇到一个 bash 实例,它在您重用命令时会编辑历史记录 - 我以前使用过的所有 bash shell(据我所知)都被配置为在您重用时不会更改历史记录并编辑命令。(也许我在过去 15 年左右的时间里没有适当关注我的 shell 历史......)
所以这可能是最好的问题:我可以告诉 bash 永远不要修改历史记录 - 如果可以,如何修改?
我在 Bash 中最喜欢的技巧之一是在文本编辑器中打开命令提示符。我通过按 来执行此操作(在 vi 模式下)ESC v。当我这样做时,我的命令提示符中的任何内容现在都显示在我选择的 $EDITOR 中。然后我可以像编辑文档一样编辑命令,当我保存并退出该临时文件中的所有内容时,将执行该命令。
我很惊讶我的朋友都没有听说过这个技巧,所以我一直在寻找可以分享的文档。问题是我在上面找不到任何东西。此外,与此提示相关的搜索词非常常见,因此在谷歌搜索文档时无济于事。
有谁知道这种技术叫什么,所以我可以实际查找一下?
我不知道如何表达,但我经常发现自己输入这样的命令:
cp /etc/prog/dir1/myconfig.yml /etc/prog/dir1/myconfig.yml.bak
Run Code Online (Sandbox Code Playgroud)
我通常只输入两次路径(使用制表符完成),或者我将使用光标复制并粘贴路径。是否有一些 bashfoo 使输入更容易?
是否可以使用 zsh 的内置行编辑器 ( zle) 将输入提供给子进程?也就是说,我想运行zlewrap mycommandwherezlewrap是一个 zsh 函数,并且mycommand是任何只从 stdin 读取行的程序;zlewrap将有效地将 zle 的行编辑功能提供给mycommand. 这是在其模型上rlwrap执行此操作,但使用 readline 而不是用于行编辑的 zle。
line-editor ×10
bash ×7
zsh ×3
command-line ×2
clipboard ×1
oh-my-zsh ×1
readline ×1
shell ×1
vi ×1