5 baris pertama dan terakhir file? Gunakan untuk daftar abaikan ejaan khusus file?

8

Rumor telah sampai kepada saya bahwa adalah mungkin untuk menempatkan vimperintah di lima pertama, atau di lima baris terakhir file aa. Tetapi, saya tidak dapat menemukan ini di Google. Petunjuk apa pun akan dihargai.

Saya ingin tahu apakah mungkin untuk menggunakan fitur ini untuk menentukan tambahan file spesifik ke daftar kata.

Sunting Terima kasih! Itu modeline! Apakah ini dapat digunakan untuk pemeriksaan ejaan dengan cara yang disarankan?

Yossi Gil
sumber
4
Maksudmu sesuatu selain dari modeline?
muru

Jawaban:

8

Modelines mungkin tampak seperti cara untuk melakukan ini, tetapi sayangnya mereka tidak akan berhasil. Modelines hanya opsi dukungan pengaturan ( shiftwidth, colorcolumn, hal semacam itu). Anda dapat menggunakan modeline like vim: spelluntuk mengaktifkan pemeriksaan ejaan untuk dokumen. Namun, spellgood!adalah perintah Ex, bukan opsi. Selanjutnya, Anda secara khusus tidak dapat menetapkan beberapa opsi (termasuk spellfile, lihat :help spellfile) dari modeline untuk alasan keamanan.

Anda dapat membuat banyak autocommand khusus file di vimrc Anda, tetapi itu akan menjadi sangat sulit untuk dipertahankan dari waktu ke waktu, membosankan jika Anda memiliki dua file dengan nama yang sama di lokasi yang berbeda, dan tidak akan bepergian "dengan mengajukan."

Alih-alih, solusi terbaik mungkin adalah membangun fitur mirip modeline Anda sendiri untuk menambahkan kata-kata dengan menguraikan beberapa blok teks yang ditentukan dalam dokumen. Misalnya, Anda dapat mencari baris yang dimulai dengan "spellgood:"dan secara otomatis menambahkan kumpulan kata yang dibatasi ruang setelah ke daftar kata internal:

function! AddLocalSpelling ()
  " Save the cursor position.
  let cursor_position = getcurpos()

  let location = searchpos("\"spellgood:", "c")
  while location != [0, 0]
    let words = split(getline(location[0]))
    " The first 'word' will be the sentinel token itself (unless)
    " we found the token in an embedded string or comment...
    if words[0] == "\"spellgood:"
      call remove(words, 0)
      for word in words
        execute "silent spellgood! " . word
      endfor
    endif
    let location = searchpos("\"spellgood:", "W")
  endwhile

  " Restore cursor position.
  call setpos(".", cursor_position)
endfunction

Kemudian Anda dapat mengatur perintah otomatis untuk, katakan BufReadPost * call AddLocalSpelling()di .vimrc. Dalam praktiknya Anda mungkin ingin membuat fungsi di atas lebih kuat dalam menghadapi kesalahan, dan mungkin digunakan commentsuntuk melihat apa token komentar yang valid (saya memilih "karena saya menguji ini dalam buffer VimL). Jawaban SuperUser ini yang ditautkan oleh JJoao dalam komentar memberikan implementasi yang mirip tapi alternatif yang memungkinkan Anda menggunakan blok kata dan bukan hanya satu baris pada satu waktu.

Metode ini akan meminta orang lain menggunakan fungsi yang sama atau setidaknya menyetujui aturan parse yang sama, jadi itu tidak sempurna. Tetapi Anda dapat mengambilnya dan mempromosikan fungsionalitas ke sebuah plugin jika diinginkan, memungkinkan akses yang lebih mudah bagi pengguna lain.

Komunitas
sumber