Не удается запустить скрипт связывания через VIM

0
  1. Здравствуйте, я написал сценарий bash, который компилирует несколько файлов cpp и object в g++. Моя цель - запустить скрипт в vim:!, Но он не работает в vim, только когда я нахожусь снаружи.

  2. Кроме того, я хотел, почему использование% в скрипте не дает мне текущий файл, но вместо этого дает ошибку.

сценарий:

#!/bin/bash

# Search for the main module and remove the ext.
delimain='grep main *.cpp | cut -d. -f1'

# Checks if there are also object files
if [ -f ./*.o ]; then
g++ -g *.cpp *.o -o $delimain.exe
# If There are only cpp file
else
g++ -g *.cpp -o $delimain.exe
fi

Благодарю!

  • 0
    Этот код, кажется, работает нормально для меня (хотя я должен добавить -l к команде grep). Может быть, использовать вместо этого make-файл GNU?
  • 0
    Он хорошо работает внутри Vim? Можете ли вы попробовать сделать это с псевдонимом?
Показать ещё 5 комментариев
Теги:
vim
g++
linkage

2 ответа

1

RE свой комментарий

Я использую псевдоним ubuntu 13.10: alias link 'sh ~/bin/lin_script%'

  1. Вы не должны вызывать скрипт оболочки с явным интерпретатором; первая строка #!/bin/bash сообщает оболочке, которую должен использовать интерпретатор. Вы, очевидно, новичок в Bash; попробуйте прочитать некоторые введения, чтобы лучше понять.
  2. Псевдонимы не будут работать в Vim, потому что они определены только в интерактивной оболочке, но команды, запускаемые с Vim, обычно запускаются в неинтерактивной оболочке (потому что это быстрее и поставляется с менее ненужными вещами).
  3. Псевдоним интерпретируется оболочкой, но символ % является особым для Vim. Эти два варианта не совпадают. См. Мой другой ответ, как передать имя файла сценарию.
0

Вы правы, что % автоматически расширяется, когда поставляется с командой Ex внутри Vim, но это не относится к внешним скриптам. Что вам нужно сделать, так это передать текущий файл при вызове внешнего скрипта и там ссылаться на аргумент командной строки:

Внутри Vim:

:!linkage.sh %

В вашем скрипте:

if [ $# -gt 0 ]; then
    delimain=$1
else
    delimain='grep ...
  • 0
    Я думаю, что я нашел проблему, она не работает в псевдониме ... только при указании текущего местоположения сценария ... Почему это так?
  • 0
    Не могли бы вы объяснить, что такое .sh? Мой скрипт не содержит этот доп.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню