Jak mogę skonfigurować Bash, Zsh lub Tmux, aby uzupełniał ostatni pasujący identyfikator na ekranie ? Rozważ ten typowy scenariusz:
$ git fetch
remote: Counting objects: 16, done.
remote: Compressing objects: 100% (9/9), done.
remote: Total 9 (delta 4), reused 0 (delta 0)
Unpacking objects: 100% (9/9), done.
From /opt/git/thunder
* [new branch] issue540 -> origin/issue547314
e9204cf..4d42c3f v2.1 -> origin/v2.1
Jak mogę łatwo uzyskać Bash / Zsh / Tmux issue547
na CLI? Kiedy naciskam Tabpo tym, jak $ git checkout is
Git pomaga ukończyć issue
, ale muszę uzupełnić cyfry samodzielnie, ponieważ wszystkie poprzednie cyfry faktycznie pasują do istniejących gałęzi Git .
W VIM naciśnięcie Ctrl+ Pdla omnicomplete zakończy się jak w poprzednim meczu, więc w tym przypadku issue547314
faktycznie zostanie ukończone. Jak mogę uzyskać takie zachowanie w Bash, Zsh lub Tmux ?
Obecnie używam Bash 4.2 i Tmux 1.10 na Ubuntu Server (zwykle 12.04 LTS). W razie potrzeby mogę zaktualizować do najnowszej wersji Ubuntu Server LTS (14.04).
EDYCJA : Nie miałbym nic przeciwko rozwiązaniu, które używa Bash, Zsh lub Tmux, o ile nie jest trudne w użyciu. Tak Tablub Ctrl+ Plub inny taki skrót byłby w porządku, ale nie Alt+ Meta+ Super+ Shift+ א.
Odpowiedzi:
Myślę, że funkcja, której szuka OP, nazywa się dabbrev-expand w świecie Emacsa:
xterm
ma takżedabbrev-expand
funkcję, ale jest nieco mniej inteligentny niż odpowiednik Emacsa, ale jest dla mnie bardzo przydatny i jeden z powodów, dla których przerzuciłem sięxterm
. Wewnątrzxterm
okna można użyć niestandardowego przypisania klawiszy określonego w,~/.Xresources
aby wywołaćdabbrev-expand
dany ciąg. Na przykład mam następujący wpis w mojej~/.Xresources
(używamuxterm
, xterm w wersji Unicode):Wewnątrz
xterm
okna mogę użyćM-/
(ALT + /
) do wywołaniadabbrev-expand
.xterm
wyszuka wszystkie ciągi widoczne na ekranie, które zaczynają się od wpisanych liter. Przykład:Gdybym nacisnął
M-/
terazxterm
, rozwinąłbym sięa_v
doa_very_long_string
. Niestety, jak powiedziałem,xterm
nie jest tak inteligentny, a jegodabbrev-expand
funkcja będzie działać tylko na pełnych ciągach. Tak więc w twoim przypadkuis
zostałby rozwiniętyissue540
i nieissue547314
dlatego, żeissue547314
jest częściąorigin/issue547314
(pomyśl o tym, jak\b
w wyrażeniach regularnych, jest trochę podobny, chociaż większość silników wyrażeń regularnych przechwytuje oba wystąpieniaissue
ciągów\bissue.+\b
). Ale możesz pisać,or
a następnie naciskaćM-/
.xterm
najpierw rozwinie sięor
doorigin/v2.1
, nie tego chcemy, więc naciśnijM-/
ponownie ixterm
rozwinie się doorigin/issue547314
. Teraz, jeśli używasz Basha, możesz to zrobićM-b
,C-w
iC-e
usunąćorigin/
część. Reasumując,dabbrev-expand
wnętrzexterm
nie jest tak dobre jak w Emacsie (i chyba Vima), ale wciąż jest szybsze niż ręczne pisanie długich ciągów i mniej podatne na literówki. W większości przypadków rozwija się bezpośrednio do pożądanego ciągu bez potrzeby usuwania zbędnych części. Musisz się tylko do tego przyzwyczaić - spójrz na ciąg znaków, który chcesz mieć na kursorze, i zobacz, czy nie jest poprzedzony czymś innym, a jeśli jest to część poprzedzająca i usuń ją po rozwinięciu.Zauważ, że domyślnie
xterm
nie jest kompilowana zdabbrev-expand
funkcją i musisz ją wyraźnie włączyć. Jednak wersjaxterm
repozytoriów Ubuntu jest kompilowanadabbrev-expand
i można z niej korzystać od razu.źródło
xterm
iuxterm
nie są skompilowane dla dabbrev-expand, nie mogłem znaleźć żadnej wzmianki o tej funkcji w-help
. Jak mogę zobaczyć flagi kompilacji (jak w przypadkuvim --version
)? Należy zauważyć, że próbowałem również linię config w~/.Xresources
takMeta <KeyPress> /: dabbrev-expand() \n\
jak znaleźć tutaj , ale to nie pomogło, albo.xrdb -merge .Xresources
w xterm.zsh
to, że ma tę funkcję.Bash jako podobny obiekt o nazwie uzupełnianie bash. Możesz z niego skorzystać, naciskając Tabklawisz podczas wprowadzania argumentów do poleceń podczas ich wpisywania.
Przykład
Jeśli zacznę od wpisania,
ls
a następnie Tabdwukrotnego naciśnięcia , Bash dostarczy listę pasujących plików (i przełączników wiersza poleceń) do dowolnego polecenia, którego próbujesz użyć:A oto przykład z przełącznikami:
Ustawiać?
Moja instalacja zawierała już regułę dla
git
:Instalacja tego pliku została wykonana podczas instalacji
git
pakietu. Jestem na Fedorze 19, ale inne dystrybucje też powinny to robić.Patrząc na plik reguł, wyjaśnia, że ułatwi automatyczne uzupełnianie w następujących sytuacjach:
To powinno dla ciebie „po prostu działać”.
źródło
Możesz zrobić coś takiego za pomocą extrakto :
prefix + tab
aby rozpocząć ekstraktotab
aby wstawić go do bieżącego panelu,enter
aby skopiować go do schowka,ctrl-o
aby otworzyć ścieżkę / adres URL lubctrl-e
edytować za pomocą$EDITOR
źródło