[Neovim] Custom Keymap ์„ค์ •ํ•˜๊ธฐ

@zunione ยท November 11, 2025 ยท 7 min read

๐Ÿš€ ๋“ค์–ด๊ฐ€๋ฉฐ

Vim์„ ์ฒ˜์Œ ์‚ฌ์šฉํ•ด๋ณธ ์‚ฌ๋žŒ์ด๋ผ๋ฉด ๋ชจ๋‘ ํ•œ๋ฒˆ์ฏค์€, ์Šต๊ด€์ ์œผ๋กœ Ctrl+Z๋กœ ์ทจ์†Œ๋ฅผ ํ•˜๋ ค๋‹ค ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ผ์‹œ์ •์ง€๋˜์–ด Vim์ด ๊บผ์ ธ๋ฒ„๋ ค ๋‹นํ™ฉํ•œ ๊ธฐ์–ต์ด ์žˆ์„ ๊ฒƒ์ด๋‹ค.๐Ÿคฆ ๋‚˜๋งŒ ํ•ด๋„ ๊ต์ˆ˜๋‹˜์ด ๋‹น๋ถ€์— ๋‹น๋ถ€๋ฅผ ๊ฑฐ๋“ญํ•˜์…จ์Œ์—๋„ ์‹œํ—˜์„ ๋ณด๋‹ค ์Šต๊ด€์ ์œผ๋กœ Ctrl+Z๋ฅผ ๋ˆ„๋ฅด๊ณ ... ์†์„ ๋‹ฌ๋‹ฌ ๋–จ๋ฉฐ ๊ธฐ์–ต์„ ๋”๋“ฌ์–ด fg๋กœ ๋ณต๊ตฌํ•œ ๊ฒฝํ—˜์ด ์žˆ๋‹ค ๐Ÿ˜ต

์ด๋ ‡๊ฒŒ ์œˆ๋„์šฐ์™€ ๋ฆฌ๋ˆ…์Šค ๋ฐ Vim์˜ ๋‹จ์ถ•ํ‚ค๊ฐ€ ๋‹ค๋ฅธ ๊ฒŒ ์ •๋ง ๋ถˆํŽธํ•œ ์š”์†Œ ์ค‘ ํ•˜๋‚˜์ธ๋ฐ, Neovim์—์„œ ํ‚ค ๋งคํ•‘์„ ํ†ตํ•ด ์ด ๊ฐ„๊ทน์„ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

์šฐ๋ฆฌ์˜ ๋ชฉํ‘œ๋Š” ํ•ญ์ƒ! VSCode์™€ ๊ฐ€์žฅ ์œ ์‚ฌํ•œ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ๋งŒ๋“œ๋Š” ๊ฒƒ์ด๋ฏ€๋กœ ์ตœ๋Œ€ํ•œ ์œˆ๋„์šฐ ๋ฐ VSCode์™€ ์ด์งˆ๊ฐ์ด ์—†๊ฒŒ ์ปค์Šคํ…€์„ ํ•ด ๋ณด์ž.

๐ŸŽฏ ํŒŒ์ผ ์ƒ์„ฑ ๋ฐ ์ ์šฉ

๋จผ์ € lua/core/keymaps.lua ํŒŒ์ผ์„ ์ƒ์„ฑํ•œ๋‹ค. ์ด์ „ ํฌ์ŠคํŠธ์ฒ˜๋Ÿผ ํŒŒ์ผ ํŠธ๋ฆฌ์—์„œ aํ‚ค๋กœ ์ƒ์„ฑํ•˜๊ฑฐ๋‚˜ ํ„ฐ๋ฏธ๋„์—์„œ touch ๋ช…๋ น์–ด๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

๊ทธ ํ›„ init.lua ํŒŒ์ผ์— ์ƒ์„ฑํ•œ keymaps.lua ํŒŒ์ผ์„ importํ•œ๋‹ค.

require 'core.keymaps'

