https://alvinrolling.github.io/eda/uvm/Vim_SV_UVM/
https://alvinrolling.github.io/vim/Vim-UVM-Snippets/
https://khd0801.com/entry/vim-%EC%BD%94%EB%93%9C-%EC%9E%90%EB%8F%99-%EC%99%84%EC%84%B1-cocnvim
https://danielmangum.com/posts/setup-verible-verilog-neovim/
// 처음 실행시점의 환경 기록.
// WSL2에서 실행함.
➜ verilator --version
Verilator 5.024 2024-04-05 rev v5.024-42-gc561fe8ba
➜ vim --version
VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Nov 07 2024 13:17:21)
Included patches: 1-16, 647, 17-579, 1969, 580-647, 678, 648-1848, 4975, 5016, 5023, 5072, 2068, 1849-1854, 1857, 1855-1857, 1331, 1858, 1858-1859, 1873, 1860-1969, 1992, 1970-1992, 2010, 1993-2068, 2106, 2069-2106, 2108, 2107-2109, 2109-3995, 4563, 4646, 4774, 4895, 4899, 4901, 4919, 213, 1840, 1846-1847, 2110-2112, 2121
cd /mnt/c/Documents and Settings/user/Documents/VerilatorLintTest
일단 vim vundle이라는것부터 설치해야하는듯.
git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
그리고 .vimrc 최상단에 아래 내용 추가
"-----------------------------------------------------------------------"
" Vundle 환경설정
"------------------------------------------------------------------------"
filetype off " required!
set shell=/bin/bash
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" let Vundle manage Vundle
" required!
Plugin 'VundleVim/Vundle.vim'
" vim 하단에 파일 정보 띄우기
Plugin 'vim-airline/vim-airline'
Plugin 'vim-airline/vim-airline-themes'
" ...
call vundle#end()
filetype plugin indent on " required!
"
" Brief help
" :BundleList - list configured bundles
" :BundleInstall(!) - install(update) bundles
" :BundleSearch(!) foo - search(or refresh cache first) for foo
" :BundleClean(!) - confirm(or auto-approve) removal of unused bundles
"
" see :h vundle for more details or wiki for FAQ
" NOTE: comments after Bundle command are not allowed..
대충 C 파일만들고, vim상에서 :PluginInstall
하면 아래와 같이 Done 된다.(삭제는 :PluginClean
하면 된다고 함)
참고) Plugin 중에서는 VimAwsome이라는 Plugin 도 있다고 한다. 나도 들어본 Plugin이긴한데, 강력한 Plugin인 듯.
https://vimawesome.com/
현재상태로는, 자동완성은 지원하지 않고
모드만 친절하게 알려주는 수준에 그치긴 하는군.
일단 하나하나 따라가보자.
파일명과 커서위치를 알려주는 툴인듯.
ultisnips는 스니펫 엔진을 갖고 있으며 python에서 빠르고 작동 되며 기능이 가장 많다고 함.
vim-snippets는 if, for, while 또는 switch case문과 같은 패턴이 정해져 있는 코드들을 사용자가 등록한 키에 의해 코드가 자동 완성되도록 ~/.vim/bundle/vim-snippets/snippets/{언어명}.snippets 해당 내용들이 적혀있다고 함
8 " let Vundle manage Vundle
7 " required!
6 Plugin 'VundleVim/Vundle.vim'
5
4 " vim 하단에 파일 정보 띄우기
3 Plugin 'vim-airline/vim-airline'
2 Plugin 'vim-airline/vim-airline-themes'
1 " ...
16
*************이 2줄 추가하면된다.****************
1 "명령어 자동완성 플러그인(inc + <C-a> : #includ<>)
2 Plugin 'SirVer/ultisnips'
3 Plugin 'honza/vim-snippets'
4 " ...
다시 :PluginInstall
을 하면
~/.vim/bundle/vim-snippets/snippets/ 로 가보면,
기본적으로 verilog.snippets도 있는걸 확인가능하다.
아무튼, .vimrc 최하단에 아래와같이 추가하자.
" Trigger configuration. You need to change this to something other than <tab> if you use one of the following:
" - https://github.com/Valloric/YouCompleteMe
" - https://github.com/nvim-lua/completion-nvim
let g:UltiSnipsExpandTrigger="<C-a>"
let g:UltiSnipsJumpForwardTrigger="<tab>"
let g:UltiSnipsJumpBackwardTrigger="<s-tab>"
" If you want :UltiSnipsEdit to split your window.
let g:UltiSnipsEditSplit="vertical"
" let g:UltiSnipsSnippetDirectories = ['~/.vim/UltiSnips']
오오 switch하고 Ctrl A를 누르니
출처블로그 설명처럼, Template가 자동완성된다.
Tab 하면 다음걸로 이동이 된다.
아, 이건 Lint툴이나 변수명 추적툴이 아니라, 미리 정의한 Template 자동완성 툴이구나.
uvm_object만 치고 Ctrl A를 누르면 Snippet이 자동완성된다.
잘된다.
curl -sL install-node.vercel.app/lts | sudo $SHELL
Configuration
> Version: v22.12.0 (resolved from lts)
> Prefix: /usr/local
> Platform: linux
> Arch: x64
> Tarball URL: https://nodejs.org/dist/v22.12.0/node-v22.12.0-linux-x64.tar.gz
! Prefix bin directory /usr/local/bin is not in your $PATH
? Install Node.js v22.12.0 to /usr/local? [yN] y
> Installing Node.js, please wait…
✓ Done
vimrc에 아래 추가
" coc.nvim은 vim 편집기에서 사용 할 수 있는 플러그인
" 실시간 코드 자동 완성 및 다양한 개발 도구를 통합하는 목적
Plugin 'neoclide/coc.nvim', {'branch': 'release'}
:PluginInstall
시 아래 에러 발생
sudo apt upgrade vim
=> 해도 여전히 버전은 8.2에 머문다.
LSP 쓰는걸 추천하고, ALE 언어서버는 쓰지말라는 의견도 있음
Don't go that way. Use dedicated lsp clients such as vim lsc
결국 Neovim으로 가야하는건가
https://leehc257.tistory.com/category
^ 위 블로그의 vimrc를 그대로 쓰니,
https://rtlog.tistory.com/entry/Vim-Editor-Plugin-Vundle-NerdTree-Sytaxsticverilog
어 이거 iverilog 말고 verilator도 되는모양이다?
아...
README에서, 이거 쓸바에 ALE 쓰라고 하네.
This project is no longer maintained. If you need a syntax checking plugin for Vim you might be interested in Syntastic's spiritual succesor, ALE.
https://alvinrolling.github.io/vim/Slang-Linter-for-Vim-Ale/
ALE (Asynchronous Lint Engine) is a plugin providing linting (syntax checking and semantic errors) in NeoVim 0.6.0+ and Vim 8.0+ while you edit your text files, and acts as a Vim Language Server Protocol client.
Warning은 잘 뜨는듯
Error 도 띄워준다.
:help ale
치자.
아 커서를 가져가면 에러가 밑에 나오는구나.
대충 잘 잡네.
verilog는 어떨까.
의도적으로 end를 뺐더나 정확한 에러가 발생한다.
"-----------------------------------------------------------------------"
" Vundle 환경설정
"------------------------------------------------------------------------"
filetype off " required!
set shell=/bin/bash
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" let Vundle manage Vundle
" required!
Plugin 'VundleVim/Vundle.vim'
" vim 하단에 파일 정보 띄우기
Plugin 'vim-airline/vim-airline'
Plugin 'vim-airline/vim-airline-themes'
" ...
"명령어 자동완성 플러그인(inc + <C-a> : #includ<>)
Plugin 'SirVer/ultisnips'
Plugin 'honza/vim-snippets'
" ...
Plugin 'dense-analysis/ale'
call vundle#end()
filetype plugin indent on " required!
"
" Brief help
" :BundleList - list configured bundles
" :BundleInstall(!) - install(update) bundles
" :BundleSearch(!) foo - search(or refresh cache first) for foo
" :BundleClean(!) - confirm(or auto-approve) removal of unused bundles
"
" see :h vundle for more details or wiki for FAQ
" NOTE: comments after Bundle command are not allowed..
:set ignorecase
:set nu
:set rnu
"-----------------------------------------------------------------------"
" ultisnips&vim-snippets Trigger Configuration
"-----------------------------------------------------------------------""
" Trigger configuration. You need to change this to something other than <tab>
" if you use one of the following:
" " - https://github.com/Valloric/YouCompleteMe
" " - https://github.com/nvim-lua/completion-nvim
let g:UltiSnipsExpandTrigger="<C-a>"
let g:UltiSnipsJumpForwardTrigger="<tab>"
let g:UltiSnipsJumpBackwardTrigger="<s-tab>"
" If you want :UltiSnipsEdit to split your window.
let g:UltiSnipsEditSplit="vertical"
" let g:UltiSnipsSnippetDirectories = ['~/.vim/UltiSnips']
" for ALE
let b:ale_linters = {'c': ['gcc'], 'verilog':['verilator']}
" ALE가 에러와 경고를 표시하는 방법 설정
let g:ale_set_highlights = 1
let g:ale_set_signs = 1
let g:ale_set_loclist = 1
let g:ale_set_quickfix = 0
let g:ale_echo_cursor = 1
let g:ale_echo_msg_format = 'linter says - [%linter%] %s [%severity%]'