Cursor IDE에서 VSCode Neovim 익스텐션을 사용해서 Neovim을 활성화해서 쓰고 있다.
이 익스텐션은 실제 Neovim 인스턴스를 백엔드로 사용하기 때문에 내 Neovim 설정이 그대로 적용된다.
Neovim을 쓰면서 적용한 설정들을 정리해봤다.
플러그인 관리는 lazy.nvim을 사용하고 있다.
~/.config/nvim/
├── init.lua # 메인 진입점
├── vimConfig.vim # 기존 .vimrc 로드
├── lua/
│ ├── config/
│ │ └── lazy.lua # lazy.nvim 부트스트랩
│ └── plugins/ # 플러그인별 설정
│ ├── camelcasemotion.lua
│ ├── dracula.lua
│ ├── hop.lua
│ ├── nvim-tree.lua
│ ├── vim-surround.lua
│ └── vim-visual-multi.lua
init.lua에서 기존 .vimrc 설정을 불러오고, lazy.nvim으로 플러그인들을 관리한다.
let g:mapleader = ','
Leader 키는 ,로 설정했다. 기본값인 \보다 누르기 편해서 이렇게 쓰고 있다.
nnoremap d "_d
nnoremap s "_s
nnoremap c "_c
nnoremap x "_x
nnoremap X "_X
vnoremap p "_dP
vnoremap d "_d
vnoremap s "_s
vnoremap c "_c
vim의 기본 동작은 d, c, x 등으로 텍스트를 삭제하면 그게 기본 레지스터에 들어간다.
그래서 뭔가를 복사해두고 다른 텍스트를 지우면, 복사해둔 내용이 날아가버리는 문제가 있다.
위 설정으로 삭제 계열 명령어들이 블랙홀 레지스터("_)로 가게 해서 기본 레지스터를 오염시키지 않는다.
진짜로 잘라내기를 하고 싶으면 <leader>d로 가능하게 해뒀다.
map <leader>d "_dd
vnoremap p "_dP
비주얼 모드에서 텍스트를 선택하고 p로 붙여넣기 할 때, 원래는 덮어쓴 텍스트가 레지스터에 들어간다.
이것도 블랙홀 레지스터로 보내서 원래 복사한 내용을 유지하게 했다.
set clipboard=unnamed,unnamedplus
시스템 클립보드와 vim 레지스터를 연동한다. y로 복사하면 바로 시스템 클립보드에도 들어간다.
set tabstop=2
set softtabstop=2
set shiftwidth=2
set expandtab
탭은 2칸 스페이스로 설정. 요즘 프론트엔드 쪽에서 많이 쓰는 설정이다.
set ignorecase
set smartcase
검색할 때 기본적으로 대소문자 구분 안 함. 근데 검색어에 대문자가 포함되면 대소문자 구분함.
augroup highlight_yank
autocmd!
if exists('##TextYankPost')
autocmd TextYankPost * silent! lua vim.highlight.on_yank({higroup="IncSearch", timeout=200})
endif
augroup END
y로 복사할 때 복사된 영역이 잠깐 하이라이트된다. 뭐가 복사됐는지 시각적으로 확인할 수 있어서 좋다.
map <leader>h :noh<CR>
map <leader>r :reg<CR>
map <leader>c m`gcc``
map <leader>v gv
map <leader>s %
<leader>h: 검색 하이라이트 끄기<leader>r: 레지스터 목록 보기<leader>c: 현재 줄 주석 토글<leader>v: 이전 선택 영역 다시 선택<leader>s: 매칭되는 괄호로 이동return {
'dracula/vim',
name = 'dracula',
lazy = false,
priority = 1000,
config = function()
vim.opt.termguicolors = true
vim.cmd('colorscheme dracula')
end
}
그냥 드라큘라 테마가 익숙해서 쓰고 있다.
return {
{
'bkad/CamelCaseMotion',
config = function()
vim.keymap.set({'n', 'o', 'x'}, 'w', '<Plug>CamelCaseMotion_w', { silent = true })
vim.keymap.set({'n', 'o', 'x'}, 'b', '<Plug>CamelCaseMotion_b', { silent = true })
vim.keymap.set({'n', 'o', 'x'}, 'e', '<Plug>CamelCaseMotion_e', { silent = true })
vim.keymap.set({'n', 'o', 'x'}, 'ge', '<Plug>CamelCaseMotion_ge', { silent = true })
end,
}
}
w, b, e 키로 단어 단위 이동할 때 camelCase나 snake_case 기준으로 이동하게 해준다.
getSomeValue에서 w를 누르면 get → Some → Value 이렇게 이동한다.
코드 편집할 때 상당히 유용함.
return {
'smoka7/hop.nvim',
version = "*",
config = function()
local hop = require('hop')
hop.setup({
keys = 'etovxqpdygfblzhckisuran'
})
local directions = require('hop.hint').HintDirection
vim.keymap.set('', 'f', function()
hop.hint_char1({ direction = directions.AFTER_CURSOR, current_line_only = true })
end, {remap=true})
vim.keymap.set('', 'F', function()
hop.hint_char1({ direction = directions.BEFORE_CURSOR, current_line_only = true })
end, {remap=true})
end
}
vim의 기본 f 키를 대체한다. f를 누르고 문자를 입력하면 해당 문자 위치에 힌트가 표시되고, 힌트 키를 누르면 바로 점프한다.
같은 줄에 동일한 문자가 여러 개 있어도 원하는 위치로 바로 갈 수 있어서 편하다.
return {
'tpope/vim-surround',
}
괄호나 따옴표로 텍스트를 감싸거나 변경할 때 쓴다.
ysiw": 단어를 "로 감싸기cs"': "를 '로 변경ds": " 제거return {
'mg979/vim-visual-multi',
branch = 'master',
config = function()
vim.g.VM_maps = {
['Find Under'] = '<C-n>',
['Find Subword Under'] = '<C-n>',
}
end
}
멀티 커서 플러그인. Ctrl+n으로 현재 단어와 같은 단어를 하나씩 선택해서 동시에 편집할 수 있다.
VSCode의 Cmd+d랑 비슷한 기능이다.
-- 특정 레지스터 내용을 클립보드로 복사
vim.keymap.set('n', '<leader>cr', function()
local reg = vim.fn.nr2char(vim.fn.getchar())
vim.fn.setreg('+', vim.fn.getreg(reg))
print('Copied register "' .. reg .. '" to clipboard')
end, { desc = 'Paste register to clipboard' })
-- 클립보드 내용을 특정 레지스터로 복사
vim.keymap.set('n', '<leader>pr', function()
local reg = vim.fn.nr2char(vim.fn.getchar())
vim.fn.setreg(reg, vim.fn.getreg('+'))
print('Pasted clipboard to register "' .. reg .. '"')
end, { desc = 'Paste clipboard to register' })
vim.keymap.set('n', '<leader>w', 'viw', { desc = 'Select inner word' })
vim.keymap.set('n', '<leader>x', 'dd', { desc = 'Cut current line' })
<leader>cr + 레지스터 키: 해당 레지스터 내용을 시스템 클립보드로 복사<leader>pr + 레지스터 키: 시스템 클립보드 내용을 해당 레지스터로 복사<leader>w: 현재 단어 선택<leader>x: 현재 줄 삭제이 글은 Cursor CLI에서 Claude 에이전트에게 "neovim 설정을 정리해달라"고 요청하여 작성되었습니다.