🐼
最近のvimいじり
最近いじったvimの設定をメモってみる。
コミットログは…
$ git log --since='7 days ago' --oneline -- nvim
75383c9 (HEAD -> main, origin/main, origin/HEAD) update nvim plugins
7e4f8cd update neovim plugins
4b42399 fix
7215d49 use expression for ddu-ui-ff size
68c7bf0 cdo s/
4b9909e open or focus todo
5121fef never opens todo in duplicated window
7215d49 use expression for ddu-ui-ff size
68c7bf0 cdo s/
4b9909e open or focus todo
5121fef never opens todo in duplicated window
あたりを拾っていく
ddu-ui-ff
のサイズを式で指定した
ddu.vim
のファジーファインダーUIddu-ui-ff
の表示サイズを自動調節する機能が
本体に入ってるのを教えてもらったので、使ってみた。
ui = "ff",
uiParams = {
ff = {
+ -- sizes >>>
+ winRow = "(&lines - min([70, &lines - 8]) - 3) / 2",
+ previewRow = "(&lines - min([70, &lines - 8]) - 3) / 2",
+
+ winHeight = "min([70, &lines - 8])",
+ previewHeight = "min([70, &lines - 8])",
+
+ winCol = "&columns / 10",
+ previewCol = "&columns / 2",
+
+ winWidth = "&columns * 4 / 10 - 2",
+ previewWidth = "&columns * 4 / 10 - 2",
+ -- <<< sizes
+
onPreview = vim.fn["denops#callback#register"](function(args)
vim.wo[args.previewWinId].cursorline = false
end),
ちょっと変更をトチって後のコミットで直してる(fix
)けどご愛敬。ほんでもって便利。
:cdo s///
の組み合わせをメッチャ使うので、エイリアスにした
:cdo
はQuickfixの各行が指すファイルと行の組み合わせに対してコマンドを実行するコマンド。
:cdo s/foo/bar/
をよく使うので、エイリアスにしておいた。
local define = vim.fn["altercmd#define"]
define("apply", "Apply")
define("cancel", "Cancel")
define("rg", "Ripgrep")
define("Rg", "Ripgrep")
define("vh", "vertical help")
define("vhelp", "vertical help")
+ define("cs", "cdo s")
:cs/
と入力すると :cdo s/
に展開される。ありがとうvim-altercmd。
todoファイルを開くときに、既に開いている場合はフォーカスするようにした
VimによるToDo管理を支える技術で紹介した、todo.mdファイルを開くキーマップを、すでに開いている場合はフォーカスするようにした。
-vim.keymap.set("n", "<leader>tit",
- [[<cmd>Ripgrep -i to]] .. [[do<cr><cmd>lua require("kyoh86.conf.todo").resize_window_to_fit_content()<cr>]],
- { remap = false, desc = "To" .. "Doを検索する" })
-vim.keymap.set("n", "<leader><leader>t",
- [[<cmd>new ~/.local/state/to]] .. [[do.md<cr><cmd>lua require("kyoh86.conf.todo").resize_window_to_fit_content()<cr>]],
- { remap = false, desc = "作業メモを編集する" })
-return {
- resize_window_to_fit_content = function()
+vim.keymap.set("n", "<leader>tit", [[<cmd>Ripgrep -i to]] .. [[do<cr>]], { remap = false, desc = "To" .. "Doを検索する" })
+vim.keymap.set("n", "<leader><leader>t", [[<cmd>lua require("kyoh86.conf.todo").open_note()<cr>]], { remap = false, desc = "作業メモを編集する" }
+local filename = "~/.local/state/to" .. "do.md"
+return {
+ open_note = function()
+ local winids = vim.fn.win_findbuf(vim.fn.bufnr(filename))
+ local winid = -1
+ if #winids == 0 then
+ vim.cmd([[topleft new ]] .. filename)
+ winid = vim.fn.bufwinid(filename)
+ else
+ winid = winids[1]
+ vim.api.nvim_set_current_win(winid)
+ vim.cmd([[wincmd K]])
+ end
local line_count = vim.api.nvim_buf_line_count(0)
- vim.api.nvim_win_set_height(0, line_count + 1)
+ vim.api.nvim_win_set_height(winid, line_count + 1)
end,
}
シンプルに編集を始める(:edit todo.md
)するだけだったら、「すでに開いている場合はフォーカスする」のは:drop todo.md
するだけでいい。
画面分割(new
)したいしtopleft
に置きたい!とか思ってるもんだから複雑な感じになった。
Discussion