โŒจ๏ธ ํ‚ค๋งต ์˜ต์…˜ ์„ค์ •

๋จผ์ € ํ‚ค๋งต ์„ค์ •์— ์ž์ฃผ ์‚ฌ์šฉํ•  ์˜ต์…˜๋“ค์„ ๋ณ€์ˆ˜๋กœ ์ •์˜ํ•ด๋‘๋ฉด ์ฝ”๋“œ๊ฐ€ ํ›จ์”ฌ ๊น”๋”ํ•ด์ง„๋‹ค.

local keyset = vim.keymap.set
local remap_opt = { remap = true }
local remap_silent_opt = { remap = true, silent = true }
local noremap_opt = { noremap = true }
local noremap_silent_opt = { noremap = true, silent = true }
  • keyset: vim.keymap.set์˜ ์ถ•์•ฝํ˜•์œผ๋กœ ํƒ€์ดํ•‘์„ ์ค„์—ฌ์ค€๋‹ค.
  • noremap: ์žฌ๊ท€์  ๋งคํ•‘์„ ๋ฐฉ์ง€ํ•œ๋‹ค. ํ‚ค๋งต์ด ๋‹ค๋ฅธ ํ‚ค๋งต์„ ๋‹ค์‹œ ํ˜ธ์ถœํ•˜์ง€ ์•Š๋„๋ก ํ•œ๋‹ค.
  • silent: ๋ช…๋ น์–ด ์‹คํ–‰ ์‹œ ํ•˜๋‹จ์— ๋ฉ”์‹œ์ง€๋ฅผ ํ‘œ์‹œํ•˜์ง€ ์•Š๋Š”๋‹ค.
  • remap: ํ”Œ๋Ÿฌ๊ทธ์ธ์˜ ํ‚ค๋งต์„ ์žฌ์‚ฌ์šฉํ•  ๋•Œ ํ•„์š”ํ•˜๋‹ค.

๐Ÿ‘” Leader ํ‚ค ์„ค์ •

vim.g.mapleader = ' '
vim.g.maplocalleader = ' '

keyset({ 'n', 'v' }, '<Space>', '<Nop>', { silent = true })

Leader ํ‚ค๋Š” ๋ณต์žกํ•œ ๋ช…๋ น์–ด ์กฐํ•ฉ์˜ ์‹œ์ž‘์ ์ด ๋˜๋Š” ํ‚ค๋‹ค. ์œˆ๋„์šฐ๊ฐ€ ๋ณดํ†ต Ctrlํ‚ค์™€ ๊ธ€์ž ํ‚ค๋ฅผ ์กฐํ•ฉํ•ด ๋‹จ์ถ•์–ด๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ, Neovim์—์„œ๋Š” ๋ฆฌ๋” ํ‚ค์™€ ๋‹ค๋ฅธ ์ผ๋ฐ˜ ํ‚ค๋ฅผ ์กฐํ•ฉํ•œ๋‹ค.

๋ณดํ†ต Space๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๋Š”๋ฐ, ์†๊ฐ€๋ฝ์ด ๋‹ฟ๊ธฐ ๊ฐ€์žฅ ํŽธํ•œ ์œ„์น˜๋ผ ์ž์ฃผ ์“ฐ๋Š” ๋ช…๋ น์–ด๋“ค์„ ์กฐํ•ฉํ•˜๊ธฐ ์ข‹๋‹ค. <Nop>๋กœ ์„ค์ •ํ•œ ์ด์œ ๋Š” Space์˜ ๊ธฐ๋ณธ ๋™์ž‘(์ปค์„œ ์˜ค๋ฅธ์ชฝ ์ด๋™)์„ ๋น„ํ™œ์„ฑํ™”ํ•˜์—ฌ Leader ํ‚ค๋กœ๋งŒ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•จ์ด๋‹ค.

