Jak zrobić.aliasy bashrc dostępne w Komendzie vim shell? (:!…)

Używam Basha na Macu i jeden z aliasów jest taki

alias gitlog='git --no-pager  log -n 20 --pretty=format:%h%x09%an%x09%ad%x09%s --date=short --no-merges'

Jednakże kiedy robię

 :! gitlog

I get

/bin/bash: gitlog: command not found 

Wiem, że mogę dodać takie aliasy w moim .gitconfig

[alias]
    co = checkout
    st = status
    ci = commit
    br = branch
    df = diff

Jednak nie chcę dodawać wszystkich aliasów Basha do .gitconfig. To nie jest suche.

Czy jest lepsze rozwiązanie?
 102
Author: Rob Bednark, 2011-01-10

5 answers

Bash nie ładuje twojego .bashrc, chyba że jest interaktywny.

Uruchom :set shellcmdflag=-ic, aby ustawić ją na interaktywną dla bieżącej sesji.

Aby ustawić ustawienie na stałe, dodaj set set shellcmdflag=-ic na końcu pliku .vimrc.

Użyj bang (!) przed wysłaniem polecenia do powłoki. Na przykład: :! cd folder/.

 117
Author: Josh Lee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2020-10-08 04:58:16

Wiem, że to pytanie było już wcześniej "odpowiedział" , Ale mam problem z odpowiedzią. Powłoka nie musi być ustawiona na interactive w Vimie. Zobacz ten wątek, aby uzyskać alternatywną odpowiedź bez konieczności opuszczania interaktywnej powłoki.

Jeśli chcesz nieinteraktywną powłokę (domyślnie), ale rozszerzenie aliasów Basha, umieść definicje aliasów w pliku, np.bash_aliases i jawnie włączają rozszerzenie aliasów w tym pliku:

shopt -s expand_aliases  
alias la='ls -la'

Następnie dodaj to do Twoje .vimrc więc plik aliasów jest faktycznie odczytywany za każdym razem, gdy uruchamiasz polecenie powłoki z Vima:

let $BASH_ENV = "~/.bash_aliases"
Rozwiązanie to zasugerował "Jakob". Zobacz poniższy link do oryginału. Testowałem to na Mac OS X 10.9 i działało bez zarzutu!

Vim -- nie rozpoznaje aliasów w trybie interaktywnym?

 87
Author: EmpathicSage,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:33

Zauważ, że w zależności od konfiguracji plików dotfiles bash możesz użyć opcji-l zamiast-i. Spowoduje to uruchomienie powłoki jako powłoki logowania.

 8
Author: user836003,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-03-05 02:50:25

Wiem, że może to być stare pytanie, jednak żadna z powyższych odpowiedzi nie zadziałała dla mnie zgodnie z życzeniem. Więc dla tych, którzy przybyli tu z googlowania i dla (O-my -) użytkowników zsh:

Moje rozwiązanie było tak proste jak kopiowanie .zshrc do .zshenv-jak na http://zsh.sourceforge.net/Intro/intro_3.html :

`.zshenv ' jest pozyskiwane dla wszystkich wywołań powłoki, chyba że jest ustawiona opcja-f. Powinien zawierać polecenia do ustawiania ścieżki wyszukiwania poleceń oraz inne ważne zmienne środowiskowe. `.zshenv ' nie powinien zawierać poleceń, które wytwarzają wyjście lub zakładają, że powłoka jest dołączona do tty.

Więc $ cp ~/.zshrc ~/.zshenv zrobi to.

 8
Author: Damian Borowski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-03 11:55:00

Nie czuję się zbyt komfortowo z ustawieniem opcji-i, ponieważ ma to dość duży wpływ i często używam powłoki z Vima. To co bym zamiast tego zrobił to coś w stylu :!bash -c ". ~/.alias; gitlog"

 2
Author: pfnuesel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-04-03 12:50:54