Bagaimana saya bisa mendapatkan daftar nama tipe file yang saat ini diketahui vim?
Saya ingin dapat melakukan ini sehingga ketika vim tidak secara otomatis mendeteksi tipe file saya dapat mencoba beberapa tipe file yang diketahui vim tentang hal itu mungkin sama dan melihat apakah mereka memberikan highlight sintaksis yang masuk akal.
Saya tahu bahwa file vimscript yang berhubungan dengan tipe file dimasukkan ke dalam ftplugin
direktori oleh konvensi tetapi mereka tidak perlu (saya tidak yakin, tapi saya tidak berpikir file vimscript dalam ftplugin
direktori itu spesial) jadi saya ingin hanya tanyakan kepada vim jenis file apa yang diketahuinya, terlepas dari bagaimana mereka mengetahui tentang mereka.
syntax-highlighting
Praxeolitic
sumber
sumber
:setfiletype
(yaitu denganTab
setelah spasi). Tidak yakin apakah ini daftar lengkap, atau bagaimana cara menangkapnya ke beberapa buffer / file.<c-d>
alih-alih<tab>
untuk daftar penyelesaian.Jawaban:
Solusi Sederhana
Ketik
:setfiletype
(dengan spasi sesudahnya) , lalu tekanCtrl-d
.Lihat
:help cmdline-completion
lebih lanjut tentang pelengkapan otomatis di baris perintah vim.Solusi Rumit
Solusi ini menggunakan
'runtimepath'
opsi untuk mendapatkan semua direktori sintaks yang tersedia, dan kemudian mengambil daftar file vimscript di direktori tersebut dengan ekstensi mereka dihapus. Ini mungkin bukan cara paling aman untuk melakukannya, jadi perbaikan dipersilahkan:Anda kemudian dapat menggunakan fungsi ini dengan cara apa pun yang Anda inginkan, seperti mencetak semua nilai dalam daftar. Anda bisa mencapai itu seperti ini:
Perhatikan bahwa ini mungkin bisa dipadatkan sedikit, hanya saja ini agar mudah dibaca. Saya tidak akan menjelaskan setiap fungsi dan perintah yang digunakan di sini, tetapi di sini ada semua halaman bantuan untuk mereka:
:help 'runtimepath'
:help :let
:help :let-&
:help split()
:help :for
:help expr-.
:help :if
:help isdirectory()
:help glob()
:help fnamemodify()
:help add()
:help uniq()
:help sort()
sumber
set filetype<space><c d>
, ini menunjukkan kepada saya daftar, tetapi html tidak ada dalam daftar. Java tidak ada dalam daftar. Bagaimana cara menunjukkan nama tipe file dalam arti tipe file yang sesuai dengan konfigurasi format sintaksis?:setfiletype
tanpa ruang khas antara "set" dan "filetype". Anda dapat menemukan lebih banyak info dengan:help :setfiletype
dan:help ftdetect
.:setfiletype ht<Ctrl+D>
untuk daftar jenis file dimulai dengan ht, yang menyaring hasil yang tidak diinginkan. :)Jika versi vim Anda cukup baru (v7.4.2011 +), Anda dapat meminta tipe file yang dikenal dengan fungsi yang sekarang dapat kita gunakan untuk membantu mendefinisikan pelengkapan otomatis manual:
getcompletion()
Jika Anda ingin membatasi daftar untuk tipe file dimulai dengan
'c'
, Anda akan menelepondan seterusnya.
Catatan: tidak seperti solusi yang menguraikan nama file dan nama direktori
$VIMRUNTIME/{syntax,filetype}/
, solusi ini menganalisis'runtimepath'
juga. Sejauh yang saya mengerti, itu tidak melihat tipe file baru didefinisikan / terdaftar dengan cepatset ft=foobar
, atau setelah perintah otomatis.sumber
Anda juga dapat mencetak semua jenis file di terminal dengan menjalankan 2 perintah berikut:
1.
2.
Perintah pertama hanya menavigasi ke jalur runtime vim Anda (bagi saya itu adalah / usr / share / vim / vim80 ).
Perintah kedua mencantumkan semua nama tipe file dalam dua folder tempat vim menyimpan definisi tipe file.
Memperbarui
Perbaikan yang disarankan untuk dua perintah oleh muru yang menawarkan:
1.
2.
sumber
tr
untuk mengkonversi baris baru ke null hanya untuk mengubahnya kembali perintah berikutnya, proses substitusi ketika pengelompokan perintah sederhana akan dilakukan. Saya sarankan sesuatu seperti:find syntax ftplugin -iname '*.vim' -exec basename -s .vim {} + | sort -u
vim -Nesc '!echo $VIMRUNTIME' -c qa
, Kupikir.printf
adalah builtin a):f=({ftplugin,syntax}/*.vim) && f=(${f[@]##*/}) && printf "%s\n" "${f[@]%%.*}" | sort -u
. Lihat "Ekspansi Parameter" di halaman manual Bash untuk penjelasan tentang hieroglif.bash
, yang 'bukan plugin filetype nyata ... dan mendapatkan efek dari filetype "sh"'Coba lihat dalam $ VIMRUNTIME / sintaks. Gunakan: echo $ VIMRUNTIME untuk mengetahui nilainya. Di komputer saya, $ VIMRUNTIME / sintaks adalah / usr / share / vim / vim81 / syntax. Ia memiliki semua file sintaks.
Jika Anda memiliki vim dengan gui, Anda juga dapat menggunakan menu Sintaks untuk mendapatkan semua tipe file yang didukung.
sumber