rhysd/vim-operator-surround

.vimrcを再読み込みしたときにg:operator#surround#default_blocksがマージされない?

Closed this issue · 5 comments

let g:operator#surround#blocksを設定している状態で.vimrcを再読み込み(:source $MYVIMRC)すると、g:operator#surround#blocksg:operator#surround#default_blocksがマージされないのか、デフォルトの設定が効かなくなってしまうようです。たとえば以下のように設定しているとき……

let g:operator#surround#blocks = {}
let g:operator#surround#blocks['-'] = [
    \   { 'block' : ['(', ')'], 'motionwise' : ['char', 'line', 'block'], 'keys' : ['P'] },
    \   { 'block' : ['「', '」'], 'motionwise' : ['char', 'line', 'block'], 'keys' : ['B'] },
    \   { 'block' : ['『', '』'], 'motionwise' : ['char', 'line', 'block'], 'keys' : ['D'] },
    \ ]

.vimrcを再読み込みしたあとに<Plug>(operator-surround-append)wPならば(word)としてくれるのですが、 <Plug>(operator-surround-append)w(すると、単語が(word(と囲まれてしまう感じです。

バグというよりは、私の設定のしかたがまずいのだろうと思ってはいるのですが、回避する方法などあればご教示いただけないでしょうか……!

rhysd commented

@murashitas さんの設定ファイルはどこかに上がってますでしょうか?バグだと思いますので,まずは手元で再現したいです.

rhysd commented

元々デフォルト設定をマージするというやり方は良くなくて直そうと思っていたので直そうと思います.
現状デフォルト設定のマージは autoload でやっているので .vimrc を読み込みなおしてもマージする処理は走らないと思います.

@murashitas さんの設定ファイルはどこかに上がってますでしょうか?バグだと思いますので,まずは手元で再現したいです.

設定ファイルは上げていないのですが、以下が最小構成の~/.vimrcのはずです……!(上掲だと全角括弧の設定だったため説明わかりづらくなっていたので、整理しました)

map <silent>sa <Plug>(operator-surround-append)

let g:operator#surround#blocks = {}
let g:operator#surround#blocks['-'] = [
    \   { 'block' : ['(', ')'], 'motionwise' : ['char', 'line', 'block'], 'keys' : ['p'] },
    \ ]
  1. .vimディレクトリ以下にvim-operator-userとvim-operator-surround関連しか入れていない状態で起動
    • このときはデフォルトのsaiw(と.vimrcで設定したsaiwpのいずれでも、単語を(word)と囲める
  2. :source $MYVIMRCを実行
    • このときは、.vimrcで設定したsaiwpでなら単語を(word)と囲めるが、デフォルトのsaiw(では(word(となってしまう

期待する動作としては、「2のあとでsaiw(としても(word)と囲む」という感じでしょうか。


現状デフォルト設定のマージは autoload でやっているので .vimrc を読み込みなおしてもマージする処理は走らないと思います.

なるほど、ということで、.vimrc内に https://github.com/rhysd/vim-operator-surround/blob/master/autoload/operator/surround.vim#L29-L41 を書いておくことで、かっこ悪いですがとりあえず回避はできました!

rhysd commented

詳細にありがとうございます.了解です.