
環境: Windows 11 pro。
git-bash の vim で bashを呼び出したいのですmsys2
が、両方が同じバージョンの と を共有していますvim
(bash
ただし、このコンテキストは奇妙に思えます)。
私は尋ねた起源に関する一つの疑問Vi/Vim SE では、 で(は source などへの呼び出しで、は vim で bash を使用できるようにするため) をset -m
呼び出すときにオプションがないことが問題のようです。の場合は と表示されます。しかし、によって呼び出される通常の bash の場合はです。:call term_start("/d/msys64/usr/bin/bash -li -vx")
-l
.bash_profile
-i
vim
hivxBH
$-
:call term_start("bash -li -vx")
$-
himvxBH
使用してみました-lim -vx
が、動作しません。
上記は暫定的に上部-l
にチェックを入れた作品です。shopt -p login_shell
/etc/profile
shopt -s login_shell
オプションがない場合-m
、次のエラーメッセージも表示されます(私はこのQAしかし、私はすでにオプションを使用しており、このオプションはデフォルトでオプション-i
を追加できません)-m
/etc/profile
bash: cannot set terminal process group (-1): Inappropriate ioctl for device
bash: no job control in this shell
重要な用語は「ジョブ制御」であり、これはvimが内部でターミナルを実行するために重要です(:h terminal-use
「ジョブを開始できます端末エミュレータに接続します')
m
オプションは、マニュアルに記載されているように「ジョブ制御が有効になっている」場合の「モニター」に対応しているため、これが問題の原因です。
この質問は間接的に解決msys2 vim を使用して git-bash を呼び出すことで、1 つの vim バージョンを使用して、git-bash、pwsh、msys2 bash を含むマシン上のすべてのシェルを呼び出すことができます。
質問:
私の意見では、git-bashのvimには呼び出す権限がないようです/d/msys64/usr/bin/bash
(git-bashはできます)。直接解決する上記の「デバイスに対する不適切な ioctl」の失敗により、「このシェルではジョブ制御がありません」というエラーが発生しますか?
編集済み:
ヒントを受けてこのブログpipe
, 「デバイスに対する不適切な ioctl」は、より具体的には を使用しているために発生するようですstdin
。通常、ls -al /dev/fd/* -al
の先頭では、の場合
~/.bash_profile
のように出力されます。ただし、 パラメータを使用すると、になります。/dev/fd/0 -> /dev/pty3
term_start
/d/msys64/usr/bin/bash
/dev/fd/0 -> pipe:[0]
そして、この郵便受け、権限がないために発生するようです。ただし、msys2 は で git-bash を呼び出すことができます/dev/fd/0 -> /dev/cons3
。
解決しました:
この問題は、msys2 に多くの詳細がカプセル化されており、vim では操作できないが git-bash では操作できることが原因です。
# git bash try to call msys2 bash
# here although the administrator has the rwx mode, using as one administrator can't solve the problem.
$ ls -al /d/msys64/dev/
total 4
drwxr-xr-x 1 foo 197609 0 Mar 28 16:59 ./
drwxr-xr-x 1 foo 197609 0 Apr 4 16:29 ../
drwxr-xr-x 1 foo 197609 0 Mar 28 16:59 mqueue/
drwxr-xr-x 1 foo 197609 0 Mar 28 16:59 shm/
# msys2 bash try to call git bash
$ ls -al /d/Git/dev/
total 8
drwxr-xr-x 1 foo foo 0 Apr 2 09:53 .
drwxr-xr-x 1 foo foo 0 Apr 2 09:53 ..
lrwxrwxrwx 1 foo foo 13 Apr 2 09:53 fd -> /proc/self/fd
drwxr-xr-x 1 foo foo 0 Apr 2 09:52 mqueue
drwxr-xr-x 1 foo foo 0 Apr 2 09:52 shm
lrwxrwxrwx 1 foo foo 15 Apr 2 09:53 stderr -> /proc/self/fd/2
lrwxrwxrwx 1 foo foo 15 Apr 2 09:53 stdin -> /proc/self/fd/0
lrwxrwxrwx 1 foo foo 15 Apr 2 09:53 stdout -> /proc/self/fd/1
したがって、回避策の 1 つとして、git-bash は をカプセル化しないため、msys2 をメイン ターミナルとして使用できます/dev
。
上記の乱雑な開発環境は、私が Windows で使用した一時的な環境の 1 つにすぎません (実際には使用はお勧めしません)。通常、私は Arch Linux で開発しました。ここでは、問題がどこにあるかを示します。同様の問題がある場合は、これが役立つことを願っています。