Ответов (12)12
Опция 1:
Напишите функцию, подобную этой, и поместите ее в настройки запуска:
function myex()
execute ':w'
execute ':!!'
endfunction
Вы даже можете сопоставить ему комбинацию клавиш - посмотрите документацию.
Вариант 2 (лучше):
Посмотрите документацию по переназначению нажатий клавиш - возможно, вы сможете сделать это с помощью простого переназначения клавиш. Следующее работает, но имеет жестко запрограммированный "filename.py". Может быть, вы сможете покопаться и выяснить, как заменить его текущим файлом?
:map <F2> <Esc>:w<CR>:!filename.py<CR>
После сопоставления вы можете просто нажать F2в командном режиме.
imap, vmap и т. д. являются отображениями в разных режимах. Вышесказанное относится только к командному режиму. В режиме вставки также должно работать следующее:
:imap <F2> <Esc>:w<CR>:!filename.py<CR>a
Раздел 40.1 руководства по Vim очень полезен.
Я получил следующее из вики-страницы советов по Vim:
command! -complete=file -nargs=+ shell call s:runshellcommand(<q-args>)
function! s:runshellcommand(cmdline)
botright vnew
setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile nowrap
call setline(1,a:cmdline)
call setline(2,substitute(a:cmdline,'.','=','g'))
execute 'silent $read !'.escape(a:cmdline,'%#')
setlocal nomodifiable
1
endfunction
Но я изменил new на vnew в третьей строке, а затем для Python у меня есть следующее:
map <F9> :w:Shell python %<cr><c-w>
Нажатие F9сохраняет, запускает и выгружает вывод в новый вертикально разделенный рабочий буфер для упрощения восстановления, сохранения и т. Д. Он также попадает в cw, поэтому мне нужно только нажать h / c, чтобы закрыть его и вернуться к моему коду.
В Vim вы можете просто перенаправить любой диапазон текущего буфера на внешнюю команду (будь то Bash, интерпретатор Python или ваш собственный скрипт Python).
# Redirect whole buffer to 'python'
:%w !python
Предположим, ваш текущий буфер содержит две строки, как показано ниже,
import numpy as np
print np.arange(12).reshape(3, 4)
затем :%w !python
запустит его, сохранится он или нет. И напечатайте на своем терминале что-то вроде ниже,
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
Конечно, вы можете сделать что-то постоянное, например, некоторые раскладки клавиатуры.
nnoremap <F8> :.w !python<CR>
vnoremap <F8> :w !python<CR>
Первый запускает текущую строку. Второй - запустить визуальное выделение через интерпретатор Python.
#!! Be careful, in Vim ':w!python' and ':.w !python' are very different. The
first write (create or overwrite) a file named 'python' with contents of
current buffer, and the second redirects the selected cmdline range (here dot .,
which mean current line) to external command (here 'python').
Для диапазона cmdline см.
:h cmdline-ranges
Не тот, что ниже, который касается обычной команды, а не cmdline.
:h command-range
Это было вдохновлено строкой Execute current в Bash из Vim .
Рассмотрите возможность перехода на IDLE . F5все делает.
Рассмотрите возможность перехода на Komodo IDE . Вы можете определить команду, которая будет F5делать все.
Используйте опцию автозаписи :
:set autowrite
Запишите содержимое файла, если оно было изменено, для каждого: next,: rewind,: last,: first,: previous,: stop,: suspend,: tag, :! ,: make, CTRL-] и CTRL- ^ команда [...]
Хорошо, самая простая форма того, что вы ищете, - это команда pipe. Он позволяет запускать несколько команд cmdline в одной строке. В вашем случае две команды пишут `w` и выполняют текущий файл`! %: p`. Если у вас есть конкретная команда, которую вы запускаете для текущего файла, вторая команда становится, например, `! Python%: p`. Итак, самый простой ответ на ваш вопрос:
:w | ! %:p
^ ^ ^
| | |--Execute current file
| |--Chain two commands
|--Save current file
И последнее, что следует отметить: не все команды можно связать в цепочку. Согласно документации Vim , некоторые команды принимают канал в качестве аргумента и, таким образом, разрывают цепочку ...