dotfiles
dotfiles copied to clipboard
Fix dsB keybinding for ** delimiter with workaround
修正内容
問題
**foo**でdsBを押下してもfooにならず、*foo*になってしまう問題。
根本原因
vim-operator-surroundのBキー(**区切り文字)は正しく動作しない既知の問題であることが判明しました。古いVimscript実装(.vim/autoload/vimrc.vim)でも同じ問題があり、ワークアラウンドが実装されていました。
コメントより:
" TODO: Workaround. For some reason 'B' ('**foo**') cannot be deleted
" TODO: `g:operator#surround#blocks.markdown[0].keys[1]` (`'B'`) does not work
実装した解決策
Vimscript実装と同じワークアラウンドをLuaで実装:
if obj_key == 'B' then
-- Delete content between * (which leaves ** on each side)
vim.cmd('normal! d' .. vim.api.nvim_replace_termcodes('<Plug>(textobj-between-i)*', true, false, true))
-- Replace the remaining **** with the deleted content
vim.cmd([[s/\*\*\*\*/{@"}/]])
print('**deleted**')
return
end
-- For other delimiters, use the original pattern
M.run_with_virtual_keymaps('va' .. obj_key .. '<Plug>(operator-surround-delete)')
ワークアラウンドの動作
**foo**でカーソルがfoo上にある場合:
-
d<Plug>(textobj-between-i)*で単一*間のコンテンツを削除(**が両側に残る) -
s/\*\*\*\*/{@"}/で残った****を削除したコンテンツで置換 - 結果:
**foo**→foo
変更ファイル
-
.config/nvim/lua/nvim.lua-
delete_mostly_inner_surround():Bキーの特別処理を追加、他は元の'va'パターンを使用 -
replace_mostly_inner_surround(): 元の'va'パターンに戻した
-
期待される動作
-
**foo**でdsB→foo(ワークアラウンド使用) -
(foo)でds(→foo(元のパターン) - 他の区切り文字も正常に動作
Original prompt
This section details on the original issue you should resolve
<issue_title>Neovim: normal-modeのdsBキーがうまく動いてない</issue_title> <issue_description>既知の動作: カーソルがfooのどこかの上にあるときにdsBを押下する場合
元:
**foo**既知:
foo現在:
*foo*これを「既知」になるように直す。 </issue_description>
Comments on the Issue (you are @copilot in this section)
Custom agent used: PullRequest Creator An Agent to create PullRequests
- Fixes aiya000/dotfiles#97
💬 We'd love your input! Share your thoughts on Copilot coding agent in our 2 minute survey.