Я делаю много элементов для быстрого моделирования на Python, и я постоянно сохраняю (: w), а затем запускаю (:!!). Мне интересно, есть ли способ объединить эти действия. Возможно, команда "сохранить и запустить".
Спасибо за вашу помощь.
Я делаю много элементов для быстрого моделирования на Python, и я постоянно сохраняю (: w), а затем запускаю (:!!). Мне интересно, есть ли способ объединить эти действия. Возможно, команда "сохранить и запустить".
Спасибо за вашу помощь.
Вариант 1:
Напишите функцию, аналогичную этой, и поместите ее в свои настройки запуска:
function myex()
execute ':w'
execute ':!!'
endfunction
Вы даже можете сопоставить ключевой комбо с ним - посмотрите документы.
Вариант 2 (лучше):
Посмотрите на документацию для переназначения нажатий клавиш - вы можете выполнить ее с помощью простого ключевого обновления. Следующие работы, но имеет "filename.py" hardcoded. Возможно, вы можете вникнуть и выяснить, как заменить это на текущий файл?
:map <F2> <Esc>:w<CR>:!filename.py<CR>
После сопоставления, вы можете просто нажать F2 в командном режиме.
imap, vmap и т.д. - это отображения в разных режимах. Вышеуказанное относится только к командному режиму. Следующее должно работать и в режиме вставки:
:imap <F2> <Esc>:w<CR>:!filename.py<CR>a
Раздел 40.1 руководства VIM очень полезен.
Хорошо, простейшая форма того, что вы ищете, это команда pipe. Он позволяет запускать несколько команд cmdline в одной строке. В вашем случае две команды записывают `w` и выполняют текущий файл`! %: P`. Если у вас есть определенная команда, которую вы запускаете для текущего файла, вторая команда становится, например. `! python%: p`. Итак, самый простой ответ на ваш вопрос:
:w | ! %:p
^ ^ ^
| | |--Execute current file
| |--Chain two commands
|--Save current file
Следует отметить, что не все команды могут быть привязаны. Согласно Vim docs, некоторые команды принимают трубку в качестве аргумента и, таким образом, нарушают цепочку...
Используйте параметр autowrite:
:set autowrite
Запишите содержимое файла, если оно было изменено, для каждого: next,: rewind,: last,: first,: previous,: stop,: suspend,: tag, :!,: make, CTRL-] и CTRL- ^ [...]
Командная комбинация работает с символом |
, возможно, что-то вроде сглаживания :w|!your-command-here
для отдельной комбинации клавиш?
Здесь вы идете:
:nmap <F1> :w<cr>:!%<cr>
сохранить и запустить (вы должны быть в n режиме - просто добавьте esc и для режима i)
Другая возможность:
au BufWriteCmd *.py write | !!
Хотя это будет run
при каждом сохранении, что может быть не таким, каким вы хотите.
Это то, что я положил в свой .vimrc
и работает как шарм
nnoremap <leader>r :w<CR>:!!<CR>
Конечно, вам нужно запустить команду оболочки один раз до этого, чтобы он знал, какую команду выполнить.
Пример:
:!node ./test.js
В vim вы можете просто перенаправить любой диапазон вашего текущего буфера на внешнюю команду (будь то bash, python или собственный python script).
# 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, the second redirect the selected cmdline range (here dot .,
which mean current line) to external command (here 'python').
для диапазона cmdline, см.
:h cmdline-ranges
не ниже единицы, что касается нормальной команды, а не cmdline.
:h command-range
вдохновлен fooobar.com/questions/136788/...
Я получил следующее из wim tips wiki:
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
но изменил новый на vnew на третьей строке, а затем на python у меня есть
map <F9> :w:Shell python %<cr><c-w>
нажатие f9 сохраняет, запускает и выгружает вывод в новый вертикально разделенный буфер с царапинами, для легкого поиска/сохранения и т.д.... также попадает в cw, поэтому мне нужно только нажать h/c, чтобы закрыть его/вернуться обратно к моему код.
Попробуйте сделать его внутри Bash.
В случае C файла с именем t.c
это очень удобно:
vi t.c && cc t.c -o t && ./t
Символы и символы (&&
) гарантируют, что одно сообщение об ошибке разрывает цепочку команд.
Для Python это может быть еще проще:
vi t.py && python t.py
Это будет работать и в режиме вставки...
" F5 => Save & Run python3 "
nnoremap <F5> :w <CR> :!sh -c 'python3 %' <CR>
inoremap <F5> <Esc> :w <CR> :!sh -c 'python3 %' <CR>
Я все время использую его для тестирования того, что слишком долго для перепечатки в интерпретаторе ^^
Рассмотрим переход на IDLE. F5 делает все.
Рассмотрим переход на Komodo. Вы можете определить команду, чтобы F5 делал все.