.Bashrc takma adları bir vim kabuk komutunda nasıl kullanılabilir hale getirilir? (:!…)


99

Mac'te bash kullanıyorum ve takma adlardan biri şöyle

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

Ancak ben yaptığımda

 :! gitlog

alırım

/bin/bash: gitlog: command not found 

.Gitconfig dosyama bunun gibi takma adlar ekleyebileceğimi biliyorum

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

Ancak tüm bash takma adlarımı .gitconfig'e eklemek istemiyorum. KURU değil.

Daha iyi bir çözüm var mı?


Takma adlar .gitconfig dosyasındaysa, bunları Bash takma adlarınızda tekrar etmeniz gerekmez ve git kullanan her şey, Bash yerine bunları bilir. Yani DRY takdire şayan, ancak aynı zamanda SPOT (Single Point Of Truth) var ve SPOT'unuzu doğru yere yerleştirmek, DRY olmanın da daha kolay olduğu anlamına geliyor.
Jonathan Leffler


Yanıtlar:


116

Bash, .bashrcetkileşimli olmadığı sürece sizin yükleme yapmaz .

:set shellcmdflag=-icGeçerli oturum için etkileşimli olarak ayarlamak için çalıştırın .

Ayarı kalıcı hale getirmek set shellcmdflag=-iciçin .vimrcdosyanızın sonuna set ekleyin .

Kabuğa !bir komut göndermeden önce bir bang ( ) kullanın . Örneğin: :! cd folder/.


6
.vimrc dosyanızı düzenleyin (vim ~ / .vimrc) ve orada bir satıra koyun (olmadan :)
skeept

9
Bu iyi ama sorun yaşıyorum - etkileşimli modu (i bayrağı) etkinleştirirsem, takma adlı kabuk komutlarımı sorunsuz bir şekilde çalıştırabilirim, ancak komutların yürütülmesi biter bitmez, istenmeyen olan vim çıkar. Örneğin, şunu yapmayı denedim:! Ls with shellcmdflag = -ic: [4] + Durduruldu vi ~ / .vimrc
ashgromnies

6
@Kevin: Etkileşimli bash ile viw'nin normal davranışını elde etmenin bir yolu yok mu? (komutu çalıştırın, herhangi bir tuşu bekleyin,
vim'e

7
Benim için, suspended (tty output)git commit
.vimrc'de

27
Vim'e her zaman etkileşimli bir kabuk kullanmasını söylemek sorun yaratabilir. Daha iyi bir çözüm, bash konfigürasyonunuzda neyin takma adlar oluşturduğunu ve bunları etkileşimli olmayan kabuklarda bile yüklü bir yere nasıl taşıyabileceğinizi bulmaktır. Örneğin, zshell yalnızca ~/.zshrcetkileşimli mermiler için yükler, ancak ~/.zshenvtüm mermiler için yüklenir , bu nedenle takma ad kurulumumu oraya taşıdım ve şimdi Vim içinden çalışıyor. Daha fazlası için man zsh(veya kabuğunuzun man sayfalarına) bakın.
Nathan Long

84

Bu sorunun daha önce "yanıtlanmış" olduğunu biliyorum, ancak yanıtla ilgili bir sorunum var. Kabuğun Vim'de etkileşimli olarak ayarlanması gerekmez . Etkileşimli bir kabuktan çıkmak zorunda kalmadan alternatif bir yanıt için bu ileti dizisine bakın.

Etkileşimli olmayan kabuk (varsayılan olarak), ancak bash takma adlarının genişletilmesini istiyorsanız, takma ad tanımlarınızı bir dosyaya koyun, örneğin .bash_aliases ve bu dosyada takma ad genişletmeyi açıkça etkinleştirin:

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

Sonra bunu .vimrc dosyanıza ekleyin, böylece vim içinden bir kabuk komutu çalıştırdığınız her seferde takma adlar dosyası okunur:

let $BASH_ENV = "~/.bash_aliases"

Bu çözüm "Jakob" tarafından önerildi. Orijinal için aşağıdaki bağlantıya bakın. Bunu Mac OS X 10.9'da test ettim ve kusursuz çalıştı!

vim - etkileşimli moddayken diğer adları tanımıyor musunuz?


7
Şimdiye kadarki en iyi çözüm. Şahsen, $BASH_ENVvar'ı .bashrc(herhangi bir özel etkileşimli mod kontrolünden önce) ayarlıyorum , böylece uygulamalar arasında tüm takma adlarımı kullanabilirim.
el.atomo

2
Muhtemelen bu sayfadaki en iyi çözüm budur çünkü değişikliklerin kapsamı Vim ile sınırlı olacaktır. Hatta bir kişi daha ileri gidebilir let $BASH_ENV="~/.vim/vim_bash"ve bu, :!Vim içindeki tüm çağrılar için kullanılabilir .
Teeeeeeeeeeeeeeeeeeeeeeeeeeeej

Bu maalesef macOS 10.15.2 varsayılan kabuk zsh'da çalışmaz.
Ben Quigley

8

Bash dot dosyalarınızın nasıl yapılandırıldığına bağlı olarak -i seçeneği yerine -l seçeneğini kullanmak isteyebileceğinizi unutmayın. Bu, kabuğu giriş kabuğu olarak başlatacaktır.


4
dreftymac şunu yazdı: "Bunun benim için çalışmasını sağlamak için, -lic seçeneğini yapmak gerekiyordu, aksi takdirde vim 'komut bulunamadı' döndürdü"
dreftymac

8

Bunun eski bir soru olabileceğini biliyorum, ancak yukarıdaki cevapların hiçbiri benim için arzu edildiği gibi işe yaramadı. Yani, Google'dan buraya gelenler ve (oh-my-) zsh kullanıcıları için:

Buna çözümüm, http://zsh.sourceforge.net/Intro/intro_3.html uyarınca .zshrc'yi .zshenv'ye kopyalamak kadar basitti :

".zshenv ', -f seçeneği ayarlanmadıkça, kabuğun tüm çağrılarında kaynaklanır. Komut arama yolunu ayarlamak için komutlar ve diğer önemli ortam değişkenleri içermelidir. ".zshenv 'çıktı üreten veya kabuğun bir tty'ye eklendiğini varsayan komutlar içermemelidir.

O yüzden $ cp ~/.zshrc ~/.zshenvyapacak.


Bunun için teşekkür ederim! Sadece bir dosyada kabuk takma adlarınız varsa bunları .zshenv biçiminde kaynaklayabileceğinizi not etmek istedim. . $HOME/.aliases
Şunun

2

-İ seçeneğini ayarlamak konusunda kendimi çok rahat hissetmiyorum, çünkü oldukça etkiye sahip ve kabuğu sık sık vim'den kullanıyorum. Bunun yerine ne yapardım:!bash -c ". ~/.alias; gitlog"


Bu en iyi çözüm gibi görünüyor, ancak benim için çalışmıyor. Hala komut bulunamadı diyor
still_dreaming_1
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.