2013-10-10 41 views
24

我在Arch linux中使用oh-my-zsh加載了robbyrussell主題。當我嘗試完成製表符時,最終會在提示符後附加殘餘字符。如果我刪除自動完成的字符,則不會刪除剩餘字符。使用ZSH完成製表符時的補餘字符

例如,如果我輸入:

~ /etc 

然後選項卡,即其將

~ /e/etc/ 

具有低於選項的列表。即使我刪除/etc//e依然存在,我只能堅持:

~ /e 

我不能刪除/e。我必須執行一個命令來擺脫剩餘字符。

任何想法這裏發生了什麼?

+0

沒有進一步的信息,它可能是你的提示中缺少的字符或兩個。例如,閱讀[這個問題](http://stackoverflow.com/questions/7957435/zsh-auto-complete-screws-up-command-name/10644062#10644062)。你在使用最新的oh-my-zsh嗎?你有沒有修改過提示?我可以從GitHub下載oh-my-zsh進行測試,並準確表示您的設置? :) – simont

回答

0

原來這是一個語言環境問題。直到我刪除了某個配置文件並重新運行它,運行locale-gen才運行。

你的建議對於提示很好。謝謝。

+0

您可能對解決方案更具體,其他用戶(如我)可能無法理解您是如何解決問題的。 –

+2

我希望我可以更具體一些,但我最初從UTF8更改爲/etc/locale.gen中的拉丁文,當我將其更改回UTF8時,我開始出現問題。我刪除了很多文件,我找不到那篇文章告訴我哪個文件能幫我解決這個問題。最後,它將以/etc/locale.gen爲正確並以root身份運行locale-gen。我已經在同一個盒子上安裝了新的Arch,並且自此以後再也沒有這個問題。 –

17

正如西蒙建議的那樣,您使用的提示可能是使用不可打印的字符(如顏色轉義碼),但並不表示這些字符是不可打印的。所以當提示重新繪製時,終端認爲提示比實際更寬。

您指示zsh提示符中的字符序列使用%{%}分隔符具有零寬度。例如我的提示是:

%{%(?.%F{green}.%F{red})%}➜%{%f%} 

(?...)的是三元它設置提示的顏色和它已被標記以指示它是零寬度。以同樣的方式,%f重置顏色並且也被標記。

您可以通過更新PS1變量來測試您的提示更改,以便嘗試不同的安排並查看適合您的方法。

您可以用這種方式標記任意個字符,因此請小心使您的提示太短!

5

我有同樣的問題,所以我尋求一個解決方案,我都遇到過這樣的文章: https://wiki.archlinux.org/index.php/Locale

而且,正如有人建議,使一些區域的全系統,你只需要取消註釋所需語言環境/etc/locale.gen,例如,在我的情況:

en_US.UTF-8 UTF-8 

保存該文件上的變化後,對執行命令行(作爲root):

locale-gen 

重新啓動,它的工作原理!(至少對我來說)

48

看來,我與語言環境配置和非UTF8配置

在我的情況的問題修復是:

export LC_ALL="en_US.UTF-8" 

,並保持其永久添加行.zshrc :在Ubuntu文檔

echo "export LC_ALL=en_US.UTF-8" >> .zshrc 

更多信息https://help.ubuntu.com/community/Locale

+1

這應該是被接受的答案。負面的投票答案被接受是不幸的。 – Harry

+0

非常感謝。它幫助我很多。 – MOHRE

+0

在默認的'.zshrc'中取消註釋以下行似乎也對我有用: 'export LANG = en_US.UTF-8' – skube

0

我有一個類似的問題,雖然不是用oh-my-zsh,而是提示符;對我來說,解決方案是從我的配置中刪除:

ZLE_PROMPT_INDENT=0