intellij - vim go go to definition
vim-formatear automáticamente el código fuente de golang al guardar (2)
El evento FileType
no se FileType
en las escrituras del búfer; BufWritePre
es la correcta, pero necesita proporcionar un patrón de archivo, por ejemplo, *.go
:
autocmd BufWritePre *.go Fmt
El único inconveniente es que esto duplica la detección del tipo de archivo go . Puede delegar esto enganchándolo en el evento FileType
y luego definir el formato de autocmd para cada búfer Go usando el patrón especial <buffer>
:
autocmd FileType go autocmd BufWritePre <buffer> Fmt
Esto tiene el inconveniente de que si el tipo de archivo se establece varias veces, también ejecutará el formato varias veces. Eso podría resolverse mediante una costumbre :augroup
, pero ahora se vuelve realmente complejo. O, si está realmente seguro de que este es el único BufWritePre
BufWritePre para los buffers Go, puede usar :autocmd! BufWritePre ...
:autocmd! BufWritePre ...
(con un !
).
Estoy usando vim con el plugin vim-golang . Este complemento viene con una función llamada: Fmt que "reformatea" el código fuente usando gofmt , un ejecutable de línea de comandos.
Quiero invocar la función: Fmt cada vez que guardo el archivo, para que se vuelva a formatear continuamente. Creo que esto debería hacerse con una directiva autocmd . Pero tengo dos dudas:
- No pude encontrar una manera de ejecutar la función. Intenté escribir Fmt y: Fmt al final de la línea autocmd, pero no pareció funcionar. Creo que echo de menos algo, como "llamada".
- Quiero que esto suceda solo cuando se guarda un archivo de tipo de archivo ''go''. No sé cómo combinar esas dos condiciones: puedo activar variables según el tipo de archivo, y puedo hacer cosas pequeñas, como eliminar espacios al final, cada vez que se guarda un archivo, pero por separado.
Así que esto es lo que tengo hasta ahora:
" 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
Si usa pliegues, gofmt los desordena (abre los pliegues cerrados, cierra los abiertos). Para mantener los pliegues como se usan los siguientes autocommand.
autocmd FileType go autocmd BufWritePre <buffer> execute "normal! mz:mkview/<esc>:Fmt/<esc>:loadview/<esc>`z"
Utiliza el registro z para marcar la posición del cursor porque: mkview y: loadview (que guarda y restaura los pliegues) mueve el cursor por alguna razón.