2017-05-12 13 views
5

Często używam vim do formatowania moich wiadomości zatwierdzania git. Trendem, który widzę z increasingpopularity jest to, że pierwszy wiersz komunikatu zatwierdzenia powinien być ograniczony do 50 znaków, a kolejne wiersze powinny być ograniczone do 72 znaków.Limit wiersza tematu wiadomości zatwierdzania git do 50 znaków

I already know how to make my commit wrap at 72 characters based on my vimrc file:

syntax on 
au FileType gitcommit set tw=72 

Czy istnieje sposób, aby vim autowrap pierwszej linii na 50 znaków, a następnie 72 znaków po tym?

Równie dobra odpowiedź mogłaby podkreślić wszystko po kolumnie 50. na tylko pierwszej linii, aby wskazać, że mój nagłówek jest zbyt długa ...

Odpowiedz

4

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).

+0

Świetna odpowiedź i nie widziałem wcześniej sztuczki '& l:', która przydaje się! – nickspoon

Powiązane problemy