2024/06/15
Neovimオススメ設定① ddする時に空白行をヤンクしない
Neovimのオススメ設定シリーズ第1弾。(第2弾があるかは未定)
はじめに
今回はluaで書くことを前提にしています。
ヤンクせずに行削除するには
_ddをすることで、ヤンクせずに行を削除できます。
これを利用して、ddコマンドをオーバーライドします。
設定
vim.keymap.set("n", "dd", function()
local line = vim.api.nvim_get_current_line()
if string.match(line, '^%s*$') then
vim.cmd('normal! "_dd')
else
vim.cmd('normal! dd')
end
end, { noremap = true, silent = true })最後に
簡単な設定ですが、これを設定してからQOLがかなり上がりました。
皆さんも是非試してみてください。
ではまた。
追記
visualモードで複数行選択した時のdに関しても、対応しました。
こちらに関しては動作が不安定なので改良の余地ありです。
良い感じになったら修正しておきます。
こうしたらいいよ、等あれば連絡頂けると幸いです。
vim.keymap.set("x", "d", function()
local mode = vim.fn.visualmode()
local start = vim.api.nvim_buf_get_mark(0, "<")
local finish = vim.api.nvim_buf_get_mark(0, ">")
if
start[1] > finish[1] or (start[1] == finish[1] and start[2] > finish[2])
then
start, finish = finish, start
end
local selection_text = ""
if mode == "V" then
local lines = vim.api.nvim_buf_get_lines(0, start[1] - 1, finish[1], false)
selection_text = table.concat(lines, "\n")
elseif mode == "v" then
local lines = vim.api.nvim_buf_get_lines(0, start[1] - 1, finish[1], false)
if #lines == 0 then
return
end
if #lines == 1 then
selection_text = lines[1]:sub(start[2] + 1, finish[2] + 1)
else
local parts = {}
table.insert(parts, lines[1]:sub(start[2] + 1))
for i = 2, #lines - 1 do
table.insert(parts, lines[i])
end
table.insert(parts, lines[#lines]:sub(1, finish[2] + 1))
selection_text = table.concat(parts, "\n")
end
else
local lines = vim.api.nvim_buf_get_lines(0, start[1] - 1, finish[1], false)
selection_text = table.concat(lines, "\n")
end
if selection_text:match("^%s*$") then
vim.cmd('normal! "_d')
else
vim.cmd("normal! d")
end
end, { noremap = true, silent = true })最終更新日:2026/01/20