好的,所以我终于做出了巨大的改变。在我的 .zshenv 中,我更改了我的 EDITOR:
export EDITOR=vim
Run Code Online (Sandbox Code Playgroud)
我有几个问题非常小,以至于我不想为他们开始单独的问题。他们来了:
如何让 zsh 像 vim 一样区分插入模式和命令模式?最好将光标从下划线更改为像 vim 中的块,但在底部显示文本也可以。
我如何让它表现得更像 vim?例如,我宁愿它默认处于命令模式,而不是在一个命令后退出。
aki*_*ira 27
1. )(见http://zshwiki.org/home/examples/zlewidgets和http://pthree.org/2009/03/28/add-vim-editing-mode-to-your-zsh-prompt/) :
函数 zle-line-init zle-keymap-select { RPS1="${${KEYMAP/vicmd/-- NORMAL --}/(main|viins)/-- INSERT --}" RPS2=$RPS1 zle 重置提示 } zle -N zle-line-init zle -N zle-keymap-select
在哪里:
“RPS”代表“正确提示字符串”,定义了出现在终端右侧的提示,${variable/pattern/replacement}语法是“参数扩展”的语法,参见:http://mywiki .wooledge.org/BashSheet#Parameter_Operations。
'zle -N' 导致用户可定义的小部件 'zle-line-init' 和 'zle-keymap-select' 被绑定(到同名的 shell 函数),以便在行编辑器初始化时调用它们并分别更改了键盘映射,请参阅:http: //zsh.sourceforge.net/Doc/Release/Zsh-Line-Editor.html#SEC125。
2. ) 我怀疑你必须写另一个 zsh-widget 来做到这一点,从第一个问题的两个链接中的第一个中得到启发。
Paw*_*cki 23
akira的解决方案在使用多行提示时存在以下问题:从ins到cmd模式时,提示重绘导致从之前的输出中删除了几行(并且新提示显示在上面几行)。多少行取决于您的提示中有多少行。
处理这个问题的方法是使用zle-line-finish
,而不使用zle reset-prompt
那里。一个例子:
# perform parameter expansion/command substitution in prompt
setopt PROMPT_SUBST
vim_ins_mode="[INS]"
vim_cmd_mode="[CMD]"
vim_mode=$vim_ins_mode
function zle-keymap-select {
vim_mode="${${KEYMAP/vicmd/${vim_cmd_mode}}/(main|viins)/${vim_ins_mode}}"
zle reset-prompt
}
zle -N zle-keymap-select
function zle-line-finish {
vim_mode=$vim_ins_mode
}
zle -N zle-line-finish
Run Code Online (Sandbox Code Playgroud)
然后您可以将其添加到您的右侧提示中,例如:
RPROMPT='${vim_mode}'
Run Code Online (Sandbox Code Playgroud)
这是直接来自我的博客文章:
小智 5
zle-line-init() { zle -K vicmd; }
zle -N zle-line-init
Run Code Online (Sandbox Code Playgroud)
这两行确保它以命令模式启动
归档时间: |
|
查看次数: |
18090 次 |
最近记录: |