|

楼主 |
发表于 2006-8-29 23:14:09
|
显示全部楼层
恩,留着,也许以后有用。
哎!今天花了一天,总算搞好了 zsh 和 TRAMP 冲突的问题,找 TRAMP 的毛病、 sshd 的毛病、Emacs 的毛病和 zsh 的毛病,最后终于找到问题所在了:
zsh 有额外的默认打开的功能,让 TRAMP 不能正确处理。额外的功能由 prompt_cr 和 prompt_sp 两个变量控制。 prompt_cr 打开的话,在输出提示符之前会输出回车符,这是多行编辑所需要的,但是这样有时候如果上一个命令的输出最后一行没有换行的话就会被“吃掉”,例如:- $ setopt prompt_cr
- $ setopt No_prompt_sp
- $ echo -n "foobar"
- $
复制代码 看到 "foobar" 已经被吃掉了,但是如果同时打开了 prompt_sp 变量,则会在未换行的那一行末尾打印一个反色粗体的 % (或者是 #)并打印适量的空格让提示符延伸到下一行。这个功能本来是不错的,但是在 Emacs 里面用 M-x shell 得到的 shell 里面不好用,而且多余的 % (或者 #) 会影响 TRAMP 识别提示符,造成 TRAMP 不能正常工作。要解决这个问题的办法也是比较简单的,因为 Emacs 和 TRAMP 使用的 TERM 变量都是 dumb ,只要在 TERM 是 dumb 的时候关掉这两个选项就好了,在 ~/.zshrc 里面加入:- # for Emacs and TRAMP to handle prompt properly
- if "$TERM" == "dumb" then
- setopt No_prompt_cr
- setopt No_prompt_sp
- fi
复制代码
还没有了解他的命令行编辑的功能,不知道那个“多行编辑”到底是指什么,要不然索性全部关闭了。试用了几天默认设置的话,行编辑器有一点不爽,比如输入 /tmp/foo/bar 然后按 Alt+Backspace ,就全部删除了,应该是一个词一个词地删除比较人性化一点,难不成 /tmp/foo/bar 被看成一个词了? |
|