출처: https://typemin.tistory.com/7 [TypeLOG:티스토리]

우선 개발자스럽게 코딩을 하려면 마우스에 손이 안가야(?) 된다(?)

우선 내가 사용하는 있는 환경은 IDEA(Intellij) 이다. Vim을 사용하면 마우스를 사용하지 않고 코딩을 할수있게 되는데 이에 관련된 설정을 공유하고자 한다.

VIM의 장점을 설명하자면 진짜 익숙해지면 마우스 못쓴다. 온갖 핑계를 대면서 다른환경에서도 VIM을 깔고있는 자신을 보게된다.(이것만으로 장점을 설명해준거 같다.)

설치


우선 IDEA Plugin에 들어가서 VIM을 검색해 IDeaVim을 설치한다.
여기서 필자는 밑에 Extension이라는 것을 추가로 설치하였는데. esc키를 눌렀을때 자동으로 영어로 바꿔준다. (설정이 필요함 아래에서 설명)

노말모드 (움직이는 모드) 영어로만 유지하는 설정

let keep_input_source_in_normal=ABC
set keep-english-in-normal

사용법


우선 VIM에대한 설명은 다른 블로그에서도 많이 찾아볼수 있기 때문에 추가로 설명하지는 않을것이다.

아래는 intellij에서 ideaVim을 사용할때 추가로 설정해줄수 있는 것인데

밑에 V모양을 클릭하여 이동한다.

위에 스크린샷을 따라가면 설정을 할수있다. 

"" Source your .vimrc
"source ~/.vimrc

" english auto change
let keep_input_source_in_normal=ABC
set keep-english-in-normal
" set keep-english-in-normal-and-restore-in-insert

let mapleader=" " "스페이스바로 leader키를 사용할수있게한다.
set ignorecase
set smartcase
set visualbell
set number relativenumber 
" set noerrorbells
set expandtab
set autoindent
set hlsearch
set incsearch
set ideajoin
set mouse=a
set idearefactormode=keep
set mousefocus
set scollfocus
set scrolloff=3
set highlightedyank

" 3 lines above/below cursor when scrolling
set NERDTree
" set surround
set multiple-cursors
" set easymotion 
" set quickscope


" essential
noremap H ^ "이부분은 초보자세팅을하면 삭제해야됩니다.
noremap L $ "이부분은 초보자세팅을 사용하면 삭제해야합니다.
" toggle sidebar
nmap <C-e> :NERDTreeFocus<cr>

" These create newlines like o and O but stay in normal mode

" zen mode
noremap <leader>kz :action ToggleZenMode<CR>

" Quit visual mode
" nnoremap k kzz "커서가 중간에 위치하게한다.
" nnoremap j jzz "위와 동일
nnoremap <leader>y "+y "운영체제에 clipboard에 카피한다.
nnoremap <leader>p "+p "운영체제에 clipboard를 paste한다.
vnoremap <leader>y "+y
nnoremap Y y$
vnoremap v <Esc>
nnoremap <esc> :noh<cr>:w<cr><esc> "esc 키를 누르면 저장과 하이라이트된 단어를 취소시킨다.
inoremap <Esc> <Esc>:w<CR>
" nnoremap jk :noh<cr>:w<cr><esc>
inoremap jk <esc>:w<CR>
inoremap ㅓㅏ <esc>:w<CR>
" nnoremap ㅓㅏ :noh<cr>:w<cr><esc>
" Tab operation
nnoremap <leader>l gt "열려 있는 파일을 이동한다.
nnoremap <leader>h gT "열려 있는 파일을 이동한다.

" mehotd up
nmap [[ <Action>(MethodUp)
nmap ]] <Action>(MethodDown)

