Как открыть другой файл в фоновом режиме 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
Тем не менее, мне нужно подумать о том, как упростить использование, возможно, с некоторыми псевдонимами.
- Будет ли это хорошим подходом?
- Как его можно эффективно использовать?
Ответы
Ответ 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, так и с оболочкой. Нет такой огромной разницы в рабочем процессе. Я предпочитаю версию оболочки, так как у меня есть большинство команд (компиляция запуска и т.д.).