์Šฌ์Šฌ ์ง€๊ฒจ์šธ ์ˆ˜๋„ ์žˆ์ง€๋งŒ ๐Ÿ˜… ์šฐ๋ฆฌ๋Š” VSCode๋ฅผ ์ง€ํ–ฅํ•˜๋‹ˆ๊นŒ.. ๋ฆฌ๋” ํ‚ค๋Š” ๋‚˜์ค‘์„ ์œ„ํ•ด ์ผ๋‹จ ์„ค์ •๋งŒ ํ•ด ๋‘์—ˆ๊ณ  ์‹ค์ œ๋กœ ๋‹จ์ถ•์–ด๋ฅผ ์„ค์ •ํ•ด ๋‘์ง€๋Š” ์•Š์•˜๋‹ค.

๋ณ€์ˆ˜ ์ˆœ์„œ๋Š” '๋ชจ๋“œ', '์„ค์ •ํ•  ํ‚ค๋งต', '์‹คํ–‰ํ•  ๋ช…๋ น', '์˜ต์…˜' ์ˆœ์ด๋‹ค.

๐ŸŒ ์ „์—ญ ํ•จ์ˆ˜

Neo-tree ํ† ๊ธ€ ํ•จ์ˆ˜

function _G.toggle_neotree()
  local manager = require("neo-tree.sources.manager")
  local state = manager.get_state("filesystem")

  if state.winid and vim.api.nvim_win_is_valid(state.winid) then
    require('neo-tree.command').execute({ action = "close" })
  else
    require('neo-tree.command').execute({ action = "focus", source = "filesystem" })
  end
end

Neo-tree๊ฐ€ ์—ด๋ ค์žˆ์œผ๋ฉด ๋‹ซ๊ณ , ๋‹ซํ˜€์žˆ์œผ๋ฉด ์—ด๋„๋ก ํ•˜๋Š” ํ† ๊ธ€ ํ•จ์ˆ˜๋‹ค. Ctrl+B๋กœ VSCode์˜ ์‚ฌ์ด๋“œ๋ฐ” ํ† ๊ธ€์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

๐Ÿ•น๏ธ Normal ๋ชจ๋“œ - ํŽธ์ง‘ ๋ฐ ํŒŒ์ผ ๊ด€๋ฆฌ

์œ ์šฉํ•œ Normal ๋ชจ๋“œ ํ‚ค๋งต

keyset('n', 'dd',     '"_dd', noremap_opt)    -- ์ค„ ์‚ญ์ œ (๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅ ์•ˆ ํ•จ)
keyset('n', 'dt',     '<CMD>lua vim.diagnostic.config({virtual_text = not vim.diagnostic.config().virtual_text})<CR>', noremap_opt) -- LSP ์ง„๋‹จ ๋ฉ”์‹œ์ง€ ํ† ๊ธ€

dd๋ฅผ ์žฌ์ •์˜ํ•ด์„œ ์‚ญ์ œํ•œ ๋‚ด์šฉ์ด ํด๋ฆฝ๋ณด๋“œ๋ฅผ ์˜ค์—ผ์‹œํ‚ค์ง€ ์•Š๋„๋ก ํ–ˆ๋‹ค. Vim์—์„œ๋Š” ์‚ญ์ œ๋„ ๋ณต์‚ฌ์ฒ˜๋Ÿผ ๋ ˆ์ง€์Šคํ„ฐ์— ์ €์žฅ๋˜๋Š”๋ฐ, ์ด๊ฒŒ ์€๊ทผ ๋ถˆํŽธํ•  ๋•Œ๊ฐ€ ๋งŽ๋‹ค.

๋˜ํ•œ diagnostic์ด ๋„ˆ๋ฌด ๋งŽ์ด ํ‘œ์‹œ๋˜์–ด ์žˆ์œผ๋ฉด ์ฝ”๋“œ์™€ ๊ตฌ๋ณ„๋˜์ง€ ์•Š์„ ๋•Œ๊ฐ€ ์žˆ์–ด, ์ด๋ฅผ ํ† ๊ธ€ํ•  ์ˆ˜ ์žˆ๋Š” dt ๋‹จ์ถ•ํ‚ค๋ฅผ ์ถ”๊ฐ€ํ–ˆ๋‹ค.

