레이블이 neovim인 게시물을 표시합니다. 모든 게시물 표시
레이블이 neovim인 게시물을 표시합니다. 모든 게시물 표시

gofumpt

neovim(nvim) gopls 설정을 업데이트한 후 .go 파일을 저장하면
var 로 선언된 변수가 := 로 간단하게 변경된다.

찾아보니 gopls 설정에 gofumpt(https://github.com/mvdan/gofumpt) 활성화되어 있었다.

gofumpt 는 gofmt, goimports 기능을 포함하면서 더 엄격한 포맷팅 규칙을 적용하는 확장된 포맷팅 방식이다.
그래서 gofumpt 포맷팅된 코드는 gofmt, goimports 검사를 통과한다고 한다.
요런 규칙들이 있다.
- 복합 리터럴에서 선행 또는 후행 빈 줄 제거
- 할당 연산자 다음의 불필요한 빈 줄 제거
- 인터페이스에서 불필요한 빈 줄 제거
- 가독성을 위해 함수에서 빈 줄 대신 ) { 라인 사용

# 바이너리 설치
go install mvdan.cc/gofumpt@latest

# 이전의 .go 파일들에 대해 포맷팅을 해봤는데 개인적으로 깔끔해져서 가독성에 더 좋은것 같다.
gofumpt -w -l $(fd --type file .go)

# 참고, gopls 체크사항 확인
gopls check $(fd --type file .go)

vim-gitgutter auto refresh

# 커밋전 코드 변경을 표시하기 위해 vim-gitgutter 플러그인을 사용중이다.
# 원래 커밋 후에는 변경표시(-,+등)이 사라져야 한다.
# 그런데 언제부터인가 커밋 후에도 변경 표시가 남아 있다.
# 임시 방편으로 현재 버퍼(파일) 저장시 :GitgutterAll(모든 버퍼 내용을 갱신) 명령을 설정해 사용하고 있었다.
autocmd BufWritePost * GitGutterAll

# neovim(nvim) 에서는 커밋 후에는 정상적으로 변경 표시가 사라진다.
# vim, nvim 모두 같은 gitgutter 설정을 사용한다.
# 원인 파악을 위해 다음과 같이 설정하면 gitgutter 플러그인 소스 위치에 gitgutter.log 를 생성한다.
let g:gitgutter_log = 1

# 변경내용 커밋 후 nvim 에 포커스를 옮기면 다음과 같이 gitgutter#all 함수가 수행된다.

# 반면 vim 에서는 다음과 같이 FocusGained 이벤트가 발생되지 않아 gitgutter#all이 수행되지 않고 있었다.

# 다음과 같이 vim 에 포커스 이벤트 액션을 설정하면, nvim 에서는 동작하지만 vim 에서 동작하지 않는다.
autocmd FocusGained * echo 'Vim has gained focus'
autocmd FocusLost * echo 'Vim has lost focus'

# iterm 내에서는 vim 포커스 이벤트가 동작한다.
# 찾아 보니 alacritty 에서 focus 이벤트가 동작하지 않는다는 이슈가 있었다.
# 다음과 같이 alacritty 사용시 터미널코드를 별도 설정하면 된다.
# 참고로 :set termcap 으로 설정된 터미널 코드 확인
if &term =~ "alacritty"
  let &t_fe = "\<Esc>[?1004h"
  let &t_fd = "\<Esc>[?1004l"
endif