Как открыть другой файл в фоновом режиме Vim из командной строки Bash? - PullRequest
12 голосов
/ 14 мая 2011

Я перехожу с использования Gvim на консоль Vim.

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

  • Ctrl+Z (в обычном режиме) приостанавливает Vim и возвращается к консоли
  • fg можно использовать для возврата фокуса к Vim
  • jobs перечисляет фоновые задания и может использоваться для получения номера задания для вывести задание на передний план (например, fg %2, чтобы вывести задание 2 на на переднем плане).

Однако, когда Vim находится в фоновом режиме, и я запускаю vim file, файл открывается в новом экземпляре Vim.

Я привык использовать параметр --remote в Gvim для открытия файла в существующем экземпляре Gvim.

Вопрос:

  • Как я могу открыть другой файл в фоновом режиме Vim из командной строки?
  • Это разумный рабочий процесс для перемещения между консолью и Vim?

Обновление:

Я только что прочитал этот ответ @ jamessan , который дает несколько идей. Он показывает следующий фрагмент кода:

vim --servername foo somefile.txt
:shell
<do stuff in your shell>
vim --servername foo --remote otherfile.txt
fg

Однако мне придется подумать о том, как упростить использование, возможно, с некоторыми псевдонимами.

  • Это был бы хороший подход?
  • Как сделать его эффективным?

Ответы [ 3 ]

6 голосов
/ 02 апреля 2013

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

Мой подход

добавить ниже к .bashrc

v() {
    vim_id=`jobs|sed -n "/vim/s/\[\([0-9]\)\]+.*/\1/p"`
    if [ -n "$vim_id" ]; then
        echo "tabedit $@" > ~/.vim_swap/e.vim && fg $vim_id
    else
        vim $@
    fi
}

добавить ниже к .vimrc

nnoremap <silent> <space>e :source $HOME/.vim_swap/e.vim<Bar>:call writefile([], $HOME."/.vim_swap/e.vim")<CR>

Затем v foo.c, чтобы открыть первый файл, редактирование ..., Ctrl-Z для приостановки vim, выполнение оболочки, v bar.h, чтобы вывести vim на передний план.

И в VIM, нажмите <Space>e для табуляции bar.h.

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

3 голосов
/ 14 мая 2011

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

Я не очень часто его использовал, но вы можете найти функцию "vim server" (см. Опции --remote *, --servername и т. Д.), Которая позволяет открывать файл из вашей оболочки в существующий фоновый vim. Однако ctrl-z приостанавливает процесс, вместо того, чтобы позволить ему продолжать работать в фоновом режиме, и вам нужно будет поместить этот vim в фоновый режим, чтобы он мог реагировать как «сервер vim». Используйте для этого команду bg оболочки.

2 голосов
/ 14 мая 2011

Я бы просто вызвал vim из fg и открыл новый файл внутри vim, так как он, кажется, быстрее (хотя он может быть и быстрее).Для работы с несколькими файлами внутри vim вам нужно использовать команду edit (в vim): :e [filepath/]filename и вы ходите с настоящими буферами (все файлы будут как буфера vim) с ^I (ctrl + I) и ^O (ctrl+ o)

Работает как на GTK, так и на версиях оболочки.Там нет такой огромной разницы в рабочем процессе.Я предпочитаю версию оболочки, так как я делаю большинство команд там (компиляция запуска и т. Д.).

...