tutorial intellij idea golang for go vim

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:

  1. 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".
  2. 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.