
Среда: Windows 11 pro.
Я хочу вызвать msys2
bash в vim git-bash, где оба используют одну и ту же версию vim
и bash
(хотя этот контекст кажется странным).
Я спросилодин вопрос происхожденияв Vi/Vim SE и проблема, похоже, заключается в отсутствии set -m
опции при вызове :call term_start("/d/msys64/usr/bin/bash -li -vx")
( -l
is to source .bash_profile
и т. д. -i
, чтобы гарантировать, что мы можем использовать bash в vim) в vim
. Это отображается hivxBH
для $-
. Но для одного нормального bash, вызванного :call term_start("bash -li -vx")
, $-
это himvxBH
.
Я пробовал использовать, -lim -vx
но это не работает.
Вышеуказанные -l
работы проверяются shopt -p login_shell
наверху /etc/profile
временно показываемого shopt -s login_shell
.
Когда без-m
опции мы также получаем следующее сообщение об ошибке (я следовалэто контроль качества. Но я уже использовал -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, чтобы я мог использовать одну версию vim для вызова всех оболочек на моей машине, включая git-bash, pwsh и msys2 bash.
В:
IMHO, похоже, что у vim git-bash нет разрешения на вызов /d/msys64/usr/bin/bash
(но git-bash может). Есть ли способрешить напрямую суказанная выше ошибка «Неподходящий ioctl для устройства», которая приводит к «отсутствию управления заданиями в этой оболочке»?
Отредактировано:
После того, как мне намекнулиэтот блог, 'Неподходящий ioctl для устройства', похоже, из-за использования pipe
as stdin
более конкретно. Обычно ls -al /dev/fd/* -al
в верхней части ~/.bash_profile
будет выведено что-то вроде /dev/fd/0 -> /dev/pty3
when
term_start
. Но при использовании param /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
Поэтому в качестве одного из обходных путей мы можем использовать msys2 в качестве основного терминала, поскольку git-bash не инкапсулирует /dev
.
Вышеуказанная грязная среда разработки — это всего лишь одна временная среда, которую я использовал в Windows (на самом деле не рекомендуется ее использовать). Обычно я разрабатывал в Archlinux. Вот, чтобы показать, где проблема. Если у вас есть похожие проблемы, надеюсь, это вам поможет.