Penyorotan vim khusus

12

Saya sedang mengedit beberapa xml sekarang dan saya telah meninggalkan sendiri beberapa komentar tentang hal-hal yang akan saya kembalikan. Seperti ini

<!-- Question: bla bla -->

Saya sedang mengedit dengan vim sekarang dan saya ingin vim untuk menyoroti Pertanyaan sekarang sehingga saya dapat dengan mudah melihat kode saya dan menemukan semua tempat yang perlu saya lihat. Saya tahu saya perlu menambahkan sesuatu di vimrc saya, tetapi saya pikir saya mungkin mencari hal yang salah.

Memperbarui

Saya mencoba meletakkan ini di saya .vimrctetapi tidak berpengaruh:

syn keyword JakeAnnotation      Question

hi JakeAnnotation gui=bold term=bold cterm=bold

Perbarui 2

Sebenarnya saya dapat melihat bahwa apa yang saya lakukan sebelumnya memiliki efek karena ketika saya melakukan ini:

:hi

Ini menunjukkan kepada saya semua hal yang disoroti dan salah satu entri adalah:

JakeAnnotation xxx term=bold cterm=bold ctermbg=6

( dan xxx diformat dengan benar )

Ini membuat saya percaya bahwa saya tidak mendefinisikan pertanyaan dengan benar. Apakah Pertanyaan harus dengan sendirinya?

Perbarui 3

Ok jadi untuk posting pengguna 22303 saya punya ini berfungsi:

highlight MyQuestion cterm=bold term=bold ctermbg=blue ctermfg=black
match MyQuestion /Question/

Namun saya menduga Anda hanya diizinkan memiliki satu kecocokan per file. Karena ketika saya melakukan ini:

highlight MyQuestion cterm=bold term=bold ctermbg=blue ctermfg=black
match MyQuestion /Question/
highlight MyRelook cterm=bold term=bold ctermbg=blue ctermfg=black
match MyRelook /Another look/

Yang pertama berhenti bekerja. (Tapi yang kedua berhasil).

sixtyfootersdude
sumber

Jawaban:

9

Saya pikir kami telah memberi Anda beberapa jawaban yang tidak benar. Inilah sesuatu untuk dicoba yang saya uji pada mesin saya.

Pertama, buat grup sorotan baru Anda sendiri:

:highlight MyQuestions guifg=red guibg=green

Sekarang, tentukan bahwa grup sorotan akan ada setiap kali pola cocok:

:syntax match MyQuestions /Question/

Itu harus mulai menunjukkan highlight teks 'Pertanyaan' pada setiap baris yang memiliki teks itu. Untuk memperluas untuk menampilkan seluruh baris Anda akan mengubah teks pencarian untuk memiliki wildcard yang cocok dengan seluruh baris, seperti ini:

:syntax match MyQuestions /.*Question.*/

pengguna22303
sumber
Sebenarnya hanya penyortiran yang berhasil ... Saya menduga Anda hanya diizinkan memiliki satu pertandingan pada satu waktu, lihat pembaruan # 3 ...
sixtyfootersdude
1
@sixtyfootersdude: Maaf, sekali lagi ada kesalahan kecil. Semua perintah pertandingan harus menjadi perintah "sintaks pertandingan". Jadi alih-alih [: cocokkan MyQuestions /.*Question.*/] Anda ingin menggunakan [: syntax cocok dengan MyQuestions /.*Question.*/]. Dengan begitu, Anda dapat memiliki sebanyak mungkin pertandingan yang berbeda. Ini sebenarnya adalah salah satu jenis perintah yang paling umum ditempatkan dalam file sintaks. Tetapi Anda dapat menjalankannya di mana pun Anda inginkan, baik baris perintah, vimrc, atau skrip lainnya.
user22303
Menambahkan syntaxinfront dari match...dalam file vimrc saya membuat kecocokan tidak berpengaruh sama sekali. Di sinilah aku seharusnya melakukan ini. Melakukannya ke file yang terbuka juga tidak berpengaruh.
sixtyfootersdude
1
@sixtyfooters: Tidak yakin apa yang terjadi pada Anda, tapi itu pasti cara untuk melakukannya. Tes di baris perintah sebelum menempatkan dalam skrip (mungkin pengaturan sintaks dibersihkan di suatu tempat di skrip lain yang dimuat untuk file Anda). Setelah ditentukan, periksa grup apa yang ada dan sorotan apa yang mereka miliki dengan mengeluarkan perintah ": highlight" (atau pilih "Sintaks", "Sorot uji" dari menu gui di gvim). Ingat Anda ingin menggunakan perintah highlight untuk membuat grup, lalu gunakan 'sintaksis cocok' untuk mengatur pola kecocokan.
user22303
@sixtyfooters: Saya berasumsi Anda menjalankan vim di terminal (yaitu, bukan gvim) sehingga pengaturan properti hanya istilah yang seharusnya bekerja. Bagi saya itu terdengar seperti perintah sintaks yang dihapus ketika file baru dimuat dan file sintaks terkait sedang berjalan dan menghapus semua perintah sintaksis sebelumnya. Jadi hanya untuk mengecek, ketika menggunakan baris perintah apakah Anda memasukkan kembali perintah ini setiap kali Anda memuat file? Saya pikir Anda bisa mencoba pengujian dengan teks dalam buffer baru yang bahkan tidak disimpan dan bahkan belum memiliki nama file yang ditetapkan.
user22303
5

