WindowsにてVimパッケージインストール後のエラーメッセージ
KatsuhiroArimoto opened this issue · 6 comments
初めまして。
Windows 11にてVim 9.0の下でminpacを使用し、パッケージをインストールしたあと、qボタンを押すと以下のメッセージが出ました。
BufWinLeave Autocommands for "?*" の処理中にエラーが検出されました:
E739: ディレクトリを作成できません: C:\Program Files\Vim/vimfiles/view
E190: "C:\Program Files\Vim/vimfiles/view~=+[minpac status]=" を書込み用として開けません
私がVimのスクリプトなどに詳しくないため、これがminpacのバグなのかどうか分かりかねますが、もし修正可能であればご対応いただけますと幸いです。
よろしくお願い申し上げます。
minpacはどのようにインストールされましたか?
また、.vimrc (あるいは _vimrc) はどこに置いてどのような内容になっていますか?
現象が再現可能な最小限の .vimrc と実行手順があるとありがたいです。
ご返信ありがとうございます。
minpacは、Git for Windowsをwinget
でインストールし、そのGitを使ってC:\Users\ユーザ名\vimfiles\pack\minpac\opt\minpac
にインストールしました(README.md
のとおりにインストールしました)。
_vimrc
は、C:\Users\ユーザ名
以下に置き、minpacに関係する部分は以下の通りです。
README.md
のサンプルをそのまま使っていると思います。
" Normally this if-block is not needed, because `:set nocp` is done
" automatically when .vimrc is found. However, this might be useful
" when you execute `vim -u .vimrc` from the command line.
if &compatible
" `:set nocp` has many side effects. Therefore this should be done
" only when 'compatible' is set.
set nocompatible
endif
function! PackInit() abort
packadd minpac " Try to load minpac.
call minpac#init()
" minpac must have {'type': 'opt'} so that it can be loaded with `packadd`.
call minpac#add('k-takata/minpac', {'type': 'opt'})
" Add original plugins here.
...
endfunction
" Load the plugins right now. (optional)
"packloadall
" Define user commands for updating/cleaning the plugins.
" Each of them calls PackInit() to load minpac and register
" the information of plugins, then performs the task.
command! PackUpdate source $MYVIMRC | call PackInit() | call minpac#update()
command! PackClean source $MYVIMRC | call PackInit() | call minpac#clean()
command! PackStatus packadd minpac | call minpac#init() | call minpac#status()
function! PackList(...)
call PackInit()
return join(sort(keys(minpac#getpluglist())), "\n")
endfunction
" Define a command to open a terminal window
" at the directory of a specified plugin.
command! -nargs=1 -complete=custom,PackList
\ PackOpenDir call PackInit() | call term_start(&shell,
\ {'cwd': minpac#getpluginfo(<q-args>).dir,
\ 'term_finish': 'close'})
minpacに関係する部分は以下の通りです。
一見 minpac に関係しない部分が影響していることもよくありますので、現象を再現できる最小限の .vimrc を用意していただくのが一番良いです。
BufWinLeave Autocommands for "?*" の処理中にエラーが検出されました:
BufWinLeave の設定が問題を引き起こしてそうです。
:verbose au BufWinLeave ?*
を実行すると何が表示されますか。
現象を再現するvimrcの例は以下の通りでよろしいでしょうか。
私のvimrcから一部抜粋しました。
"---------------------------------------------------------------------------------------
" 基本設定
"---------------------------------------------------------------------------------------
set nowritebackup
set nobackup
"---------------------------------------------------------------------------------------
" 画面表示
"---------------------------------------------------------------------------------------
set title
set number
set visualbell
"---------------------------------------------------------------------------------------
" autocmd
"---------------------------------------------------------------------------------------
" 設定の保存と復元
augroup General
autocmd!
autocmd BufWinLeave ?* silent mkview
autocmd BufWinEnter ?* silent loadview
augroup END
" auto reload .vimrc
augroup source_vimrc
autocmd!
"autocmd BufWritePost *vimrc source $MYVIMRC | set foldmethod=marker
autocmd BufWritePost *vimrc source $MYVIMRC | set foldmethod=indent
autocmd BufWritePost *gvimrc if has('gui_running') source $MYGVIMRC
augroup END
" auto comment off
augroup auto_comment_off
autocmd!
autocmd BufEnter * setlocal formatoptions-=r
autocmd BufEnter * setlocal formatoptions-=o
augroup END
" HTML/XML閉じタグ自動補完
augroup my_xml
autocmd!
autocmd Filetype xml inoremap <buffer> </ </<C-x><C-o>
autocmd Filetype html inoremap <buffer> </ </<C-x><C-o>
augroup END
" 編集箇所のカーソルを記憶
augroup red_hat
autocmd!
" In text files, always limit the width of text to 78 characters
"autocmd BufRead *.txt set tw=78
" When editing a file, always jump to the last cursor position
autocmd BufReadPost *
\ if line("'\"") > 0 && line ("'\"") <= line("$") |
\ exe "normal! g'\"" |
\ endif
augroup END
"---------------------------------------------------------------------------------------
" mimpac
"---------------------------------------------------------------------------------------
" Normally this if-block is not needed, because `:set nocp` is done
" automatically when .vimrc is found. However, this might be useful
" when you execute `vim -u .vimrc` from the command line.
if &compatible
" `:set nocp` has many side effects. Therefore this should be done
" only when 'compatible' is set.
set nocompatible
endif
function! PackInit() abort
packadd minpac " Try to load minpac.
call minpac#init()
" minpac must have {'type': 'opt'} so that it can be loaded with `packadd`.
call minpac#add('k-takata/minpac', {'type': 'opt'})
" Add other plugins here.
call minpac#add('vim-jp/syntax-vim-ex')
call minpac#add('KatsuhiroArimoto/quantum_espresso-vim')
call minpac#add('KatsuhiroArimoto/wannier90vim')
endfunction
" Load the plugins right now. (optional)
"packloadall
" Define user commands for updating/cleaning the plugins.
" Each of them calls PackInit() to load minpac and register
" the information of plugins, then performs the task.
command! PackUpdate source $MYVIMRC | call PackInit() | call minpac#update()
command! PackClean source $MYVIMRC | call PackInit() | call minpac#clean()
command! PackStatus packadd minpac | call minpac#init() | call minpac#status()
function! PackList(...)
call PackInit()
return join(sort(keys(minpac#getpluglist())), "\n")
endfunction
" Define a command to open a terminal window
" at the directory of a specified plugin.
command! -nargs=1 -complete=custom,PackList
\ PackOpenDir call PackInit() | call term_start(&shell,
\ {'cwd': minpac#getpluginfo(<q-args>).dir,
\ 'term_finish': 'close'})
また、:verbose au BufWinLeave ?*
を実行すると以下が出力されました。
--- 自動コマンド ---
General BufWinLeave
?* silent mkview
最後にセットしたスクリプト: ~\_vimrc 行 225
_vimrc のここの設定が問題を引き起こしています。
" 設定の保存と復元
augroup General
autocmd!
autocmd BufWinLeave ?* silent mkview
autocmd BufWinEnter ?* silent loadview
augroup END
mkview
でビューを保存しようとしたときに、書き込み権限がないディレクトリにビューを保存しようとしてエラーになっています。
対処としてはいくつか考えられると思います。
-
_vimrc 内で
set viewdir=...
を使って、ビューの保存先に書き込み可能なディレクトリを指定する。 -
minpac の画面では mkview でビューを保存しないようにする。
autocmd の mkview の行を例えば以下のように変更。(動作未確認)autocmd BufWinLeave ?* if bufname() !~# '^\[minpac .*\]$' | silent mkview | fi autocmd BufWinEnter ?* silent loadview
-
mkview を実行した際のエラーを無視する。
autocmd の mkview の行を例えば以下のように変更。(silent
->silent!
)autocmd BufWinLeave ?* silent! mkview autocmd BufWinEnter ?* silent loadview
ご返信くださりありがとうございます。
上記の2の方法をためしたところ、エラーメッセージが消えました。
minpac本体とは関係のない質問で、大変お手数をおかけし、失礼いたしました。