Повторно использовать существующие задания при открытии файлов

270
Alex

Вопрос лучше всего дать на примерах:

vim example.txt #Opens Vim on new or existing file 

Ctrl+Z

vim someother.txt 

Ctrl+Z

vim example.txt #Auto-runs `fg 1` since example.txt is already open 

Это возможно?

0
Попробуйте использовать `screen` или переключать виртуальные терминалы. LawrenceC 12 лет назад 0

4 ответа на вопрос

0
Ignacio Vazquez-Abrams

No. vim (or any other application for that matter) has no way of communicating to bash that it should take another action instead.

на самом деле какое-то приложение (включая vim) может связываться с bash, из которого они запущены Alex 12 лет назад 0
@ Алекс: Как так? Ignacio Vazquez-Abrams 12 лет назад 0
например, как упоминалось в другом ответе, в emacs есть опция `Mx shell`; в vim есть `!`, за которой следует команда для выполнения команд оболочки, а также "system ()" и другие функции, которые можно использовать в vimrc. Alex 12 лет назад 0
@ Алекс: Те, кто не "общаются с Bash", они запускают * совершенно новую оболочку *. Ignacio Vazquez-Abrams 12 лет назад 0
0
Bram

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

Отредактируйте оба файла: vim example.txt someother.txtзатем переключайтесь между ними, используя :buffer <filename>.

Смотрите также более легкий наконечник переключения буфера и буфера Справку Vim .

Я знаю этот метод, но он слишком специфичен для конкретного приложения + требуется знать все файлы, над которыми он будет работать Alex 12 лет назад 0
Не уверен, что вы мене на "слишком приложение конкретных". В вашем примере также используется vim. Если вы не ищете способ редактирования нескольких файлов с помощью vim, возможно, вам нужно указать это в вопросе. Что касается того, что вы заранее не знаете, какие файлы редактировать, вы можете добавить больше файлов в список буферов с помощью `: e`. Bram 12 лет назад 0
vim приведен в качестве примера как в вопросе, так и в ответе. в ответ можно просто заменить `vim $ 1` на` nano $ 1` или `passwordmanagerpro $ 1` и т. д. Alex 12 лет назад 0
0
Alex

Пример решения, работает под Bash (требуется Paste, Grep, Sed). Это специфично для Vim, но может быть адаптировано для другого редактора.

jim () {  paste <(jobs) <(jobs -p | xargs -n1 ps o cmd= -p) | grep "$1$" > ~/tmp/jm && fg $(cat ~/tmp/jm | sed -r 's/^\[([0-9]+).*/\1/') [[ $? == 1 ]] && vim $1 } 

Наслаждайтесь!

0
psusi

Я не думаю, что есть такой общий способ повторного использования рабочих мест.

Для вашего рабочего процесса редактирования вы можете перейти на emacs. Вместо того, чтобы нажимать ctrl-z, чтобы вернуться в оболочку, вы можете запустить дочернюю оболочку в буфере emacs с помощью M-x ansi-termили M-x shellи переключаться между оболочкой и вашими буферами редактирования, или даже разделить представление, чтобы показать оба сразу. Emacs отслеживает рабочий каталог оболочки, поэтому, если вы перемещаетесь по файловой системе и решаете, что хотите открыть файл, вместо того, чтобы печатать emacs somefile, вы можете просто указать emacs открыть его, C-x C-f somefile<RET>и он откроет файл в другом буфере и переключится на него. ,

Вы также можете запустить сервер emacs и запустить его, emacsclient somefileчтобы указать существующему сеансу emacs открыть какой-нибудь файл. Если он уже открыт, он просто переключается на существующий буфер.

Похожие вопросы