File yang Anda cari adalah file 'sintaks'. Coba cari /usr/local/share/vim/syntax/atau /usr/share/vim/syntax/. File yang Anda inginkan adalah xml.vim.

Hal paling sederhana untuk dilakukan adalah menemukan garis yang dimiliki

syn keyword xmlTodo         contained TODO FIXME XXX

dan ubah ke:

syn keyword xmlTodo         contained TODO FIXME XXX Question

Ini akan menambahkan sorotan 'Todo' ke komentar apa pun yang berisi teks Question.

Jika Anda akan menggunakan ini untuk (selamanya), akan lebih baik untuk menyalin xml.vim ke lokal Anda ~/.vim/syntaxsehingga perubahan ke vim tidak akan menimpa file sintaks khusus Anda.

Memperbarui

Jika Anda menginginkan kemampuan (sortof) yang serupa dalam file apa pun , saya akan menggunakan perintah 'goto'. Saya akui bahwa ini seperti hlsearch, yang menurut Anda mengganggu Anda.

Saat mengedit, ketika kursor berada pada sebuah kata, ketik gduntuk mencari dari titik saat ini dalam file atau gDuntuk mencari dari awal. Setiap kata dalam file Anda yang cocok dengan kata saat ini disorot. Anda dapat mengetik nuntuk melompat ke contoh kata berikutnya.

Saya cenderung melakukan ini, karena Anda mendapatkan sorotan dan navigasi dengan mengetik minimal. Anda mematikan sorotan dengan cara biasa::noh[lsearch]

