Bu işlevi deneyin:
function! SignKeyword()
silent! sign undefine todo
sign define todo text=>> texthl=Search
g/\v\C(<TODO>|<FIXME>)/execute "sign place 9999 line=" . line('.')
\ . " name=todo buffer=" . bufnr('')
nohlsearch
endfunction
Şimdi komut satırındaki işlevi çağırın:
:call SignKeyword()
Veya ~/.vimrc
aramak için bir eşleme ekleyin :
nnoremap <your mapping> :call SignKeyword()<cr>
Veya bir autocmd ekleyin. Örneğin, dosya türü işaretleme olan bir dosyayı açarken işlevin otomatik olarak çağrılmasını istiyorsanız:
autocmd FileType markdown call SignKeyword()
İşlevin ilk satırı silent! sign undefine todo
zaten varsa işaret todo'yu siler, böylece işaretleriniz bir çizgi sildikten veya eklendikten sonra yanlış yerleştirilirse, hemen düzeltmek için işlevi geri çağırabilirsiniz.
İkinci satır, adı yapılacak olan, metni olan >>
(tercihlerinize uyacak şekilde değiştirebilirsiniz) ve Arama vurgulama grubunu (aynı şey) kullanan bir işareti tanımlar .
Üçüncü satır global komutu kullanır:
:g/pattern/command
Global komut, bir kalıpla eşleşen her satırda bir komut yürütür.
Burada desen \v\C(<TODO>|<FIXME>)
, yani TODO veya FIXME kelimesini içeren herhangi bir satır anlamına gelir . Normal ifade
atomu içerir, \C
böylece arama duruma göre değişir ('ignorecase' seçeneğiniz ne olursa olsun). Aramanın davaya saygı göstermemesini istiyorsanız, olarak değiştirin \c
.
Böyle bir satır bulunduğunda aşağıdaki satır fonksiyon tarafından yürütülür:
execute "sign place 9999 line=" . line('.')
\ . " name=todo buffer=" . bufnr('')
:execute
Aşağıdaki dizenin içeriğini (komutla) yürütür :
"sign place 9999 line=" . line('.') . " name=todo buffer=" . bufnr('')
Dize iki adet vim yerleşik işlev içerir: line()
ve bufnr()
.
line('.')
global komut tarafından bir eşleşme bulunduğunda geçerli satırın bufnr('.')
numarasını ve geçerli arabellek sayısını döndürür.
Örneğin, global komut, arabellekteki 5 satır 10'da bir eşleşme bulursa, şunu verecektir:
"sign place 9999 line=" . 10 . " name=todo buffer=" . 5
Noktalar dizeleri birleştirir ve sonunda şunları değerlendirir:
"sign place 9999 line=10 name=todo buffer=5"
Bu, :sign
tampon 5'teki satır 10 üzerine bir işaret yerleştirme komutudur.
9999, işaret için seçilen rastgele bir kimliktir (başka bir tane seçebilirsiniz).
İşlevin dördüncü satırı :nohlsearch
eşleşen desenlerin vurgulanmasını devre dışı bırakır.
Düzenleme: Normal ifadeyi düzelttim, orijinal yanlıştı. Ben yazdım ^[TODO|FIXME]
ama bunun yerine olması gerektiğini düşünüyorum \v\C(<TODO>|<FIXME>)
. Rahatsızlık için özür dilerim, hala vimscript öğreniyorum.
TODO
yorum kaldırıldıktan sonra işaret nasıl kaldırılır?