Saya ingin menjalankan autocmd dalam skenario berikut ketika saya memulai Vim:
- Tanpa nama file yang ditentukan.
- Saat file baru.
- Ketika file ada tetapi benar-benar kosong.
Dalam ketiga kasus di atas saya ingin menjalankan autocmd; khusus, saya ingin memulai mode penyisipan secara otomatis hanya untuk skenario di atas (dan tidak ketika saya membuka file yang sudah ada & tidak kosong).
MEMPERBARUI:
Saya sudah mencoba menempatkan berikut ini di saya _vimrc
, tetapi tidak berhasil (ditambah saya tidak yakin apakah ada fungsi di vim yang menghitung jumlah karakter dalam file (untuk melihat apakah itu nol) sebelum membukanya:
if @% == "" || filereadable(@%)
autocmd BufRead,BufNewFile * startinsert
endif
vimrc
insert-mode
autocmd
John Sonderson
sumber
sumber
normal
alih-alihexec
.if
pernyataan itu tidak boleh berada di sekitar autocmd, jika harus di dalam autocmd, jadi itu akan dijalankan setiap kali autocmd dipicu.Jawaban:
Ini berfungsi untuk ketiga kasus Anda untuk saya:
Ini mungkin bisa diringkas menjadi hanya pemeriksaan terakhir untuk file yang kosong, karena tidak ada nama file atau file yang tidak ada biasanya mulai sebagai buffer kosong. Namun, mungkin saja beberapa plugin lain mengisi beberapa hal dalam salah satu dari dua kasus pertama (seperti beberapa templat plugin), jadi yang terbaik adalah memeriksa ketiganya.
Tes pertama yang sudah Anda miliki.
Tes kedua perlu memeriksa
filereadable
terhadap nilai nol (tidak ada) untuk memutuskan apakah itu baru (kebalikan dari apa yang Anda miliki).Tes terakhir memeriksa bahwa jumlah baris terakhir dalam file adalah 1 (yang juga merupakan baris pertama, artinya hanya ada satu baris), dan bahwa jumlah kolom dari ujung baris (kolom setelah karakter terakhir dalam baris) adalah 1, yang berarti ada 0 karakter. Jika hanya ada 1 baris dengan 0 karakter di dalamnya, maka file tersebut harus kosong.
Satu catatan terakhir: Cara Anda menyampaikan pernyataan dalam pertanyaan dapat menghasilkan beberapa hasil yang mengejutkan. Yaitu, Anda menetapkan
BufRead
danBufNewFile
hanya jika kondisi dipenuhi pada saat startup, tetapi kemudian autocommands ada selama sisa sesi Anda. Jadi, jika Anda memulai pada file kosong, yang menetapkan perintah ini, setiap file berikutnya dibuka (baru atau tidak, kosong atau tidak) akan mulai dalam mode insert.Perintah otomatis
VimEnter
dijalankan pada akhir startup Vim dan hanya sekali untuk seluruh sesi. Dengan cara ini, tes Anda hanya berjalan ketika Anda memulai Vim dan tidak pada waktu lainnya.sumber