.vimrcを再読み込みしたときにg:operator#surround#default_blocksがマージされない?
Closed this issue · 5 comments
let g:operator#surround#blocks
を設定している状態で.vimrcを再読み込み(:source $MYVIMRC
)すると、g:operator#surround#blocks
にg: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(
と囲まれてしまう感じです。
バグというよりは、私の設定のしかたがまずいのだろうと思ってはいるのですが、回避する方法などあればご教示いただけないでしょうか……!
@murashitas さんの設定ファイルはどこかに上がってますでしょうか?バグだと思いますので,まずは手元で再現したいです.
元々デフォルト設定をマージするというやり方は良くなくて直そうと思っていたので直そうと思います.
現状デフォルト設定のマージは 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'] },
\ ]
- .vimディレクトリ以下にvim-operator-userとvim-operator-surround関連しか入れていない状態で起動
- このときはデフォルトの
saiw(
と.vimrcで設定したsaiwp
のいずれでも、単語を(word)
と囲める
- このときはデフォルトの
:source $MYVIMRC
を実行- このときは、.vimrcで設定した
saiwp
でなら単語を(word)
と囲めるが、デフォルトのsaiw(
では(word(
となってしまう
- このときは、.vimrcで設定した
期待する動作としては、「2のあとでsaiw(
としても(word)
と囲む」という感じでしょうか。
現状デフォルト設定のマージは autoload でやっているので .vimrc を読み込みなおしてもマージする処理は走らないと思います.
なるほど、ということで、.vimrc内に https://github.com/rhysd/vim-operator-surround/blob/master/autoload/operator/surround.vim#L29-L41 を書いておくことで、かっこ悪いですがとりあえず回避はできました!
詳細にありがとうございます.了解です.