VSCode ์Šคํƒ€์ผ ๋‹จ์ถ•ํ‚ค

keyset('n', '<C-Q>',  '<CMD>qa<CR>', noremap_opt)        -- ๋ชจ๋“  ์ฐฝ ๋‹ซ๊ธฐ
keyset('n', '<C-W>',  '<CMD>q<CR>', noremap_opt)         -- ํ˜„์žฌ ์ฐฝ ๋‹ซ๊ธฐ
keyset('n', '<C-A>',  'gg<S-V>G', noremap_opt)           -- ์ „์ฒด ์„ ํƒ
keyset('n', '<C-S>',  '<CMD>noautocmd w<CR>', noremap_opt) -- ์ €์žฅ (ํฌ๋งทํŒ… ์—†์ด)
keyset('n', '<C-Z>',  'u', noremap_opt)                  -- Undo
keyset('n', '<C-S-Z>', '<C-R>', noremap_opt)             -- Redo
keyset('n', '<C-X>',  'dd', noremap_opt)                 -- ํ˜„์žฌ ์ค„ ์ž˜๋ผ๋‚ด๊ธฐ
keyset('n', '<C-C>',  'yy', noremap_opt)                 -- ํ˜„์žฌ ์ค„ ๋ณต์‚ฌ
keyset('n', '<C-V>',  'p', noremap_opt)                  -- ๋ถ™์—ฌ๋„ฃ๊ธฐ
keyset('n', '<C-B>',  '<CMD>lua toggle_neotree()<CR>', noremap_opt) -- ํŒŒ์ผ ํŠธ๋ฆฌ ํ† ๊ธ€
keyset('n', '<C-_>',  'gcc', remap_opt)                  -- ์ฃผ์„ ํ† ๊ธ€ (Ctrl+/)

VSCode์—์„œ ๋„˜์–ด์˜จ ์‚ฌ๋žŒ๋“ค์ด ๊ฐ€์žฅ ํ—ท๊ฐˆ๋ คํ•˜๋Š” ๋ถ€๋ถ„์„ ํ•ด๊ฒฐํ–ˆ๋‹ค. ํŠนํžˆ Ctrl+S ์ €์žฅ์ด ๋จนํžˆ์ง€ ์•Š์œผ๋ฉด ์—„์ฒญ ๋‹ต๋‹ตํ•œ๋ฐ, ์ด์ œ ์ต์ˆ™ํ•œ ๋‹จ์ถ•ํ‚ค๋กœ ํŽธํ•˜๊ฒŒ ์ž‘์—…ํ•  ์ˆ˜ ์žˆ๋‹ค.

<C-_>๊ฐ€ Ctrl+/์ธ ์ด์œ ๋Š” ํ„ฐ๋ฏธ๋„์—์„œ Ctrl+/๊ฐ€ Ctrl+_๋กœ ์ธ์‹๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ฃผ์„ ํ† ๊ธ€ ๊ธฐ๋Šฅ์€ Comment ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์„ค์น˜ํ•˜๋ฉด ํ™œ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

Leader ํ‚ค ์กฐํ•ฉ - Telescope & Git (TBD)

keyset('n', 'ff',     '<CMD>Telescope find_files<CR>', noremap_opt)  -- ํŒŒ์ผ ๊ฒ€์ƒ‰
keyset('n', 'fg',     '<CMD>Telescope live_grep<CR>', noremap_opt)   -- ํ…์ŠคํŠธ ๊ฒ€์ƒ‰
keyset('n', 'fh',     '<CMD>Telescope help_tags<CR>', noremap_opt)   -- ๋„์›€๋ง ๊ฒ€์ƒ‰
keyset('n', 'fb',     '<CMD>Telescope buffers<CR>', noremap_opt)     -- ๋ฒ„ํผ ๋ชฉ๋ก

