Używam vima z wtyczką vim-golang. Ta wtyczka jest dostarczana z a function called :Fmt, która "przekształca" kod źródłowy za pomocą gofmt, pliku wykonywalnego z linii poleceń.vim - automatyczne formatowanie kodu źródłowego golang podczas zapisywania
Chcę wywołać funkcję: Fmt za każdym razem, gdy zapiszę plik, dlatego jest on ciągle ponownie formatowany. Myślę, że powinno to być zrobione z dyrektywą autocmd. Ale mam dwa wątpliwości:
- Nie mogłem znaleźć sposobu na wykonanie tej funkcji. Próbowałem pisać Fmt i: Fmt na końcu linii autocmd, ale wydawało się, że nie działa. Myślę, że tęsknię za czymś, np. "Zadzwoń".
- Chcę, aby tak się stało tylko podczas zapisywania pliku typu pliku 'go'. Nie wiem, jak połączyć te dwa warunki - mogę aktywować zmienne w zależności od typu pliku i mogę robić małe rzeczy, takie jak usuwanie spacji końcowych, zawsze gdy plik jest zapisywany, ale oddzielnie.
Więc to, co mam do tej pory:
" I can set variables for go like this
autocmd FileType go setlocal noexpandtab shiftwidth=4 tabstop=4 softtabstop=4 nolist
" I can clean trailing spaces(conserving cursor position) on save like this
autocmd BufWritePre * kz|:%s/\s\+$//e|'z
" None of these worked:
autocmd BufWritePre,FileType go Fmt
autocmd BufWritePre,FileType go :Fmt
Wow, niezwykle szeroka odpowiedź, wielkie dzięki! Skończyło się na użyciu drugiej opcji - w ogóle nie planuję resetowania rodzaju pliku. Dzięki! – kikito
Możesz chcieć dodać 'cichy', jeśli potrzebujesz normalnego wyjścia z polecenia' Fmt' (ciągle widziałem 'X linie filtrowane'): ' autocmd FileType go autocmd BufWritePre cichy Fmt' –
djd
Jest już w 'vimie -gocode' plugin https://github.com/Blackrush/vim-gocode/blob/master/ftplugin/go/fmt.vim#L20 –