Отправка ввода на встроенный терминал в vim
В моем .vimrc
В файл я включил следующую строку:
autocmd vimenter * botright term
Это означает, что всякий раз, когда запускается vim, он открывает терминал внизу справа. Я хотел бы создать сопоставление клавиш, которое заставит vim выполнить заданную динамически генерируемую команду в терминале. Например, я добавил следующее к моему .vimrc
файл:
nmap <leader><leader> <C-w><C-w>python my_python_file.py<CR><C-w><C-w>
Так что, если я редактирую файл с именем my_py_file.py
Я могу нажать <leader><leader>
и vim сначала изменит окна (переход на встроенный терминал), затем введите команду
python my_python_file.py
так что файл будет работать в Python, и, наконец, вернуться в другое окно, чтобы я мог продолжить редактирование. Это работает! Но я бы хотел, чтобы он работал для произвольных файлов, а не только для файлов с именами my_python_file.py
, Как это можно сделать?
Я думал об использовании expand('%:p')
чтобы получить полный путь к текущему файлу, но я не смог передать эту строку во встроенное окно терминала в качестве входных данных. Я пытался написать функцию для достижения этой цели, но безуспешно.
1 ответ
Ключ должен использовать map <expr> <leader><leader> ...
чтобы <leader><leader>
может быть сопоставлен с динамически генерируемой привязкой. Ниже приведен фрагмент кода из .vimrc
файл работает с Vim 8.0:
" open a terminal directly below current window
nnoremap <leader>t :split<cr><c-w><c-j>:terminal ++curwin<cr><c-w><c-k>
" save current file and run python on it in terminal window directly below
nnoremap <expr> <leader><leader> ':w<cr><c-w><c-j>python ' . expand('%:p') . '<cr><c-w><c-k>'
Это карты <leader>t
открыть новый терминал терминала и <leader><leader>
запустить Python в этом терминальном буфере. Обратите внимание, что терминал все время находится в режиме работы терминала.
Для работы с NeoVim потребуется небольшая модификация:
" open a terminal directly below current window
nnoremap <leader>t :split<cr><c-w><c-j>:terminal<cr><c-w><c-k>
" save current file and run python on it in terminal window directly below
nnoremap <expr> <leader><leader> ':w<cr><c-w><c-j>ipython ' . expand('%:p') . '<cr><c-\><c-n><c-w><c-k>'
В версии NeoVim мы должны перейти из режима Terminal-Normal в режим Terminal-Job перед передачей ввода в терминал, а затем вернуться в режим Terminal-Normal.