keyset('n', 'fs',     '<CMD>Gitsigns diffthis<CR>', noremap_opt)     -- Git diff ๋ณด๊ธฐ
keyset('n', 'fd',     '<CMD>Gitsigns preview_hunk<CR>', noremap_opt) -- Git hunk ๋ฏธ๋ฆฌ๋ณด๊ธฐ

Telescope๋Š” ํŒŒ์ผ ์ฐพ๊ธฐ, ํ…์ŠคํŠธ ๊ฒ€์ƒ‰ ๋“ฑ์„ ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ•๋ ฅํ•œ ํผ์ง€ ํŒŒ์ธ๋”๋‹ค. Space + ff๋งŒ ๋ˆ„๋ฅด๋ฉด ํ”„๋กœ์ ํŠธ ์ „์ฒด์—์„œ ํŒŒ์ผ๋ช…์œผ๋กœ ๊ฒ€์ƒ‰์ด ๊ฐ€๋Šฅํ•˜๊ณ , Space + fg๋กœ ๋‚ด์šฉ๊นŒ์ง€ ๊ฒ€์ƒ‰ํ•  ์ˆ˜ ์žˆ๋‹ค.

Git ๊ด€๋ จ ๊ธฐ๋Šฅ๋„ Space + f ์กฐํ•ฉ์œผ๋กœ ํ†ต์ผํ•ด์„œ ์™ธ์šฐ๊ธฐ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์—ˆ๋‹ค.

(TBD)

โœ๏ธ Insert ๋ชจ๋“œ - ํŽธ์ง‘ ์ค‘ ๋‹จ์ถ•ํ‚ค

keyset('i', '<C-A>',    '<ESC><ESC>gg<S-V>G', noremap_opt)     -- ์ „์ฒด ์„ ํƒ
keyset('i', '<C-S>',    '<ESC><ESC>:w<CR>', noremap_opt)       -- ์ €์žฅ
keyset('i', '<C-Z>',    '<ESC><ESC>ua', noremap_opt)           -- Undo
keyset('i', '<C-S-Z>',  '<ESC><ESC><C-R>a', noremap_opt)       -- Redo
keyset('i', '<C-X>',    '<ESC><ESC>dda', noremap_opt)          -- ํ˜„์žฌ ์ค„ ์ž˜๋ผ๋‚ด๊ธฐ
keyset('i', '<C-C>',    '<ESC><ESC>yya', noremap_opt)          -- ํ˜„์žฌ ์ค„ ๋ณต์‚ฌ
keyset('i', '<C-V>',    '<ESC><ESC>pi', noremap_opt)           -- ๋ถ™์—ฌ๋„ฃ๊ธฐ
keyset('i', '<C-B>',    '<CMD>lua toggle_neotree()<CR>', noremap_opt) -- ํŒŒ์ผ ํŠธ๋ฆฌ
keyset('i', '<C-_>',    '<ESC><ESC>gcca', remap_opt)           -- ์ฃผ์„ ํ† ๊ธ€
keyset('i', '<S-TAB>',  '<C-V><TAB>', noremap_opt)             -- ์‹ค์ œ ํƒญ ๋ฌธ์ž ์ž…๋ ฅ

Insert ๋ชจ๋“œ์—์„œ๋„ VSCode์ฒ˜๋Ÿผ ์ €์žฅํ•˜๊ณ  ๋ณต์‚ฌ/๋ถ™์—ฌ๋„ฃ๊ธฐ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋‹ค. <ESC><ESC>๋ฅผ ๋‘ ๋ฒˆ ๋„ฃ์€ ์ด์œ ๋Š” ๊ฐ€๋” ํ•œ ๋ฒˆ์œผ๋กœ๋Š” ๋ชจ๋“œ ์ „ํ™˜์ด ์ œ๋Œ€๋กœ ์•ˆ ๋  ๋•Œ๊ฐ€ ์žˆ์–ด์„œ๋‹ค.

