Подтвердить что ты не робот

Как открыть другой файл в фоновом режиме Vim из командной строки Bash?

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

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

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

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

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

Вопрос:

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

Обновление:

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

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

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

  • Будет ли это хорошим подходом?
  • Как его можно эффективно использовать?
4b9b3361

Ответ 1

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

Мой подход

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

v() {
    vim_id=`jobs|sed -n "/vim/s/\[\([0-9]\)\]+.*/\1/p"`
    if [ -n "$vim_id" ]; then
        echo "tabedit [email protected]" > ~/.vim_swap/e.vim && fg $vim_id
    else
        vim [email protected]
    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 foreground.

И в VIM нажмите <Space>e в tabedit bar.h.

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

Ответ 2

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

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

Ответ 3

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

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