Jak zatrzymać zsh przed zjedzeniem miejsca przed symbolem fajki?

18

Kiedy wpisuję spację, po której następuje symbol potoku '|'w wierszu polecenia zsh, zsh zjada spację, umieszczając symbol potoku bezpośrednio przed poprzednim słowem. Jak temu zapobiec? Nie jestem pewien co do możliwych konwencji stylistycznych, ale lubię spację po obu stronach symbolu potoku dla czytelności. Używam och-my-zsh praktycznie od razu po wyjęciu z pudełka.

Rozwiązanie

Na podstawie poniższej odpowiedzi mpy zastosowałem następujące rozwiązanie:

Domyślnie ZLE_REMOVE_SUFFIX_CHARS jest niezdefiniowany w zsh / ohmyzsh. Gdy jest niezdefiniowany, działa tak, jakby był:

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&|'

Dodałem następującą definicję do mojego ~ / .zshrc:

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&'

(wszystkie oprócz fajki) i presto, idealnie! problem zniknął.

skąpy
źródło
1
najpierw spróbuj to zrobić za pomocą zsh -f(aby pominąć ładowanie konfiguracji). Zauważysz, że zsh już tego nie zrobi. Następnie będziesz musiał wykopać (najprawdopodobniej) do oh-my-zsh, aby dowiedzieć się, jak to powoduje ;-)
Francisco

Odpowiedzi:

18

Podejrzewam, że masz na myśli, że po TABwypełnieniu polecenia / nazwy pliku spacja jest dodawana automatycznie, ale po naciśnięciu |ponownie znika. W przeciwnym razie nie mogę odtworzyć tego efektu.

Jednak w takim przypadku rozwiązanie powinno być tak proste, jak

ZLE_REMOVE_SUFFIX_CHARS=""

Wyjaśnienie jest dość trudne, więc po prostu cytuję man zshparam

ZLE_REMOVE_SUFFIX_CHARS/ ZLE_SPACE_SUFFIX_CHARS Te parametry są używane przez edytor linii. W pewnych okolicznościach sufiksy (zwykle spacja lub ukośnik) dodane przez system uzupełniania zostaną automatycznie usunięte, albo dlatego, że następne polecenie edycji nie było znakiem do wstawienia, albo dlatego, że znak został oznaczony jako wymagający usunięcia sufiksu.

Te zmienne mogą zawierać zestawy znaków, które spowodują usunięcie sufiksu. Jeśli ZLE_REMOVE_SUFFIX_CHARS jest ustawiony, znaki te spowodują usunięcie sufiksu; jeśli ZLE_SPACE_SUFFIX_CHARSjest ustawiony, znaki te spowodują usunięcie przyrostka i zastąpienie go spacją.

Jeśli ZLE_REMOVE_SUFFIX_CHARSnie jest ustawiony, domyślne zachowanie jest równoważne z:

ZLE_REMOVE_SUFFIX_CHARS=$' \t\n;&|'

Jeśli ZLE_REMOVE_SUFFIX_CHARSjest ustawiony, ale jest pusty, żadne znaki nie zachowują się tak. ZLE_SPACE_SUFFIX_CHARS ma pierwszeństwo, aby:

ZLE_SPACE_SUFFIX_CHARS=$'&|'

powoduje znaki &i |usunięcie sufiksu, ale zastąpienie go spacją.

Aby zilustrować różnicę, załóżmy, że opcja AUTO_REMOVE_SLASHjest aktywna, a katalog DIR został właśnie uzupełniony, wraz z załącznikiem /, po którym następuje wpisanie użytkownika &. Domyślny wynik to DIR&. Z ZLE_REMOVE_SUFFIX_CHARSustawieniem, ale bez uwzględnienia &wyniku jest DIR/&. Z ZLE_SPACE_SUFFIX_CHARSzestawem do włączenia &wynik jest DIR &.

Należy pamiętać, że niektóre uzupełnienia mogą zapewnić własne zachowanie polegające na usuwaniu sufiksów lub zamianie, które zastępuje opisane tutaj wartości.

mpy
źródło
Tak, nie zauważyłem, że dopóki nie wspomniał o tym, ale zdarza się dopiero po zakończeniu języczka, dzięki za odpowiedź, to daje mi to czego potrzebuję :)
scanny