2

Я пытаюсь заставить vim выполнить скрипт, который я редактирую, с помощью сопоставления клавиш, скажем ctrl + x, поэтому я использовал это в vimrc

:map <C-x> :!exec_file %<CR>

Чтобы передать имя файла написанному мною сценарию, который анализирует расширение и вызывает соответствующий интерпретатор, пока это прекрасно работает.

Однако мне было интересно, могу ли я вызвать bash напрямую с именем скрипта и заставить его выполнить его, так как большинство редактируемых мной скриптов имеют строку shebang, поэтому я попробовал это сопоставление:

:map <C-x> :!bash %<CR>

Но это не работает, возможно ли выполнить скрипт, передав его имя bash?

2 ответа2

7

Vim уже использует оболочку (см . :set shell?) выполнить внешнюю команду; Скрипты со строками Шебанга должны работать просто отлично. Канонический способ выполнения текущего буфера

:!./%

(Предваряя ./ чтобы иметь дело с текущим каталогом, не являющимся частью PATH . Это предполагает, что скрипт уже выполняется (:!chmod +x % , может быть сделано в mapping / ftplugin.)

Вы можете выполнить заново просто :!! , Также есть более изящные решения для выполнения (частичного, несохраненного и т.д.) Содержимого буфера во внешних интерпретаторах; проверьте раздел плагинов vim.org.

0

кажется, что я должен chmod

нет, ты не если ваш исполняемый файл имеет форму

#! /bin/bash
ls -l

картирование

:map <C-x> :! sh ./% <CR>

будет делать то, что вы хотите, даже если файл не является исполняемым.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .