Sorotan Vim untuk jenis file tertentu (tempat untuk meletakkan file sintaks, acara vim, baris untuk dimasukkan ke dalam vimrc)

17

Saya telah menetapkan waktu file jak.vimuntuk menawarkan penyorotan khusus ketika saya membuat catatan, namun itu sedang diterapkan ke beberapa file yang tidak memiliki .jakekstensi. Khususnya sebuah file bernama progress.jlog. Hanya untuk menguji apakah masalah itu khusus untuk ekstensi yang saya berganti nama progress.jloguntuk progress(tanpa ekstensi) tetapi mengalami masalah yang sama.

Apa yang saya lakukan:

  • Saya buat jak.vimdi direktori~/.vim/ftdetect
  • Saya menambahkan baris ini: "au BufRead, BufNewFile * .jak set filetype = jak" ke atas seperti yang dijelaskan dalam referensi vim
  • Saya memulai kembali vim (: x, dan kemudian dibuka kembali)

Seperti inilah ~/.vim/ftdetect/jak.vimpenampilan saya :

~/.vim/ftdetect][505]% cat jak.vim
au BufRead, BufNewFile *.jak set filetype=jak

syn region JakeSubtitle start=+==+ end=+==+
highlight JakeSubtitle ctermbg=black ctermfg=DarkMagenta

syn region JakeTitle start=+===+ end=+===+
highlight JakeTitle ctermbg=black ctermfg=yellow

syn region JakeMasterTitle start=+====+ end=+====+
highlight JakeMasterTitle cterm=bold term=bold ctermbg=black ctermfg=LightBlue

syn region emphasis start=+<em>+ end=+</em>+
highlight emphasis ctermbg=black ctermfg=yellow

" makes all of the numbered items bold."
" (this works I just don't like the effect.  Decided to change to just highlight the "number)
"syn region numberedItem start=+^\t*\d*)+ end=+\n+"
syn match numberedItem +^\t*\d*)+
highlight numberedItem cterm=bold

Dan hanya memetikan Anda perlu tahu seperti inilah .vimrcpenampilan saya :

~/.vim/ftdetect][508]% cat ../../.vimrc
"on will override defaults set.  Enable will allow you to set defaults."
" also turns on filetype"
"syntax on"
syntax enable

set nocompatible

" ???"
set backspace=2

"Auto indent"
set ai

"Map jj to Esc so that you do not have to reach for the Esc button"
imap jj <Esc>

"do not allow the search to wrap around the screen, must stop at the bottom."
set nowrapscan

"when doing a search highlight all occurances"
":set hlsearch"

"stop text from wrapping on the screen"
set nowrap

"turn the mouse on while in insert mode"
set mouse=i

"attempting to highlight specific keywords so it is easy to see in code."
"see help e410 for more info."
"see this post I created: /superuser/110054/custom-vim-highlighting"
"Legal colors: Black, DarkBlue, DarkGreen, DarkCyan, DarkRed, DarkMagenta,"
"Brown, DarkYellow, LightGray, LightGrey, Gray, Grey, DarkGray, DarkGrey,"
"Blue, LightBlue, Green, LightGreen, Cyan, LightCyan, Red, LightRed, Magenta,"
"LightMagenta, Yellow, LightYellow, White"
syn keyword JakeKeywords        Question TODO Answer JAKEHTTPS PossibleProblem
highlight JakeKeywords cterm=bold term=bold ctermbg=black ctermfg=Blue


"for case-insensitve searches"
set ignorecase

"Override the 'ignorecase' option if the search pattern contains upper"
"case characters.  Only used when the search pattern is typed and"
"'ignorecase' option is on."
set smartcase


"use indents as the folding method"
set foldmethod=indent

"make vim save and load the folding of the document each time it loads"
"also places the cursor in the last place that it was left."
au BufWinLeave * mkview
au BufWinEnter * silent loadview

Catatan: Saya melengkapi semua kutipan (komentar) untuk membuatnya lebih mudah dibaca


Memperbarui

Saya menemukan posting nsharish sangat membantu. Mereka menyarankan agar saya menambahkan ini ke vimrc saya:

au BufRead,BufNewFile *.jak set filetype=jak

dan tambahkan jak.vimfile saya ke~/.vim/syntax

Sayangnya kode itu bertentangan dengan dua baris ini (di vimrc saya)

au BufWinLeave *.c mkview
au BufWinEnter *.c silent loadview

Saya menggunakan keduanya untuk menyimpan lipatan, lokasi kursor, dll saat memuat vim (lihat :help lo). Jika saya berkomentar dua baris saran nsharish bekerja seperti pesona. Dengan dua baris itu tidak ada highlight di salah satu file saya.

Kesimpulan

Saya menandai jawaban nsharish sebagai jawaban terbaik (karena ini sangat membantu saya). Namun demikian, inilah cara saya memecahkan masalah:

Nsharish benar aku membutuhkan baris ini di .vimrc:

syntax enable
au BufRead,BufNewFile *.jak set filetype=jak

Dan saya perlu memindahkan jak.vimfile saya ke ~/.vim/syntax.

Namun seperti yang disebutkan di atas ada konflik dengan garis-garis ini:

au BufWinLeave * mkview
au BufWinEnter * silent loadview

Ketika baris-baris ini dikomentari, penyorotan berhasil.

Yang perlu saya lakukan adalah mengubah ...set filetype...ini:

au BufWinEnter,BufRead,BufNewFile *.jak set filetype=jak

Saya pikir BufWinEnter dipanggil setelah file BufRead / BufNew sehingga penyorotan ditimpa oleh format yang disimpan dari terakhir kali.

Sekali lagi terima kasih kepada nsharish karena telah membantu saya menemukan solusi ini.

