我vim基本上满足了我所有的编辑需求,所以我决定再次为我的 shell 尝试 vi-mode(目前在 OS X 上使用 ZSH w/ oh-my-zsh),但我发现自己尝试(但失败)经常使用Ctrl-R。什么是等效的键绑定?供将来参考,我如何自己解决这个问题?我很确定我可以bind -P在 bash 中使用。
当您在 bash 默认模式下按Ctrl+ 时L,屏幕会被清除。但是当我运行set -o vi并按Ctrl+L键时会打印 ( ^L)。有什么办法可以保持这种行为吗?
在 vim 编辑器中,我想使用 vim 命令模式用两个换行符 (\n\n) 替换换行符 (\n)。
输入文件内容:
This is my first line.
This is second line.
Run Code Online (Sandbox Code Playgroud)
我试过的命令:
:%s/\n/\n\n/g
Run Code Online (Sandbox Code Playgroud)
它用不需要的字符替换字符串作为
This is my first line.^@^@This is second line.^@^@
Run Code Online (Sandbox Code Playgroud)
然后我尝试了以下命令
:%s/\n/\r\r/g
Run Code Online (Sandbox Code Playgroud)
它工作正常。你能解释为什么它可以用第二个命令正常工作吗?
这个问题直接来自答案。在这种情况下,我特别无法理解以下部分:
在这方面,它的行为比 bash(readline)/ksh/zsh emacs 模式更接近 emacs,但与终端驱动程序嵌入式行编辑器(在规范模式下)不同,在那里Ctrl-W删除了前一个词(werase,也在 vi )。
这里我们谈论的是 shell 而不是编辑器,这是两个完全不同的程序。说 shell 处于某种编辑器模式是什么意思?
PS:您可以在我了解 shell 是什么以及如何使用 vim 进行基本编辑的前提下回答您的问题。
是否可以配置 bash vi 模式,使其最初处于命令模式而不是插入模式?我发现我必须按Esc太多。似乎可以在 zsh 中指定这一点,但我还没有找到在 bash/readline 中执行此操作的方法。
我将如何映射jj到Esczsh?
我正在尝试重新创建我在 vim 中设置的键映射,我已经jj映射到ESC该映射,以便每当我双击时j,它都会<Esc>向 vim发送 an - 允许我更方便地进入正常模式。
我已经试过了bindkey 'jj' ^[,我准备试一下bindkey 'jj' ^[[,但我怀疑它会起作用。我还检查了 zsh 在正常模式下提供的命令列表,但没有看到任何包含normal或escape.
注意我的文件中
的^[字符~/.zshrc是实际的硬编码转义符;不仅仅是字符^和[。
我已经在我的~/.inputrcwith 中启用了模式提示指示器set show-mode-in-prompt on。按下后切换到正常模式时指示灯有半秒左右的ESC延迟,进入插入模式时指示灯没有延迟。我知道在 Vim 内部以及在打开 Vi 模式的情况下使用 Tmux 或 Screen 时遇到了类似的问题(参见例如ESC 键由于其 Alt+ 行为而导致终端出现小延迟)。每个延迟都有解决方案,但我还没有找到解决特定情况下延迟的方法(Bash + urxvt)。有任何想法吗?
当我通过set -o vi突然设置在 bash 中打开 vi 模式时,选项卡完成被破坏,并插入了一个文字选项卡。如何解决这个问题?
我正在使用zsh中vi-mode。
当我进入正常模式ESC然后回到插入模式(例如使用i,a或s)时,行编辑器会“保护”字符前面的行部分,当我重新进入插入模式时.
我通过重新绑定它为退格字符修复了它
bindkey "^?" backward-delete-char
Run Code Online (Sandbox Code Playgroud)
但是仍然有其他类似的绑定^W不能开箱即用(可能是因为它们绑定到vi-*)。
如果我理解正确,这种行为对于vi.
有没有办法让zle行为像vim而不必重新绑定这么多键?