Я працюю над невеликим сценарієм python, який потребує частого виконання для налагодження та подальшого розвитку.
Чи можу я розділити екран vim і виконати свій скрипт на одній частині натисканням клавіші?
Я працюю над невеликим сценарієм python, який потребує частого виконання для налагодження та подальшого розвитку.
Чи можу я розділити екран vim і виконати свій скрипт на одній частині натисканням клавіші?
Відповіді:
Додайте цей рядок до свого .vimrc:
command R !./%
І тоді ви можете просто ввести ": R" під час роботи у Vim для запуску скрипту ( vim-run-current-file )
Vim не підтримує та ніколи не підтримуватиме вбудовану оболонку, наприклад emacs або kate (якщо це маєте на увазі), дивіться це запитання щодо stackoverflow .
Девід Спілет правильно, ви можете запустити свій vim на екран gnu:
$ screen vim foo.txt
Але це дасть вам лише щось, що віддалено нагадує менеджер вікон у терміналі - ДУЖЕ корисно при використанні над ssh або на коробці без X, але локально ви можете так само добре відкрити інший xterm та перемикатися між ними. *
У будь-якому випадку, якщо ви можете жити з тим, що ви не побачите файл, який ви редагуєте, дивлячись на результат, який він видає, підказка Джека М хороша, але може бути коротшою:
:map ;e :w<cr>:!python %<cr>
З цією ж метою у мене це є ~/.vimrc
:
au BufEnter *
\if match( getline(1) , '^\#!') == 0 |
\ execute("let b:interpreter = getline(1)[2:]") |
\endif
fun! CallInterpreter()
if exists("b:interpreter")
exec ("!".b:interpreter." %")
endif
endfun
map <F5> :call CallInterpreter()<CR>
Це запускає будь-який файл, у якому в #!
першому рядку є шебанг ( ). Він використовує інтерпретатор для запуску файлу, тому йому не потрібно мати дозволу на виконання.
* (на екрані є деякі інші дуже акуратні функції, такі як копіювання та вставлення з виводу, моніторинг прихованих вікон за активністю / бездіяльністю, можливість одночасно використовувати сеанс з різних терміналів, виходити з системи, залишаючи всі програми біг - це потужний інструмент).
:map ;e :w<cr>:!python %<cr>
хоче повторити матеріал до мого буфера vim, щоб "підтвердити" (?), що команда виконувалась. Як змусити його просто виконати команду безшумно? :map <silent> ...
не працює.
Найменш багатослівний спосіб (який вимагає виконання сценарію):
:!%
:!./%
так, щоб сценарій знаходився в поточному каталозі.
!
каже vim виконувати все, що випливає, як команду bash, так що ви можете це зробити !echo "Hello"
. %
Розширюються , щоб бути ім'ям поточного файлу.
map <F5> :w<CR>:exe ":!python " . getreg("%") . "" <CR>
Це те, що я використовував, будь ласка (F5 запускає поточний сценарій).
Для перетворення vim у потужний ID пітона, я рекомендую цей підручник:
Помістіть цей невеликий фрагмент у свій .vimrc, щоб виконати поточний файл одним натисканням клавіші (наприклад F5
) та відобразити результат у новому буфері розділеної панелі.
:!
це нормально, але вам потрібно перейти на свій термінал, щоб побачити результат.
Хоча ви можете це зробити ctrl-z
і повернути vim назад з fg
ним все ще означає, що вам потрібно багато переключити контекст.
Спосіб роботи цього фрагмента полягає в тому, щоб спочатку відгадати виконуваний файл на основі, filetype
а потім запустити його з поточним файлом як його аргументом.
Далі зручний метод утиліти приймає вихід і скидає його в новий буфер.
Це не ідеально, але дуже швидко для загальних робочих процесів.
Ось фрагмент, скопійований нижче:
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"""""""""""""""""""""""""" RUN CURRENT FILE """""""""""""""""""""""""""""
""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
" Execute current file
nnoremap <F5> :call ExecuteFile()<CR>
" Will attempt to execute the current file based on the `&filetype`
" You need to manually map the filetypes you use most commonly to the
" correct shell command.
function! ExecuteFile()
let filetype_to_command = {
\ 'javascript': 'node',
\ 'coffee': 'coffee',
\ 'python': 'python',
\ 'html': 'open',
\ 'sh': 'sh'
\ }
let cmd = get(filetype_to_command, &filetype, &filetype)
call RunShellCommand(cmd." %s")
endfunction
" Enter any shell command and have the output appear in a new buffer
" For example, to word count the current file:
"
" :Shell wc %s
"
" Thanks to: http://vim.wikia.com/wiki/Display_output_of_shell_commands_in_new_window
command! -complete=shellcmd -nargs=+ Shell call RunShellCommand(<q-args>)
function! RunShellCommand(cmdline)
echo a:cmdline
let expanded_cmdline = a:cmdline
for part in split(a:cmdline, ' ')
if part[0] =~ '\v[%#<]'
let expanded_part = fnameescape(expand(part))
let expanded_cmdline = substitute(expanded_cmdline, part, expanded_part, '')
endif
endfor
botright new
setlocal buftype=nofile bufhidden=wipe nobuflisted noswapfile nowrap
call setline(1, 'You entered: ' . a:cmdline)
call setline(2, 'Expanded Form: ' .expanded_cmdline)
call setline(3,substitute(getline(2),'.','=','g'))
execute '$read !'. expanded_cmdline
setlocal nomodifiable
1
endfunction
Я не знаю про vim безпосередньо, але ви можете розділити екран таким чином, як правило, screen
утилітою. ctrl+ a, S(зверніть увагу, що є великим буквою S) розділить дисплей, і ви можете перемикатися між двома з ctrl+ a, tab(якщо вікно порожнє, використовуйте ctrl+ a, nщоб перейти до іншого відкритого вікна або ctrl+ a, cщоб створити нове) .
Ви також можете розділити дисплей на більш ніж два та змінити розмір розщеплення за допомогою ctrl-a,: змінити розмір. Я використовую екран таким чином часто, і хоча це не одноклавішне рішення, про яке ви просите, це може бути дуже зручно.