sixtyfootersdude
sumber
1
dalam arti apa pernyataan * .c bertentangan dengan pernyataan * .jak?
akira

Jawaban:

10

Apakah Anda mencoba ini ..

  • Masukkan jak.vim Anda di folder .vim / sintaks
  • letakkan baris berikut hanya di file .vimrc Anda.
sintaks aktifkan 
au BufRead, BufNewFile * .jak set filetype = jak
Saya mencoba ini dengan file jak.vim Anda .... Ini berfungsi dengan baik untuk saya ....
Saya menggunakan vim7.2 ...
edit:
Coba ini,
saya memiliki masalah yang sama dengan garis mkview dan loadview ... cukup atur filetype sekali dalam file dan itu akan dipertahankan kemudian

Buka file, lalu lakukan " : set ft = jak ", simpan file dan keluar dari vim .... Sekarang buka kembali file ... penyorotan sintaks seharusnya berfungsi sekarang ...
mkview dan loadview tampaknya menyimpan pengaturan penyorotan sintaks terakhir juga....

asdfg
sumber
coba sekarang ... Tapi tahukah Anda apa yang dilakukan folder .vim / ftdetect /? Perilaku yang saya alami adalah bahwa semua format file di sana berlaku untuk semua jenis file.
sixtyfootersdude
Huh, itu sebagian berhasil .. Namun ada konflik dengan dua baris lain di vimrc saya. Lihat pembaruan saya.
sixtyfootersdude
2

Harus saya akui, saya tidak tahu pasti seberapa bermanfaat ini bagi Anda ... Tapi ...

http://beerpla.net/2008/04/02/how-to-add-a-vim-file-extension-to-syntax-highlighting/

Saya telah menambahkan teks saat halaman dihapus ... Atau diubah ...

Cara Menambahkan Ekstensi File Ke vim Penyorotan Sintaksis Diposting oleh Artem Russakovskii pada 2 April 2008 di Database, Linux, Memprogram 24 penyelamatan lezat 2 diggs Bagikan 3 retweet Bagikan 3 retweet

Diperbarui: 8 Juli 2009

Hari ini saya ditanya pertanyaan tentang mendefinisikan ekstensi khusus untuk penyorotan sintaksis vim sehingga, misalnya, vim akan tahu bahwa example.lmx sebenarnya bertipe xml dan menerapkan penyorotan sintaks xml padanya. Saya tahu vim sudah secara otomatis melakukannya bukan hanya berdasarkan ekstensi tetapi dengan mencari string tertentu di dalam teks, seperti

Setelah menggali sekitar saya menemukan solusinya. Tambahkan berikut ini ke ~ / .vimrc (file konfigurasi vim):

1 2 3 sintaks pada filetype pada au BufNewFile, BufRead * .lmx set filetype = xml Setelah menerapkannya, file .lmx saya disorot:

Prinsip yang sama berfungsi, misalnya, untuk dump mysql yang harus saya lakukan dari waktu ke waktu. Jika mereka tidak memiliki ekstensi .sql, Anda akan mendapatkan sesuatu seperti:

Setelah

1 2 3 sintaks pada filetype pada au BufNewFile, BufRead * .dump set filetype = sql semuanya baik-baik saja:

Tetapi mengapa dan bagaimana cara kerjanya, Anda bertanya?

: help au: au [tocmd] [group] {event} {pat} [nested] {cmd}

Tambahkan {cmd} ke daftar perintah yang akan dijalankan Vim secara otomatis pada {event} untuk file yang cocok {pat}. : help BufNewFile Saat mulai mengedit file yang tidak ada. : help BufRead Saat mulai mengedit buffer baru, setelah membaca file ke buffer. : help filetype sebenarnya akan menceritakan seluruh cerita ini di bagian B. Dan itulah cara Anda melakukannya, kawan.

Benjamin Schollnick
sumber
Huh, akan segera melihat ini, tetapi terlihat berguna ..
sixtyfootersdude
Yah, itu mungkin berpotensi memecahkan satu masalah tapi saya tidak berpikir itu akan menyelesaikan masalah ini ... Saya pikir kunci untuk ini ada hubungannya dengan .vim/ftdetectdirektori ...
sixtyfootersdude
Jujur saya bahkan tidak menggunakan VIM, jadi saya harus mengambil kata-kata Anda di atasnya ...
Benjamin Schollnick
1

Saya mencoba mereproduksi apa yang telah Anda lakukan, tetapi filetype tidak dapat diterapkan ke ekstensi lain.

Saya juga menemukan bahwa ini membantu:

File bantuan Vim untuk 'filetype baru' menyebutkan membuat 'filetype.vim' Anda sendiri ~/.vim/filetype.vim dan menulis perintah otomatis Anda di file itu:

if exists("did_load_filetypes")
  finish
endif
augroup filetypedetect
  au! BufRead,BufNewFile *.jak      setfiletype jak
augroup END

Semua sintaks dan sorot perintah dari jak.vim Anda perlu disimpan di bawah ~/.vim/syntax, jadi salin ke ~/.vim/syntax/jak.vim(tanpa auperintah).

Anda juga harus keluar dari Vim dan memulai kembali untuk mengambil perubahan.

njd
sumber
1

Saya pikir hal-hal mungkin diputarbalikkan, tapi saya bukan ahli vim.

File penyorotan sintaks Anda harus berada di direktori sintaksis. Hal-hal dalam saran nsharish mungkin adalah apa yang masuk ke file yang Anda tempatkan di dalam ftdetect.

Bagian ini:

au BufRead,BufNewFile *.jak set filetype=jak

Di .vimrc, Anda mungkin juga perlu menambahkan baris seperti:

au! syntax jak source $VIM/syntax/jak.vim

IMHO, lebih masuk akal dengan cara ini. Saya harap ini membantu.


sumber