뾰족한 수는 없겠거니 하고, 지금까지 아무런 조치없이 꿋꿋이 백틱을 입력하고 있었습니다. 그런데, 최근 kmonad를 설치하면서 쓸만한 키 조합이 많아져서, 어떻게든 해결 보겠다고 덤볐습니다.
환경
linux, xwindow, 세벌식, Neovim, 레오폴드 키보드 FC660M
필요 앱
KIME, KMonad, Neovim (nvim-autopairs, nvim-surround)
FC660M은 숫자 키패드가 없는 키보드로 ESC
, ~
, ※
, `
키가 하나의 키에 모두 모여 있습니다. 한글을 입력 중이라면, 영문 모드로 바꿔 FN
과 ESC
를 함께 눌러 `
를 입력합니다. 블로그 글을 많이 쓰면 쓸수록 점점 더 귀찮아지고 있는 상태였습니다.
오른쪽 Ctrl키가 놀고 있습니다. FN
과 같이 누르지 않고 입력하기 위해, 아래 설정으로 키값을 바꿔 놓습니다.
(deflayer default
_ _ _ _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ _ _ _ _ _ _ _ _ _
@ccr _ _ _ _ _ _ _ _ _ _ _ _
@sbs _ _ _ _ _ _ _ _ _ _ _
_ _ _ _ _ ` )
자세한 설정 방법은 터미널 Neovim에서 Ctrl + Enter 바인딩 잡기 - Kmonad 글을 참고해 주세요.
한글 모드건, 영문 모드건 오른쪽 Ctrl
키를 누르면 `
가 입력될 줄 알았는데, 한글 모드 상태에선 세벌식이 `
키가 눌리면 별을 입력합니다. 세벌식 키보드 레이아웃을 바꿔야 합니다.
.bashrc
(zsh 쓰시면 .zshrc
)export XDG_CONFIG_HOME=/home/user/.config
/home/user/.config/kime/layouts/
에sebeolsik-3-91.yaml
를 다운 받습니다.(저는 세벌식 최종을 씁니다.)그리고 62번줄을 다음으로 바꿉니다.
`Grave : '`'
위 설정으로 영문 한글 모드 상관없이 키 하나로 `
를 입력할 수 있게 됐습니다. 이제 Neovim에서 편의를 위한 기능을 설정할 차례입니다.
https://github.com/windwp/nvim-autopairs
{
'windwp/nvim-autopairs',
config = function()
local npairs = require("nvim-autopairs")
npairs.setup({
fast_wrap = {
map = '<C-a>',
chars = { '{', '[', '(', '"', "'", '`' },
}
...
})
},
`
를 감싸고 싶은 문자열 앞에 입력하면, 자동으로 `
`
두 개가 입력되고, 그 사이에서 <Ctrl + a>
누르면 아래와 같이 몇 가지 룰에 따라 입력될 위치를 단축키로 선택할 수 있게 해줍니다.
https://github.com/kylechui/nvim-surround
{
"kylechui/nvim-surround",
lazy = false,
config = function()
-- 닫는 백틱 바로 다음에 커서가 있어야 하는데,
-- 줄 끝일 경우 a로는 백틱 바로 앞에 커서가 있다.
-- 줄 끝일 때는 A를 입력한다.
local right = function ()
local nowCol = vim.api.nvim_eval([[virtcol('.')]])
local lastCol = vim.api.nvim_eval([[virtcol('$')]]) - 1
if nowCol == lastCol then
vim.cmd("startinsert!") -- !가 붙으면 A
else
vim.cmd("norm! a")
end
end
require("nvim-surround").setup {}
-- 디폴트 `ys`를 선행키로 잡으면 약간의 딜레이가 생긴다.
-- 여기선 v모드를 이용한다.
vim.keymap.set('n', 's', function() vim.cmd.normal("viwS`f`l") end, { desc = 'Surround backtick' })
vim.keymap.set('i', '<C-s>', function() vim.cmd.normal("hviwS`f`l"); right() end, { silent = false })
vim.keymap.set('v', '<C-s>', function() vim.cmd.normal("S`f`"); right() end, { silent = false })
end,
-- vi{ v모드 {괄호 안쪽 선택
},
아래 설명에서 []
는 노멀모드 커서 위치, |
는 입력모드 커서 위치
노멀 모드에서 단어 위에 커서가 있을 때
abc[d]ef ---- s키 ----> `abcdef`|
입력 모드에서 한 단어 끝에 있을 때
abcdef| ---- <ctrl + s> ----> `abcdef`|
비주얼 모드에서 감쌀 문자열 선택했을 때
[abc def ghi] ---- <ctrl + s> ----> `abc def ghi`|
할 수 있는 건 다한 듯 합니다. 위 설정들로 백틱 입력에서 어느 정도는 해방됐는데, 앉으면 눕고 싶다고, 특정 선택 영역에 있는 모든 영어 단어를 백틱으로 감싸 주기, Ai가 똑똑하게 감싸 주기…등이 떠오르지만, 지금만으로도 좀 과하게 노력을 투자했습니다. 하스켈 진도가 잘 안나가 Neovim만 만지작 하고 있습니다.
※ Korea Vim User Group 디스코드에 올렸던 내용들입니다. 아마도 딱 환경이 같은 분은 없을테지만, 이런 저런 힌트로 쓰일 곳이 있을 것 같아 정리해서 올립니다.