๋ช…๋ น ์‹คํ–‰ ํ›„ ๋‹ค์‹œ Insert ๋ชจ๋“œ๋กœ ๋Œ์•„๊ฐ€๋„๋ก ๋์— a ๋˜๋Š” i๋ฅผ ๋ถ™์˜€๋‹ค.

Shift+Tab์€ expandtab ์˜ต์…˜ ๋•Œ๋ฌธ์— ์ŠคํŽ˜์ด์Šค๋กœ ๋ณ€ํ™˜๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•˜๊ณ  ์‹ค์ œ ํƒญ ๋ฌธ์ž๋ฅผ ์ž…๋ ฅํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

๐Ÿ‘๏ธ Visual ๋ชจ๋“œ - ๋ธ”๋ก ์„ ํƒ ๋ฐ ํŽธ์ง‘

๊ธฐ๋ณธ ๋‹จ์ถ•ํ‚ค ์ˆ˜์ •

keyset('v', 'd',      '"_d', noremap_opt)   -- ์‚ญ์ œ (๋ ˆ์ง€์Šคํ„ฐ ์ €์žฅ ์•ˆ ํ•จ)
keyset('v', 'c',      '"_c', noremap_opt)   -- ๋ณ€๊ฒฝ (๋ ˆ์ง€์Šคํ„ฐ ์ €์žฅ ์•ˆ ํ•จ)

Visual ๋ชจ๋“œ์—์„œ d์™€ c๋ฅผ ์žฌ์ •์˜ํ•ด์„œ ๋ถˆํ•„์š”ํ•œ ๋ ˆ์ง€์Šคํ„ฐ ์˜ค์—ผ์„ ๋ฐฉ์ง€ํ–ˆ๋‹ค. ์‹ค์ œ๋กœ ์ž˜๋ผ๋‚ด๊ธฐ๋ฅผ ํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋Š” Ctrl+X๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋œ๋‹ค.

keyset('v', '<BS>',     'd<ESC><ESC>i', noremap_opt)  -- ๋ฐฑ์ŠคํŽ˜์ด์Šค๋กœ ์‚ญ์ œ ํ›„ Insert
keyset('v', '<C-A>',    '<ESC><ESC>gg<S-V>G', noremap_opt)
keyset('v', '<C-S>',    '<ESC><ESC>:w<CR>', noremap_opt)
keyset('v', '<C-Z>',    '<ESC><ESC>u', noremap_opt)
keyset('v', '<C-S-Z>',  '<ESC><ESC><C-R>', noremap_opt)
keyset('v', '<C-X>',    'd', noremap_opt)             -- ์ž˜๋ผ๋‚ด๊ธฐ
keyset('v', '<C-C>',    'y', noremap_opt)             -- ๋ณต์‚ฌ
keyset('v', '<C-V>',    'p', noremap_opt)             -- ๋ถ™์—ฌ๋„ฃ๊ธฐ
keyset('v', '<C-B>',    '<CMD>lua toggle_neotree()<CR>', noremap_opt)
keyset('v', '<C-_>',    'gc', remap_opt)              -- ์ฃผ์„ ํ† ๊ธ€

Ctrl ํ‚ค ์กฐํ•ฉ์€ ์ด์ „๊ณผ ์œ ์‚ฌํ•˜๋‹ค.

๐Ÿ“‘ ๋ฒ„ํผ ๊ด€๋ฆฌ - Function ํ‚ค ํ™œ์šฉ