DaveParillo
sumber
Wow! Itu terdengar seperti apa yang ingin saya lakukan. Saat ini saya tidak memiliki ~/.vim/ folder. If I created it and create the file sintaks `apakah saya perlu referensi di suatu tempat (mungkin di .vimrc?) untuk memberitahu vim untuk menggunakannya?
sixtyfootersdude
1
Nggak. Vim secara otomatis mencarinya (dan beberapa direktori lainnya - misalnya: plugins, color, compiler) dan jika ada file sintaks di area home Anda, maka diutamakan dari default sistem.
DaveParillo
1
Juga, hanya untuk menjadi jelas, Anda ingin membuat direktori syntax dan memasukkannya ke dalam file bernamaxml.vim
DaveParillo
Haruskah saya memasukkan .vimrc ke dalam .vim dir?
sixtyfootersdude
1
file sintaks masuk dalam dir .vim Anda. Sorotan sintaks dimaksudkan untuk spesifik bahasa. Jika Anda menginginkan kemampuan (sortof) yang serupa dalam file apa pun , saya akan menggunakan perintah 'goto'. Saya akan menambahkannya ke jawaban saya.
DaveParillo
2

Anda bisa melakukannya

:set hlsearch

Dan kemudian cari Pertanyaan

Dominik
sumber
Itulah yang telah saya lakukan tetapi pencarian saya mengganggu saya. +1, terima kasih atas sarannya.
sixtyfootersdude
2

Anda memiliki beberapa opsi.
- satu, seperti yang disebutkan Dominik ... Anda dapat mencari satu per satu (tidak praktis)
- dua, Anda dapat melakukan ": g / <- Pertanyaan" untuk mendapatkan "daftar" dari mereka semua (sedikit lebih baik , berikan gambaran keseluruhan)
- tiga, Anda dapat mengatur grup penyorotan jika Anda hanya menggunakan komentar semacam itu dalam file xml (Saya tidak tahu bagaimana xml terlihat, jadi saya tidak tahu apakah ada beberapa komentar lain di dalamnya juga). Ini akan baik jika Anda menyetelnya di vimrc, karena ketika Anda menyegarkan vim dengan versi yang lebih baru, file xlm.vim Anda akan hilang.

Benteng
sumber
+1 Saya menyukai :g/saran itu, tetapi mungkin sulit diterapkan jika 'Pertanyaan' tidak segera mengikuti tag komentar.
DaveParillo
@DaveParillo - ah, ya. baik, seperti yang saya katakan, saya tidak tahu apa-apa tentang xml jadi saya menganggapnya selalu seperti itu.
Benteng
Bagaimana saya bisa mengatur grup penyorotan?
sixtyfootersdude
1
@sixtyfootersdude - lihat ": help e410".
Benteng
@Idigas: terima kasih untuk referensi. Telah melihat tetapi masih tidak bisa menyelesaikan masalah saya. Saya menambahkan pembaruan dalam pertanyaan. Terima kasih.
sixtyfootersdude
1

Anda tidak perlu memasukkan perintah ke vimrc Anda. Anda selalu bisa memasukkannya di baris perintah dan kemudian menghapusnya ketika Anda tidak ingin lagi penyorotan. Perintah akan menjadi seperti ini:

: hai Pertanyaan guifg = red guibg = biru gui = tebal

Dalam gvim (yaitu, vim dengan gui) yang akan mengatur latar depan (guifg), latar belakang, dan pengaturan karakter umum.

jika Anda ingin menyingkirkan higlighting itu lakukan ini:

: hai Pertanyaan jelas

Menggunakan vim di dalam terminal Anda dapat memodifikasi untuk menggunakan perintah ini:

: hai Pertanyaan ctermfg = red ctermbg = istilah biru = tebal

Anda tentu saja dapat meletakkan semua itu di vimrc Anda, dan Anda juga dapat menggabungkan flag gui dan term menjadi perintah hi tunggal.


[di bawah ini ditambahkan setelah saya membaca jawaban poster lain]

Maaf, saya berasumsi bahwa sintaks dari baris pertanyaan Anda sudah cocok dengan pengaturan file sintaks Anda untuk tag sorot 'Pertanyaan' bawaan Vim. Lihat saja jawaban lain yang menyebutkan file sintaks xml untuk vim dan kemudian Anda bisa mengeluarkan perintah di atas menggunakan grup sorot ToDo alih-alih Pertanyaan.

pengguna22303
sumber
Mencoba: hai Pertanyaan ctermfg = red ctermbg = istilah biru = tebal tetapi tidak berpengaruh.
sixtyfootersdude
Maaf, perintah: hai hanya menetapkan bagaimana kelompok Pertanyaan akan disorot. Sekarang Anda harus menentukan bidang dokumen apa yang merupakan bagian dari grup Pertanyaan. Anda dapat melakukan ini dengan perintah match:: match Question / [pola pencarian] / atau, dalam kasus Anda:: match Question / Question /
user22303
0

Saya terlambat ke pesta tetapi saya menggunakan TODOdan FIXMEuntuk situasi yang tepat ini.

Sebagian besar, jika tidak semua, tema warna akan menyorot TODOdalam contoh berikut dengan beberapa kombinasi warna latar belakang, garis bawah dan huruf miring:

<tree>
  <!--TODO : do I have to add a trunk tag ?-->
  <branch>
    <leaf>caterpillar</leaf>
    <leaf>caterpillar</leaf>
  </branch>
</tree>

Itu tidak benar-benar cocok secara semantik tetapi bekerja sangat baik dari sudut pandang fungsional murni.

romainl
sumber