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

nvim with llama

# LLM 으로 프로그래밍시 도움을 받고 싶은데, 보안상 외부 서비스는 사용할 수 없고 해서
# 로컬에서 ollama 으로 llama 모델을 사용해 보자.
brew install --cask ollama

# 참고로 M1 MAX 을 사용중인데
# Llama3.3 --> 70B(parameters) 43GB(size) --> 메모리 풀 사용으로 결과 출력이 안돼 포기
# Llama3.2 --> 3B(parameters) 2.0GB(size) --> 빠르게 잘 나온다.
# Mistral --> 7B(parameters) 4.1GB(size) --> llama3.2 와 비슷한 성능

# 모델 다운로드
# 모델은 ~/.ollama/models 에 저장되고 (ollama rm 으로 지울 수 있다.)
ollama pull llama3.2
ollama pull mistral

# 참고로 터미널에서 별도 프롬프트로 사용할 경우
ollama run llama3.2

# ollama 이 떠 있는 상태에서 curl 요청하면 토큰들이 json 응답으로 온다.
curl http://localhost:11434/api/generate -d '{
  "model": "llama3.2",
  "prompt":"Why is the sky blue?"
}'

# nvim 에서 ollama 연결을 위한 플러그인 설치(Lazy 플러그인 매니저 사용)
# 참고로 ollama 띄워져 있지 않으면 자동으로 띄운다.
# 이제 Gen 커맨드로 Ask, Change Code, Enhance Code, Review Code 등의 기능을 사용할 수 있다.
# 현재 버퍼 코드 리뷰 하는 경우
:Gen Review_Code

# 특정 부분만 코드리뷰
코드 블럭 선택:Gen Review_Code

# 한글 chat 으로 코드리뷰  
:Gen Chat > $text 코드리뷰해줘

# vscode, jetbrains 에서는 continue 를 설치하고 ollama 로 연결
# 설치 후 continue 탭에서 llama 3.2 및 localhost 를 명시한다.
# 사용 예시) review @파일명

# 한국어 사용시

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