" goto Error and Declaration 이것들은 거의 필수와 마찬가지다 정의된 코드로 이동하는 명령어다."
nmap gb <Action>(Back)
nmap gD <Action>(GotoTypeDeclaration)
nmap gf <Action>(Forward)
nmap gl <Action>(QuickJavaDoc)
nmap gL <Action>(QuickImplementations)
nmap gy <Action>(ShowErrorDescription)
nmap gn <Action>(GotoNextError)
nmap gp <Action>(GotoPreviousError)
nmap <TAB> <Action>(GotoNextError)
nmap <S-TAB> <Action>(GotoPreviousError)

"Editor indent" 
nmap > <S-v>:action EditorIndentSelection<cr>
nmap < <S-v>:action EditorUnindentSelection<cr>
vmap > <Action>(EditorIndentSelection)
vmap < <Action>(EditorUnindentSelection)

" moving row"
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
vnoremap <C-j> :action MoveStatementDown<CR>
vnoremap <C-k> :action MoveStatementUp<CR>


" Refactorings
map <leader>t <Action>(Refactorings.QuickListPopupAction)
map Tr <Action>(RenameElement)
" SurroundWith
map Ts <Action>(SurroundWith)
" VSC Popup
nmap Tv <Action>(Vcs.QuickListPopupAction)
" Inspectiom
nmap Ti <Action>(InspectCode)
map Ta <Action>(AnalyzeActionsPopup)
nmap To <Action>(OptimiziImports)

" Closing tabs
nmap <leader>q :action CloseContent<cr>
nmap <leader>Q :action CloseAllEditorsButActive<cr>

" edit ideavim config
nnoremap <leader>vv :e ~/.ideavimrc<CR>
nnoremap <leader>vr :source ~/.ideavimrc<CR>

" code Run & Debug
nmap <leader>r :action Run<cr>
nmap <leader>d :Debug<cr>

" Navigation
nmap <leader>L :action RecentLocations<cr>
" nmap <leader>g :action GotoDeclaration<cr>
nmap <leader>i :action GotoImplementation<cr>
nmap <leader>u :action FindUsages<cr>
nmap <leader>f :action GotoFile<cr>
nmap <leader>c :action GotoClass<cr>
nmap <leader>s :action GotoSymbol<cr>
nmap <leader>; :action FileStructurePopup<cr>
nmap <leader>I :action SelectIn<cr>
nmap <leader>e :action RecentFiles<cr>
nmap <leader>b :action ShowBookmarks<cr>
nmap <C-Enter> :action Generate<cr>
imap <C-Enter> :action Generate<cr>


" multi Cursor
map <C-N>  <A-N>
map <C-P>  <A-P>
map <C-X>  <A-X>

map g<C-N> <Action>(SelectAllOccurrences)

입문자들을 위한 추천세팅

원래 VIM은 hjkl키로 이동을 할수있다. 하지만 익숙치 않으면 이게 더 복잡하고 어렵다. 

이 설정을 하면 이렇게 움직일수 있다 (호호)

이것을 설정으로 보통 키보드의 방향키와 비슷하게 바꿀수있다. 하지만 조금 달라지는부분이 있어 숙지하고 넘어가야 나중에 viw등을 봤을때 헷갈리지 않고 사용할수있다.

"아래의 코드를 에세셜에 넣어주면 ijkl로 매핑을해 사용할수있다.
noremap j h
noremap i k
noremap k j
noremap h i
noremap J ^
noremap L $
noremap H I

" 맨위 이동 맨 아래 이동
nmap I gg
nmap K G 
vmap I gg
vmap K G

중요 !!

원래 VIM에서 Insert모드에 들어가기위해선 i를 사용한다.

우리가한매핑방식은 i키를 움직이는 키로 변경했기 때문에 해당 i를 대체할 키가 필요한데 이 설정파일에서는 i 를 h 로 변경하였다.

그래서 나중에 viw(단어선택) diw(단어삭제) 를 하기위해선 i 가 h 로 바뀐걸 인식하고 vhw, dhw로 사용하여야 한다.

카카오 가고싶다..

반응형

'개발환경' 카테고리의 다른 글

m1 vscode C/Cpp 개발환경 구축(debug 터미널 포함)  (0) 2022.01.21

+ Recent posts