Closed KSR-Yasuda closed 1 year ago
現状厳しい(というよりは対処ができない)気がします。
うまくやっている人がいたらコメントもらえるようにちょっと広報しておきます。
@KSR-Yasuda san いろいろやりとりして、思いだしました。(help位置はおしえてもらいました)
[E379](https://vim-jp.org/vimdoc-ja/quickfix.html#E379) %D "enter directory" フォーマット文字列。これ以下の%fはそ のディレクトリ名を検索する。 %X "leave directory" フォーマット文字列。これ以下の%fは ディレクトリスタックの1つ前のディレクトリを検索する。 "enter directory" や "leave directory" フォーマットを定義する場合、"%D" や "%X" は部分文字列の最初に置かれなけれならない。Vimはディレクトリ変更を追跡し相 対パスによって指定されたファイル名の前にカレントディレクトリ名を付け足す。 Tipsや制限など詳細は[quickfix-directory-stack](https://vim-jp.org/vimdoc-ja/quickfix.html#quickfix-directory-stack)を参照。
これを 'errorformat' オプション にうまく設定することで、Makeのログから位置を補正できます。
逆にいうとそこを頑張らない限り厳しいのが現状ですね。
@tsuyoshicho san ありがとうございます。
確認してみたところ、
&errorformat
で、元々 英語のログ ({Entering,Leaving} directory 'xxxxxxxx'
) は 対応しているようでした。
なので、make
の 各国言語へのローカライズのログ に対応していないこと が問題のようで。
そのため、以下のいずれか でいけるようです:
&makeprg
で、英語ログ を出力するよう 設定
set makeprg=LANG=C\ make
&errorformat
に 日本語ログのフォーマット を追加
set errorformat+=%D%*\\a[%*\\d]:\ ディレクトリ\ %*[`']%f'\ に入ります
set errorformat+=%X%*\\a[%*\\d]:\ ディレクトリ\ %*[`']%f'\ から出ます
set errorformat+=%D%*\\a:\ ディレクトリ\ %*[`']%f'\ に入ります
set errorformat+=%X%*\\a:\ ディレクトリ\ %*[`']%f'\ から出ます
&errorformat
に 日本語ログのフォーマット を追加
set errorformat+=%D%*\\a[%*\\d]:\ ディレクトリ\ %*[`']%f'\ に入ります
set errorformat+=%X%*\\a[%*\\d]:\ ディレクトリ\ %*[`']%f'\ から出ます
set errorformat+=%D%*\\a:\ ディレクトリ\ %*[`']%f'\ に入ります
set errorformat+=%X%*\\a:\ ディレクトリ\ %*[`']%f'\ から出ます
どうも、:make -C dir
の場合は、ちょっと文言がズレていて、
3つ目の設定は、以下 が正しいようです:
set errorformat+=%D%*\\a:\ ディレクトリ\ %*[`']%f' に入ります
U+3000
)set errorformat+=%D%*\\a:\ ディレクトリ\ %*[`']%f'[\ ]に入ります
だと、動きませんでした
不具合の内容
:make
コマンド を実行した際のMakefile
中で、make -C dir
など、ディレクトリ遷移 を伴った場合、 quickfixリストでのファイル名表示 が 正しく表示されません。Quickfixリストのパス名 がおかしいので、
:cc
コマンド 等で、正しいファイルが開けません。現象・ログ
Source
再現手順
上記のソースに対して、vim
:make
コマンド を実行。期待動作
vimの カレントディレクトリ に対して、正しいパス を表示する。
Vimのバージョン
9.0.1403
OSの種類/ディストリ/バージョン
Microsoft Windows 10 Pro 22H2 [Version 10.0.19045.3086] Git-for-Windows v2.41.0.windows.1
使用している or 関係していそうなプラグイン
(関係していそうなプラグインなどがあればココに書いてください)
その他
makeのコマンド中に カレントディレクトリが変わっていること が原因なので、 vimに
:make -C dir
と 直接 別ディレクトリを参照させても 発生。また、例えば、vimカレントディレクトリ
/c/parent/current/
にいるときに、dir/Makefile
中で 上の階層のソース (e.g../hoge.c
=/c/parent/current/hoge.c
) を見る場合は、/c/parent/current/../hoge.c
を resolveして/c/parent/hoge.c
のように表示されることも (vimの cd, tcd, lcd 等の状態 などにもよるかも)。設定
&makeprg
で 任意のコマンドを使用できる (から どんなログが出るか 不明) &&make
コマンドのディレクトリ移動ログ も${LANG}
次第で変わる とは思うので、 ログ捕捉して 追従するのも 難しい気はしますが…。