Można użyć CursorMoved
i CursorMovedI
autokomend aby ustawić żądaną textwidth (lub jakiegokolwiek innego ustawienia) na podstawie linii kursor znajduje się obecnie na:
augroup gitsetup
autocmd!
" Only set these commands up for git commits
autocmd FileType gitcommit
\ autocmd CursorMoved,CursorMovedI *
\ let &l:textwidth = line('.') == 1 ? 50 : 72
augroup end
podstawowa logika jest prosta: let &l:textwidth = line('.') == 1 ? 50 : 72
, choć zagnieżdżone autokomendy sprawiają, że wyglądają dość ostry. Możesz wyodrębnić niektóre z nich do funkcji skrypt-lokalna (fun! s:setup_git()
) i wywołać to, jeśli wolisz.
Przy okazji, składnia &:l
jest taka sama jak setlocal
(ale z setlocal
nie możemy użyć wyrażenia takiego jak po prawej stronie, tylko prosty ciąg).
Niektóre pokrewne pytania:
Zauważ, że plik składnia domyślna gitcommit.vim
już przestaje podkreślając pierwszej linii po 50 znaków. Od /usr/share/vim/vim80/syntax/gitcommit.vim
:
syn match gitcommitSummary "^.\{0,50\}" contained containedin=gitcommitFirstLine nextgroup=gitcommitOverflow [email protected]
[..]
hi def link gitcommitSummary Keyword
Tylko pierwsze 50 linii dostać podświetlone jako „Słowo kluczowe” (jasny brąz w moim schematem kolorów), po czym nie podświetlanie jest stosowana.
Jeśli ma również: jak
syn match gitcommitOverflow ".*" contained [email protected]
[..]
"hi def link gitcommitOverflow Error
Wskazówka jest to w komentarzu, prawdopodobnie dlatego, że jest nieco zbyt uparty. można łatwo dodać do swojej vimrc choć:
augroup gitsetup
autocmd!
" Only set these commands up for git commits
autocmd FileType gitcommit
\ hi def link gitcommitOverflow Error
\| autocmd CursorMoved,CursorMovedI *
\ let &l:textwidth = line('.') == 1 ? 50 : 72
augroup end
który uczyni wszystko, po 50 znaków pokazać się jako błąd (można, jeśli chcesz, także użyć mniej natarczywe kolorów, wybierając inną grupę podświetlenia).
Świetna odpowiedź i nie widziałem wcześniej sztuczki '& l:', która przydaje się! – nickspoon