keyset('n', '<F1>',   '<CMD>BufferGoto1<CR>', noremap_silent_opt)
keyset('n', '<F2>',   '<CMD>BufferGoto2<CR>', noremap_silent_opt)
keyset('n', '<F3>',   '<CMD>BufferGoto3<CR>', noremap_silent_opt)
keyset('n', '<F4>',   '<CMD>BufferGoto4<CR>', noremap_silent_opt)
keyset('n', '<F5>',   '<CMD>BufferGoto5<CR>', noremap_silent_opt)
keyset('n', '<F6>',   '<CMD>BufferGoto6<CR>', noremap_silent_opt)
keyset('n', '<F7>',   '<CMD>BufferGoto7<CR>', noremap_silent_opt)
keyset('n', '<F8>',   '<CMD>BufferGoto8<CR>', noremap_silent_opt)
keyset('n', '<F9>',   '<CMD>BufferGoto9<CR>', noremap_silent_opt)
keyset('n', '<F10>',  '<CMD>BufferLast<CR>', noremap_silent_opt)

Barbar ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์‚ฌ์šฉํ•˜๋ฉด ์ƒ๋‹จ์— VSCode์ฒ˜๋Ÿผ ํƒญ์ด ํ‘œ์‹œ๋œ๋‹ค. Function ํ‚ค๋กœ ๋ฒ„ํผ๋ฅผ ๋ฒˆํ˜ธ๋กœ ๋ฐ”๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ์–ด์„œ ์—ฌ๋Ÿฌ ํŒŒ์ผ์„ ์˜ค๊ฐˆ ๋•Œ ์—„์ฒญ ํŽธํ•˜๋‹ค.

F10์€ ๋งˆ์ง€๋ง‰ ๋ฒ„ํผ๋กœ ์ด๋™ํ•˜๋„๋ก ์„ค์ •ํ–ˆ๋‹ค.

๐ŸŽ“ ๊ธฐํƒ€ ๊ณ ๊ธ‰ ๊ธฐ๋Šฅ (TBD)

Vim ๋ช…๋ น์–ด ์ถ•์•ฝ (Command Abbreviation)

vim.cmd([[
  ca ff Telescope find_files
  ca fg Telescope live_grep
  ca fh Telescope help_tags
  ca fb Telescope buffers
  ca fk Telescope keymaps
  ca fc Telescope commands
  ca fch Telescope command_history
  ca fsh Telescope search_history
  ca fhl Telescope highlights
  ca ww SudaWrite
]])

Command ๋ชจ๋“œ(: ์ž…๋ ฅ)์—์„œ ff๋งŒ ์ณ๋„ Telescope find_files๊ฐ€ ์ž๋™ ์™„์„ฑ๋œ๋‹ค. ๊ธด ๋ช…๋ น์–ด๋ฅผ ์งง๊ฒŒ ์ค„์—ฌ์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด ํŽธ๋ฆฌํ•˜๋‹ค.

ww๋Š” Suda ํ”Œ๋Ÿฌ๊ทธ์ธ์œผ๋กœ ๊ด€๋ฆฌ์ž ๊ถŒํ•œ์ด ํ•„์š”ํ•œ ํŒŒ์ผ์„ ์ €์žฅํ•  ๋•Œ ์‚ฌ์šฉํ•œ๋‹ค.

ํ…์ŠคํŠธ ๊ฒ€์ƒ‰ ๋ฐ ์น˜ํ™˜

