Bagaimana saya bisa membuat alias shell yang tersedia saat keluar dari Vim?

11

Di saya .zshrc, saya menyatakan beberapa alias. Misalnya, which dbstartmenunjukkan isi alias itu.

Jika saya membuka vim dari shell itu, itu adalah proses anak. Di Vim, saya bisa menjalankan perintah shell dengan :! some_command. Jika saya lakukan :! echo $0untuk melihat shell apa yang Vim gunakan, ini menghasilkan '/ bin / zsh'. Namun, alias saya tidak tersedia di sana.

Bagaimana saya bisa membuat shell normal saya tersedia ketika saya keluar dari Vim?

Dua ide:

  • Entah bagaimana EXPORTalias dari shell asli, untuk proses anaknya vim, dan lagi ke proses anak shellnya
  • Konfigurasikan Vim untuk membaca saya .zshrcsaat membuat subkulitnya
Nathan Long
sumber
masukkan .zshrcprofil Anda ke. profil (yang tampaknya digunakan olehvim
Kiwy

Jawaban:

13

Pertanyaan lama, tetapi solusi terbersih untuk vim di zsh adalah menambahkan alias ke ~/.zshenv, file yang zsh muat untuk semua shell, login, interaktif, atau lainnya. Ini menghindari vim atau zsh mulai dengan bendera dan kemungkinan masalah dengan itu.

Ada penjelasan yang bagus tentang ~/.zshenvvs di ~/.zshrcsini: http://tanguy.ortolo.eu/blog/article25/shrc

Pada dasarnya, zsh selalu sumber ~/.zshenv. Sumber shell interaktif ~/.zshrc, dan sumber shell login ~/.zprofiledan ~/.zlogin. Dengan demikian, sumber shell login interaktif ~/.zshenv ~/.zprofile ~/.zlogin ~/.zlogin, dan shell nonlogin non-aktif seperti yang digunakan oleh vim untuk menjalankan perintah hanya sumber ~/.zshenv.

Kevin Lee
sumber
Ini bukan jawaban tautan saja, tetapi akan lebih baik jika Anda menguraikan penjelasan perbedaan dari tautan tersebut; dengan begitu semua orang bisa mendapat manfaat dari penjelasan di sini dan kami aman dari linkrot.
HalosGhost
1
Memperbarui jawaban saya dengan poin utama dari tautan.
Kevin Lee
Ini bekerja secara eksponensial lebih baik bagi saya daripada jawaban lainnya. Ketika saya menambahkan vim untuk memulai shell interaktif, ia segera ditangguhkan. Ketika saya menggunakan file .zshenv (yang sebelumnya saya tidak tahu ada), saya mendapatkan alias saya kembali!
Caleb
5

Sepertinya ini berfungsi untuk zsh:

  • Pastikan $ZDOTDIR=direktori tempat .zshrcitu berada. Misalnya,export ZDOTDIR=$HOME
  • Di .vimrc, set shell=zsh\ -iatau set shellcmdflag+=iuntuk efek yang sama.

Ini -ikarena, ketika dimulai dalam mode interaktif, zshell memuat $ZDOTDIR/.zshrc. Lihat man zshdan cari $ZDOTDIRdetailnya.

Nathan Long
sumber
1
Hmmm, ini menciptakan masalah aneh bagi saya: menyalin ke clipboard sistem seperti "+ysekarang menangguhkan Vim! superuser.com/questions/712245/…
Nathan Long
5
Vim saya menjadi ditangguhkan segera setelah saya membukanya.
Caleb
0

Saya percaya ketika Anda masuk vimdan Anda menggunakan :!some_commandshell apa pun yang didefinisikan oleh variabel lingkungan $SHELL.

Ini dapat dikonfigurasi, jadi Anda bisa mengubahnya dengan mengganti $SHELLperilaku di $HOME/.vimrcfile Anda zshsebagai gantinya.

:set shell
shell=/bin/bash
:set shell=zsh\ -i

Atau dalam .vimrcpenggunaan Anda 1 dari 2 baris ini

 set shell=/bin/bash\ -i
 set shell=/bin/zsh\ -i

Tolong Vim

Lihat :help shelldari dalam vimuntuk info lebih lanjut.

:!{cmd}                 Execute {cmd} with the shell.  See also the 'shell'
                        and 'shelltype' option.
                        Any '!' in {cmd} is replaced with the previous
                        external command (see also 'cpoptions').  But not when
                        there is a backslash before the '!', then that
                        backslash is removed.  Example: ":!ls" followed by
                        ":!echo ! \! \\!" executes "echo ls ! \!".
                        After the command has been executed, the timestamp of
                        the current file is checked timestamp.
slm
sumber
Tidak, seperti yang saya katakan: "Jika saya lakukan:! Echo $ 0 untuk melihat apa shell Vim gunakan, itu output '/ bin / zsh'"
Nathan Long
@NathanLong - tidak, saya pikir itu menyesatkan Anda, lihat pembaruan saya.
slm
@slm vim menarik nilai dari $SHELL. Jadi cangkang Anda /bin/bash. Jika shell saya /bin/zsh, itulah yang akan digunakan.
Patrick
0

Dengan mengatur shell=/usr/bin/zsh\ -ldalam .vimrcmemecahkan masalah saya

catatan:

Saya menggunakan: linux mint 17.1

murali kodali
sumber
menggunakan ubuntu 14.04 ini tidak berfungsi untuk saya
vilsbole