Vim: виконати сценарій, над яким я працюю, на розділеному екрані


16

Я працюю над невеликим сценарієм python, який потребує частого виконання для налагодження та подальшого розвитку.

Чи можу я розділити екран vim і виконати свій скрипт на одній частині натисканням клавіші?

Відповіді:


9

Додайте цей рядок до свого .vimrc:

command R !./%

І тоді ви можете просто ввести ": R" під час роботи у Vim для запуску скрипту ( vim-run-current-file )


10

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>

Це запускає будь-який файл, у якому в #!першому рядку є шебанг ( ). Він використовує інтерпретатор для запуску файлу, тому йому не потрібно мати дозволу на виконання.

* (на екрані є деякі інші дуже акуратні функції, такі як копіювання та вставлення з виводу, моніторинг прихованих вікон за активністю / бездіяльністю, можливість одночасно використовувати сеанс з різних терміналів, виходити з системи, залишаючи всі програми біг - це потужний інструмент).


Цей автокоманд не працював для мене, поки я не поставив перший рядок (із символом \ if) на ту ж лінію, що і Au BufEnter, але я видалив \
Джейсон Аксельсон

Vim, можливо, не підтримує оболонку спочатку, але я просто хотів згадати цей цікавий плагін оболонки: vim.org/scripts/script.php?script_id=2771
Містер Mikkél

:map ;e :w<cr>:!python %<cr>хоче повторити матеріал до мого буфера vim, щоб "підтвердити" (?), що команда виконувалась. Як змусити його просто виконати команду безшумно? :map <silent> ...не працює.
Джонні Юта

5

Найменш багатослівний спосіб (який вимагає виконання сценарію):

 :!%

Щоб це працювало, мені довелося змінити його :!./%так, щоб сценарій знаходився в поточному каталозі.
Пол Вінц

І я не фахівець, але, схоже, !каже vim виконувати все, що випливає, як команду bash, так що ви можете це зробити !echo "Hello". %Розширюються , щоб бути ім'ям поточного файлу.
Пол Вінц

2

Це може бути не розділений екран, але це працює досить добре для мене:

map ;e :w<CR>:exe ":!python " . getreg("%") . "" <CR>

Це карта, ;eщоб виписати поточний файл і виконати його за допомогою python (він передбачає, що python є у вас PATH).


2

Bexec ВІМ плагін робить саме те , що ви хочете. Комбінації клавіш включені.




0

Помістіть цей невеликий фрагмент у свій .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

-1

Я не знаю про vim безпосередньо, але ви можете розділити екран таким чином, як правило, screenутилітою. ctrl+ a, S(зверніть увагу, що є великим буквою S) розділить дисплей, і ви можете перемикатися між двома з ctrl+ a, tab(якщо вікно порожнє, використовуйте ctrl+ a, nщоб перейти до іншого відкритого вікна або ctrl+ a, cщоб створити нове) .

Ви також можете розділити дисплей на більш ніж два та змінити розмір розщеплення за допомогою ctrl-a,: змінити розмір. Я використовую екран таким чином часто, і хоча це не одноклавішне рішення, про яке ви просите, це може бути дуже зручно.


Ви впевнені, що це працює для Vim? Схоже, він не відповідає у моєму vim (я використовую команду slpit, щоб розділити між файлами).
Адам Матан

Це команди GNU, а не команда vim.
innaM

Так. Я говорю про запуск vim в екрані.
Девід Спіллетт

розділення vim - це те, що відбувається в царині вікна Vim (або терміналу, в якому він працює).
hasen
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.