Bagaimana saya memperkenalkan "mode cahaya", di mana tidak semua plugin dimuat?


8

Konfigurasi Vim saya mencakup plugin yang mencoba menangani proyek saat ini, tag bangunan, dll . Ini cukup berguna untuk pemrograman harian saya di Vim, tetapi hanya mengganggu ketika saya menggunakan Vim untuk beberapa pengeditan cepat, seperti:

  • sunting pesan git commit;
  • edit perintah shell ketika saya mengetikkan Ctrl+xCtrl+ezsh atau bash;
  • dll.

Saya juga tidak suka --noplugins, karena saya masih ingin memanfaatkan beberapa plugin dalam mode edit cepat, seperti surround, gerakan mudah, dan banyak lainnya.

Jadi, saya ingin memiliki beberapa "mode cahaya" (atau "mode cepat"), di mana beberapa plugin akan dilewati, tetapi tidak semuanya.

Gagasan pertama saya adalah memiliki beberapa argumen baris perintah khusus, yang saya parsing dalam vimscript, tetapi googling cepat menunjukkan bahwa saat ini tidak mungkin dalam vimscript (sedih sekali, omong-omong).

Gagasan kedua saya adalah mengatur beberapa variabel lingkungan saat menjalankan vim, seperti ini:

$ VIM_LIGHT_MODE=1 vim

Ini bekerja di git:

$ git config --global core.editor 'VIM_LIGHT_MODE=1 vim'

Tetapi jika saya lakukan EDITOR='VIM_LIGHT_MODE=1 vim', dan ketik Ctrl+xCtrl+eshell, itu tidak berfungsi:

edit-command-line:13: command not found: VIM_LIGHT_MODE=1

Lalu saya mencoba ini:, EDITOR="bash -c 'VIM_LIGHT_MODE=1 vim'"tetapi gagal juga:

vim': -c: line 1: syntax error: unexpected end of file

(Sejujurnya, yang ini terlihat sangat aneh, sepertinya saya salah paham bagaimana tepatnya $EDITORdigunakan, dan saya akan senang jika seseorang menjelaskan apa yang terjadi di sini)

Semua eksperimen lain juga gagal.

Satu-satunya peretasan yang dapat saya pikirkan adalah mengatur beberapa servername, seperti:

$ vim --servername VIM_LIGHTWEIGHT_MODE

Dan kemudian periksa v:servernamedalam vimscript, tapi ini adalah retasan total : ini bukan untuk servername.

Jadi adakah cara yang lebih bersih untuk mencapai apa yang saya inginkan?


2
Anda dapat menggunakan env: EDITOR='env VIM_LIGHT_MODE=1 vim'.
gniourf_gniourf

3
Anda juga dapat menggunakan file inisialisasi lain dan dijalankan vimsebagai vim -u .vimrc-light.
gniourf_gniourf

1
Oh .. Kedua ide Anda keren, terima kasih. Dan saya tidak menyadari envsama sekali, shell-fu saya masih terlalu lemah. Pertimbangkan untuk menuliskannya sebagai jawaban, sehingga saya dapat menerimanya.
Dmitry Frank

Jawaban:


10

Ada (setidaknya) dua kemungkinan:

  1. gunakan env:

    EDITOR='/usr/bin/env VIM_LIGHT_MODE=1 vim'
    
  2. gunakan vimdengan file inisialisasi lain, katakan .vimrc-light:

    EDITOR='/usr/bin/vim -u ~/.vimrc-light'
    

3

Meskipun jawaban yang diterima tentu lebih baik, saya ingin membahas EDITOR="bash -c 'VIM_LIGHT_MODE=1 vim'". Masalahnya di sini adalah yang EDITORdipanggil dengan argumen, dan argumen yang diteruskan untuk bash -ctidak diteruskan secara otomatis ke vim. Anda perlu menggunakan "$@":

EDITOR="bash -c 'VIM_LIGHT_MODE=1 vim \"\$@\"'

Namun, argumen pertama setelah perintah masuk bash -cadalah $0, yang bukan bagian dari $@, jadi Anda perlu menggunakan argumen placeholder:

EDITOR="bash -c 'VIM_LIGHT_MODE=1 vim \"\$@\" lightvim' 

Dengan jebakan-jebakan ini, itu bukan pilihan yang baik, tetapi tetap bisa diterapkan.


0

Sebenarnya ide pertama Anda mungkin, dengan cara yang elegan juga. Anda dapat membuat perintah yang ditentukan pengguna dan kemudian memanggil vim dengan +sintaks.

Cukup tentukan perintah pengguna khusus dalam .vimrcfile Anda seperti ini:

command! CustomUserCommandName AnyVimCommandToExecute

Kemudian dari baris perintah Anda dapat memulai vim seperti:

$ vim +CustomUserCommandName

Saya menggunakan ini dalam .vimrccatatan mudah saya , seperti:

" Note Taking {{{
command! Note execute "normal \<Plug>VimwikiMakeDiaryNote"
command! Notes execute "normal \<Plug>VimwikiDiaryIndex" | execute "normal \<Plug>VimwikiDiaryGenerateLinks"
" }}}

Ini memungkinkan untuk memanggilnya dengan ini vim +Note. Kemudian buat alias shell di rcfile shells Anda , untuk memungkinkan panggilan lebih mudah. Dalam .bashrcfile saya, saya alias perintah vim di atas seperti ini:

alias note="vim +Note"
alias notes="vim +Notes"

Solusi sampel

Dalam kasus Anda, Anda dapat menulis sesuatu di sepanjang baris ini di .vimrcfile Anda :

command! LightMode let g:lightmode=1

Kemudian uji untuk mode cahaya namun Anda inginkan berdasarkan plugin atau kelompok plugin, dll ... menggunakan ifpernyataan vim yang mirip dengan ini di .vimrcfile Anda :

if exists("g:lightMode")
    " Do something cool with vim 
endif

Hal-hal yang perlu diperhatikan

  • Perintah !after vim command!berarti bahwa ini akan menimpa perintah yang didefinisikan dengan nama yang sama. Ini lebih disukai.
  • The CustomUserCommandName HARUS memiliki huruf pertama dikapitalisasi
  • Anda mungkin tidak ingin mencemari ruang lingkup global g:Anda dengan Anda dapat menggunakan s:atau ruang lingkup apa pun yang sesuai dengan kebutuhan Anda.
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.