Команда оболочки в screenrc

Я пытаюсь улучшить свое экранное программное обеспечение, поэтому у меня будет много вопросов, потому что есть много ответов, которые мне трудно найти в Интернете... В любом случае, этот вопрос о команде оболочки, которую я бы хотел, чтобы экран выполнить при открытии, и это не...

на новом сеансе экрана я спрашиваю экран, чтобы открыть несколько окон и назвать их и открыть файл в каждом из них, а затем разделить по вертикали и открыть для новых пустых окон:

screen -t name1 vim /path/to/folder/file1.txt
screen -t name2 vim /path/to/folder/file2.txt
screen -t name3 vim /path/to/folder/file3.txt
screen -t name4 vim /path/to/folder/file4.txt
split -v
focus
screen
focus
screen

но эти файлы, как обычно, создают скрытые файлы.file.txt.swp и.file.txt.swo, поэтому, когда мой компьютер выключается и файлы не закрываются должным образом, когда я снова открываю экран, он спрашивает, что мне делать с. SW * файлы... Я хотел бы сначала запустить эту команду rm /path/to/folder/.*.sw* поэтому он не запрашивает действие при открытии (".file.txt.swp уже существует! [O]open, [E]dit в любом случае, [R]ecover, [Q]uit, [A]bandoned")

В оболочке rm path/to/folder/.*.sw* удаляет все файлы подкачки, как и предполагалось, но я не могу заставить его работать в.screenrc

Это не работает:

rm /path/to/folder/.*.sw*

screen -t name1 vim /path/to/folder/file1.txt
screen -t name2 vim /path/to/folder/file2.txt
screen -t name3 vim /path/to/folder/file3.txt
screen -t name4 vim /path/to/folder/file4.txt
split -v
focus
screen
focus
screen

и не делает этого:

exec rm /path/to/folder/.*.sw*

...

ни это

eval 'rm /path/to/folder/.*.sw*'

...

или даже это:

stuff rm /path/to/folder/.*.sw*

...

и много других "слепых" попыток...

Ну я понятия не имею что я делаю: p

2 ответа

Решение

В вашем .screenrc, screen Команда принимает строку, которую она оценивает сама, а не передает ее в оболочку. Таким образом, вы не можете объединить несколько команд так легко... Например, строку конфигурации, подобную этой:

screen -t test1 touch foo; touch bar

приведет к троганию трех файлов - foo;, touch а также bar,:)

Вместо этого вы можете запустить интерпретатор оболочки для запуска нескольких команд, в том числе vim:

screen -t name1 sh -c 'rm /path/to/my/.file1.sw*; vim /path/to/my/file1.txt'

Опции, переданные sh Команда будет интерпретирована правильно, потому что на экране все они только одна опция.

Если вы действительно планируете это сделать, вы можете столкнуться с name2 а также name3 etc будет генерировать файлы подкачки одновременно с их удалением в другом окне, поэтому вы можете сделать это:

screen -t name1 sh -c 'rm /path/to/my/.file1.sw*; vim /path/to/my/file1.txt'
screen -t name2 sh -c 'sleep 1; vim /path/to/my/file2.txt'
screen -t name3 sh -c 'sleep 1; vim /path/to/my/file3.txt'
screen -t name4 sh -c 'sleep 1; vim /path/to/my/file4.txt'

Обратите внимание, что другой альтернативой может быть рассказать vim не создавать файлы подкачки вообще. В целом, вы можете сделать это с:

:set noswapfile

Чтобы поместить это в вашу командную строку (вместо того, чтобы сделать его по умолчанию для всех ваших vim экземпляры), вы можете использовать Vim's -n опция, которая заставляет vim открывать файлы без подкачки:

screen -t name1 vim -n /path/to/my/file1.txt
screen -t name2 vim -n /path/to/my/file2.txt
screen -t name3 vim -n /path/to/my/file3.txt
screen -t name4 vim -n /path/to/my/file4.txt

В результате, конечно, несохраненные изменения в ваших четырех файлах будут потеряны.

Еще одним вариантом может быть перемещение ваших временных файлов в другое место. Например, если вы используете tmpfs/shmfs и ваш каталог /tmp пуст при каждой перезагрузке, вы можете использовать:

screen -t name1 vim --cmd 'set dir=/tmp' /path/to/my/file1.txt
screen -t name2 vim --cmd 'set dir=/tmp' /path/to/my/file2.txt
screen -t name3 vim --cmd 'set dir=/tmp' /path/to/my/file3.txt
screen -t name4 vim --cmd 'set dir=/tmp' /path/to/my/file4.txt

Тогда вы все еще можете восстановить файл, если vim Экземпляр уничтожен по какой-то другой причине, кроме выключения сервера.

Когда ".file.swp уже существует! [O] открыто, [E] все равно dit, [R]ecover, [Q]uit, [A]bandoned", вам больше повезет, удалив ".file.swp", чем когда вы пытаетесь удалить "file.swp", не так ли?

Разве вы не заметили DOT?

Другие вопросы по тегам