Bagaimana saya bisa membuat .vimrc membaca dari file eksternal?

24

Saya ingin memodifikasi saya .vimrcuntuk membaca nilai variabel dari file eksternal. Bagaimana saya bisa melakukan ini?

Secara khusus, seorang teman dan saya berbagi repo git dengan .vimfile kami , tetapi ada beberapa perbedaan kecil dalam apa yang kami inginkan dalam konfigurasi kami. Jadi sebagian besar file adalah umum, tetapi kami menggunakan pernyataan if untuk menentukan apakah akan memuat bagian khusus pengguna, seperti ini:

let whoami = "user2"
if whoami == "user1"
...

Setelah memeriksa .vimrckontrol sumber di luar bersama kami , kami masing-masing harus mengubah let whoamitugas sehingga bagian kami sendiri akan dimuat. Sebagai gantinya, saya ingin menyimpan file terpisah, yang bisa berbeda untuk kita masing-masing, dan dari mana vim akan memuat nilai variabel itu.

Mungkin sudut lain dalam hal ini adalah: Apakah vim akan secara otomatis membaca semua file dalam .vimdirektori saya ? Jika demikian, kita masing-masing dapat meletakkan symlink di sana yang disebut username.vim, dan menautkannya ke file eksternal yang akan berbeda untuk kita masing-masing.

Nathan Long
sumber

Jawaban:

35

di file .vimrc utama Anda:

source otherVimScriptFilePath.vim

lalu letakkan pernyataan variabel Anda di file itu:

" otherVimScriptFilePath.vim
let whoami = "user1"
Robert S Ciaccio
sumber
2
FYI - Dalam situasi saya, sangat membantu untuk melakukan let whoami = ""tepat sebelum sourcebaris, sehingga jika gagal memuat file eksternal, variabel ada dan saya mendapatkan pesan kesalahan yang telah kami atur sebelumnya untuk variabel yang tidak disetel.
Nathan Long
2
@GorillaSandwich: Saya menggunakan ini untuk sumber vimrc saya di mesin windows saya karena windows tidak memiliki tautan simbolik. Saya memiliki folder SVN yang berisi ini dan semua file dot lainnya. Jadi saya hanya memiliki _vimrc yang sumber yang asli di folder svn.
Robert S Ciaccio
@GorillaSandwich: lihat jawaban saya untuk silent! sourcebagian ini
akira
6

Menggunakan coba / tangkap

Sejak mengajukan pertanyaan ini, saya membuat kasus penggunaan lain untuk memuat file eksternal: tweak khusus mesin.

Karena saya mungkin atau mungkin tidak perlu melakukan tweak pada mesin yang diberikan, saya menggunakan a try/catchuntuk memuat file eksternal; jika tidak ada file seperti itu, saya biarkan gagal diam-diam.

" If there are any machine-specific tweaks for Vim, load them from the following file.
try 
  source ~/.vimrc_machine_specific
catch
  " No such file? No problem; just ignore it.
endtry 
Nathan Long
sumber
5

Untuk menjawab pertanyaan terakhir, file-file yang masuk ~/.vimtidak secara otomatis dimuat, tetapi semua file yang ada ~/.vim/pluginadalah.

Heptite
sumber
2
dan beberapa tempat lain di bawah ~ / .vim ( after, autoload)
akira
4

Anda dapat meminta ~ / .vimrc memuat file lain menggunakan :sourceperintah. Sebagai contoh, Anda masing-masing dapat menempatkan perintah unik Anda di ~ / .myvimrc dan memuat perintah-perintah itu dengan

source ~/.myvimrc

Atau, ketika Anda berpikir, Anda masing-masing dapat memasukkan nama Anda di file seperti ini:

let user = "user1"

dan kemudian letakkan ini di ~ / .vimrc Anda:

source ~/.myvimrc
if user == "user1"
    " do this
elseif user == "user2"
    " do that
else
    echo "Invalid user"
endif

Daripada memasukkan nama Anda ke file, Anda bisa menggunakan $ USER seperti yang disarankan akira, atau mengatur usermenggunakan whoami, seperti ini:

let user = substitute(system('whoami'), '\n', '', '')

Fungsi pengganti () diperlukan karena output dari sistem () biasanya memiliki '\ n' ditempel di akhir.

garyjohn
sumber
whoamitidak bekerja di windows
akira
@ Akira: Benar, tetapi GorillaSandwich menggunakan Unix, bukan Windows. $ USER tidak bekerja dengan Windows, setidaknya, tidak Windows XP.
garyjohn
hanya mengatakan, di windows itu $ USERNAME. mainpoint adalah: whoamimemunculkan proses baru, ketika Anda membuka editor Anda harus cepat dan tidak (tidak berguna) melakukan pekerjaan beberapa kali lagi.
akira
2

nama pengguna yang masuk tersedia dalam variabel lingkungan $ USER. Anda dapat mengakses variabel itu dengan mudah:

:echo $USER

jadi, gunakan saja

execute "silent! source vimrc." . $USER

di vimrc Anda dan menempatkan pengaturan spesifik pengguna Anda ke

vimrc.joe

atau apa pun nama login Anda

akira
sumber
0

Saya tidak yakin seperti apa vimrc Anda sehingga ini mungkin tidak layak, tetapi jika ada bagian besar yang Anda dan teman Anda bagikan, Anda mungkin ingin memecahnya menjadi plugin terpisah. Anda dapat menambahkan file ke ~/.vim/plugindirektori untuk memuatnya saat startup. (Mereka dimuat dalam urutan abjad - gunakan :scriptnamesuntuk memeriksa.)

Dengan begitu Anda masing-masing dapat memiliki vimrc yang benar-benar unik, tetapi semua konfigurasi umum Anda ada dalam plugin. Jika Anda memecahnya secara logis, maka itu juga memudahkan untuk berbagi dengan orang lain.

idbrii
sumber