개요
평소 리눅스 서버에서 인프라 작업을 하거나 옵시디언 노트에서 vim 키바인딩, vsCode에서도 vim 플러그인 정도를 사용하고 있어
vim에 어느 정도 익숙해져 있었다.
하지만, 스프링 자바 개발만큼은 인텔리제이가 충분히 훌룡하다고 생각이 들어서 개발에까지는 사용하고 있지 않았다.
Emacs 같은 좋은 툴을 이용해서 vim으로 모든 화면을 제어하면서 사용한다면 작업 간의 스위칭이 줄어들어 엄청난 효율이 있다고 하는데, 솔직히 나는 그냥 멋있어서 사용하기 때문에 vim 설정에 그렇게 시간을 쏟아붓기는 싫다.
그냥 좋은 에디터에서 vi 플러그인등을 이용하여 사용하는 것이 정신건강에도 좋고 효율적이라는 생각이다.
그러다가 intelliJ에서 ideavim에서 평소 인텔리제이 IDE에서 많이 사용하는 액션 기능을 Ideavim(인텔리제이에서 vim을 사용할수록 도와주는 플러그인)에 키바인딩 할 수 있다고 한다. 그래서 현재는 IntelliJ Ideavim을 이용하여 개발 중에 있어 그 방법을 소개하려고 한다.
intelliJ ActionList 연동
shift를 두 번 눌러 ideavim을 입력 후 Track Action Ids On 하면 인텔리제이에서 사용하는 ActionId를 Copy 할 수 있다.
연동하고자 하는 Action을 Id를 Copy 후 키를 바인딩 할 수 있다. 평소 cmd + shift + A(액션기능)을 자주 사용해 봤다면 알 것이다.
인텔리제이의 대부분의 기능들을 액션을 이용하여 동작시킬 수 있기 때문에 엄청 강력하다고 느꼈을 것이다.
이러한 액션기능,인텔리제이의 대부분의 기능들을 vim 환경에서 키바인딩하여 사용할 수 있다.
Ideavimrc 파일 작성
ideavim의 설정 파일은 홈 디렉터리 아래에. ideavimrc에 위치한다. 없을 경우 생성해 주면 된다.
문법은 vimrc파일과 동일하다.
내가 사용하고 있는 설정파일이다. 사용할 기능만 참고하자.
- nmap: vi에서 normal 모드를 의미하며 Insert,Visual 모드가 아닌 Esc를 눌렀을 때 해당하는 Normal 모드에서 키 입력 시 동작
- let mapleader=" " :
Vim에서 사용자 지정 키 매핑을 만들 때 사용되는 특별한 변수
변수는 사용자가 정의한 키 매핑의 첫 번째 문자를 지정하는 데 사용
나의 경우 공백 문자열을 주어 스페이스를 + $Key 가 동작하도록 하였다.
"" Source your .vimrc
"source ~/.vimrc
"" -- Suggested options --
" Show a few lines of context around the cursor. Note that this makes the
" text scroll if you mouse-click near the start or end of the window.
set scrolloff=5
" Do incremental searching.
set incsearch
" Don't use Ex mode, use Q for formatting.
map Q gq
map <Tab> >gv
"" -- Map IDE actions to IdeaVim -- https://jb.gg/abva4t
"" Map \r to the Reformat Code action
"map \r <Action>(ReformatCode)
"" Map <leader>d to start debug
"map <leader>d <Action>(Debug)
"" Map \b to toggle the breakpoint on the current line
"map \b <Action>(ToggleLineBreakpoint)
" Find more examples here: https://jb.gg/share-ideavimrc
set encoding=utf-8
let mapleader = " "
"" IdeaVim ActionList
set number relativenumber
set idearefactormode=keep
set ideajoin
set surround
set easymotion
let mapleader = " "
noremap <Esc> <nop>
nmap <S-Enter> O<Esc>
nmap <CR> o<Esc>
nnoremap <C-j> :m +1<CR>
nnoremap <C-k> :m -2<CR>
inoremap <C-j> <Esc>:m +1<CR>gi
inoremap <C-k> <Esc>:m -2<CR>gi
" system clipboard
vmap <leader>y "+y
vmap <leader>d "+d
nmap <leader>y "+yy
nmap <leader>p "+p
nmap <leader>P "+P
vmap <leader>p "+p
vmap <leader>P "+P
" scrolling
nmap <leader>d <C-d>
nmap <leader>u <C-u>
vmap <leader>d <C-d>
vmap <leader>u <C-u>
" actions
nmap <leader>h <action>(PreviousTab)
nmap <leader>l <action>(NextTab)
nmap <leader>bd <action>(CloseEditor)
nmap <leader>i <action>(Generate)
nmap <leader>m <action>(Git.Menu)
nmap <leader>/ <action>(ShowErrorDescription)
nmap <leader>e <action>(GotoNextError)
nmap <leader>t <action>(ActivateTerminalToolWindow)
nmap <leader>q <action>(HideAllWindows)
nmap <leader>a <action>(GotoAction)
nmap <leader>r <action>(ChooseRunConfiguration)
nmap <leader>aq <action>(CloseAllEditorsButActive)
nnoremap <leader><leader> <C-Tab>
set NERDTree
let g:NERDTreeMapActivateNode='l'
let g:NERDTreeMapJumpParent='h'
기능 설명
각자만의 최적의 단축키들을 설정해보자
nmap h (PreviousTab)' : (spacebar + h) 이전 탭
nmap l (NextTab): (spacebar + l) 다음 탭
nmap bd (CloseEditor) : (spacebar + bd ) 창 닫기
nmap m (Git.Menu) : (spacebar + m) git 메뉴
nmap / (ShowErrorDescription) : (spacebar + / ) : 에러 설명 보기
nmap e (GotoNextError): (spacebar + e) 다음 에러로 이동
nmap t (ActivateTerminalToolWindow) : (spacebar + t) 터미널
nmap q (HideAllWindows): (spacebar + q) 코드화면만 보기
nmap a (GotoAction) : (spacebar + a) 액션 입력 창 실행
nmap r (ChooseRunConfiguration): (spacebar + r) 애플리케이션 실행
nmap aq (CloseAllEditorsButActive): 현재 탭 이외에 모든 탭 닫기
'Productivity' 카테고리의 다른 글
블로그 프로필 그려줘(feat.뤼튼) (1) | 2023.12.03 |
---|---|
ChatGPT를 이용하여 티스토리 블로그 쉽게 작성하기 (0) | 2023.12.02 |
내가 사용하는 생산성 도구들 (0) | 2023.09.02 |