It fails, I presume, because Vim detects that it is a background process and doesn't have terminal access, so instead of popping up an edit window it suspends itself. I want to fix it so Vim behaves normally.
На самом деле это не имеет ничего общего с передним или задним планом.
Vim вызывает функцию
isatty()
, которая сообщает, что не подключена к терминалу. Единственный способ исправить это — подключить vim к терминалу. Есть два способа сделать это:
- Не используйте какие-либо перенаправления для стандартного вывода. Если у вас есть перенаправление, даже если вы в конце концов перенаправитесь на терминал,
isatty()
будет указывать на канал, а не на терминал, и vim будет работать в фоновом режиме.- Использовать псевдотерминал -tty. Да, я знаю, ты сказал, что не хочешь этого; но если требуются перенаправления, то избежать псевдо -ttys невозможно .
Предполагая, что вы используете bash
, вы можете использовать этот цикл:
cd target
for dir in /source/*/sub{1,3}; do
parentdir=${dir%/*} # remove last directory, e.g. `/sub1`
parentdir=${parentdir##*/} # leave the directory name, e.g. `dir1`
mkdir -p "$parentdir"
ln -s "$dir" -t "$parentdir"
done
Добавьте параметр -r
в ln
, если путь к исходному каталогу должен быть относительным.