vim.cmd([[
  vnoremap <F2>  y/<C-R>=escape(@",'/\')<CR><CR>N:%s/<C-R>=escape(@",'/\')<CR>/<C-R>=escape(@",'/\')<CR>/g<Left><Left>
  vnoremap <F3>  y/<C-R>=escape(@",'/\')<CR><CR>N
]])

Visual ๋ชจ๋“œ์—์„œ:

  • F2: ์„ ํƒํ•œ ํ…์ŠคํŠธ๋ฅผ ์ „์ฒด ํŒŒ์ผ์—์„œ ์ผ๊ด„ ์น˜ํ™˜ํ•  ์ˆ˜ ์žˆ๋Š” ๋ช…๋ น์–ด๋ฅผ ์ž๋™์œผ๋กœ ์ƒ์„ฑ
  • F3: ์„ ํƒํ•œ ํ…์ŠคํŠธ๋ฅผ ๊ฒ€์ƒ‰

VSCode์˜ Ctrl+H (์ฐพ๊ธฐ ๋ฐ ๋ฐ”๊พธ๊ธฐ) ๊ธฐ๋Šฅ๊ณผ ๋น„์Šทํ•˜๊ฒŒ ๋งŒ๋“  ํ‚ค๋งต์ด๋‹ค.

Telescope ์ปค์„œ ๋ชจ๋“œ ๊ฒ€์ƒ‰

vim.cmd([[
  nnoremap <F12> :lua require("telescope.builtin").grep_string({layout_strategy='cursor',layout_config={width=0.5, height=0.45}})<CR>
  inoremap <F12> <ESC><ESC>:lua require('telescope.builtin').grep_string({layout_strategy='cursor',layout_config={width=0.5, height=0.45}})<CR>
]])

F12๋ฅผ ๋ˆ„๋ฅด๋ฉด ์ปค์„œ ์•„๋ž˜ ๋‹จ์–ด๋ฅผ ํ”„๋กœ์ ํŠธ ์ „์ฒด์—์„œ ๊ฒ€์ƒ‰ํ•œ๋‹ค. ํ•จ์ˆ˜ ์ •์˜๋ฅผ ์ฐพ๊ฑฐ๋‚˜ ๋ณ€์ˆ˜ ์‚ฌ์šฉ์ฒ˜๋ฅผ ์ถ”์ ํ•  ๋•Œ ์œ ์šฉํ•˜๋‹ค.

โœจ ๋งˆ์น˜๋ฉฐ

์ง€๊ธˆ๊นŒ์ง€ ์—…๋กœ๋“œํ–ˆ๋˜ ํฌ์ŠคํŠธ ์ค‘์—์„œ ๊ฐ€์žฅ ๋‹ค๋“ฌ์–ด์ง€์ง€ ์•Š์•˜๋‹ค๋Š” ๋А๋‚Œ์ด ๋‹ค์†Œ ๋“ ๋‹ค. ์•„์ง Neovim์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ๋“ค์„ ์ตํžˆ์ง€ ๋ชปํ•˜๊ธฐ๋„ ํ–ˆ๊ณ , ํ”Œ๋Ÿฌ๊ทธ์ธ์„ ์ •๋ฆฌํ•ด๊ฐ€๋ฉด์„œ ํ‚ค๋งต์„ ๊ณ„์† ์—…๋ฐ์ดํŠธํ•ด์•ผํ•˜๊ธฐ ๋•Œ๋ฌธ์ธ ๊ฒƒ ๊ฐ™๋‹ค.

ํŠนํžˆ ์•„์ง ํฌ์ŠคํŒ…ํ•˜์ง€ ์•Š์€ LSP์™€ Telescope ์„ค์ •์ด ์™„๋ฃŒ๋˜์ง€ ์•Š์•„์„œ ์™„์„ฑ๋œ ํ‚ค๋งต ํŒŒ์ผ์„ ๋‚ด๋†“๊ธฐ๋Š” ์กฐ๊ธˆ ๋ฌด๋ฆฌ๊ฐ€ ์žˆ๋‹ค. ํฌ์ŠคํŒ…์„ ์ด์–ด๊ฐ€๋ฉด์„œ ๋‚˜๋งŒ์˜ ์„ค์ •์„ ๊ณ„์† ์ •๋ฆฌํ•˜๊ณ , ํ‚ค๋งต ํฌ์ŠคํŒ…๋„ ์ˆ˜์ •ํ•ด ๋‚˜๊ฐ€์•ผ๊ฒ ๋‹ค.

@zunione
์ „ํฌ์›