Saya berjuang dengan belajar vim regexps (saya juga tidak tahu regexp lain dengan baik), jadi masalah utamanya adalah menentukan regexp yang cocok dengan
some_function_call(simple_value, keyword=value)
kata kunci dalam contoh ini.
Jadi itu harus cocok dengan kata jika itu di dalam parens dan memiliki tanda yang sama setelah itu.
Masalah selanjutnya adalah bagaimana mendefinisikan file sintaks dalam vim. Saya akan sangat menghargai bantuan dengan itu, tetapi seharusnya tidak terlalu sulit untuk dipelajari, jadi saya bisa melakukannya sendiri mungkin.
EDIT berdasarkan jawaban saya sudah membantu skrip sintaks saya sendiri untuk python. Jangan ragu untuk mencobanya. masukkan deskripsi tautan di sini
syntax-highlighting
regular-expression
filetype-python
pengguna1685095
sumber
sumber
Jawaban:
Dengan pengaturan ini:
Saya mendapat:
Sini:
contains
pilihan memungkinkan fungsi panggilan saya sarang.\i*
) diikuti oleh=
, tetapi tidak==
, sehingga tes kesetaraan tidak cocok.Dengan menggunakan region, aku bisa membuat sarang pertandingan sebanyak yang aku butuhkan, yang akan sangat rumit (mustahil?) Jika aku pergi hanya
match
dengan ekspresi reguler.Saya percaya persamaan reguler yang digunakan untuk mencocokkan panggilan fungsi dan kata kunci dapat disempurnakan, tetapi mengingat apa yang valid di Python 3 , itu bukan tugas yang saya bersedia ambil.
Secara opsional, saya pikir Anda dapat menggunakan ini untuk menyorot panggilan fungsi, menggunakan
matchgroup
:sumber
pythonBuiltin
grup sintaks di defaultsyntax/python.vim
. Namun, itu tidak membedakan antara fungsi dan variabel bawaan (True
,False
danNone
juga dipythonBuiltin
). Anda mungkin dapat menyalin definisi untuk penggunaan Anda.query(...).***filter***()
filter disorot sementara itu tidak ada hubungannya dengan fungsi filter bawaan.syntax.vim
memang membuatnya kata kunci. Lihat github.com/vim/vim/blob/master/runtime/syntax/python.vim#L184syntax/python.vim
file tambahan (hanya default, dan saya tidak melihat perilaku yang Anda lakukan: i.stack.imgur.com/LgF6F.png , dan saya setuju dengan definisi kata kunci - itu yang paling cocok, dan saya jangan berpikir kata kunci cocok dalam kasus-kasus sepertinonkeyword.keyword
. Adapun variabel, perhatikan bahwa builtin ini adalah variabel, mereka variabel yang berisi objek fungsi, dan dapat ditugaskan seperti variabel lain. Tidak ada yang menghalangi Anda untuk melakukansorted = filter
dan kemudian menggunakansorted
sepertifilter
.Di sinilah Anda dapat mulai dari:
Membusuk:
Ini membutuhkan peningkatan tetapi memberi Anda gambaran tentang bagaimana Anda bisa melakukannya.
sumber
Selain jawaban @ Nobe4 Anda dapat melakukan hal berikut:
~/.vim/after/syntax/python.vim
Masukkan baris tesis dalam file:
Ini akan membuat file sintaks yang akan menambahkan kecocokan sintaksis untuk argumen Anda diikuti oleh a
=
dan mengatur gaya untuk digunakan. Topik ini:h mysyntaxfile-add
seharusnya menarik untuk Anda.Saya juga menggunakan regex yang berbeda dari jawaban yang lain, inilah detailnya (saya tidak tahu mana yang lebih baik sehingga Anda mungkin harus mencoba):
sumber
Saya menemukan bahwa jawaban @ Wolfie menangkap bungkusan tuple sebagai kata kunci dan juga kesulitan menangkap argumen kata kunci linebroken.
Terinspirasi oleh regex-nya, saya datang dengan yang berikut untuk dimasukkan ke dalam
python.vim
file sintaks saya . (Ingatlah bahwa saya awalnya menggunakanpython.vim
file sintaks dari sheerun / vim-polyglot )Dan rincian regex sangat mirip dengan jawaban @ Wolfie :
Catatan bahwa ini tidak akan mewarnai argumen kata kunci ditulis sebagai:
key = value
. Yang saya anggap hal yang baik, karena bertentangan dengan rekomendasi spasi putih PEP-8 resmi untuk argumen kata kunci .sumber
Jawaban yang diterima saat penulisan melanggar sorotan untuk string di dalam daftar argumen fungsi bagi saya (oleh alkimia apa yang saya tidak tahu), jadi inilah versi yang mudah-mudahan lebih aman, berdasarkan Statox ' .
ctermfg
untuk terminal konsol,guifg
untuk gui. Tentu saja Anda bebas mengubah warna menjadi apa pun yang Anda sukai. Berikut daftar praktisnya .Seperti biasa, Anda melakukan yang terbaik
~/.vim/after/syntax/python.vim
Untuk gangguan regex, ini dia:
Pemeriksaan terakhir menghentikan penyorotan dari kondisi pewarnaan. Anda dapat menghapus jika diinginkan.
sumber