web-dev-qa-db-ja.com

シェルスクリプトを実行できるテキストエディターはありますか?

Geditで小さなスクリプトを変更して、ターミナルから実行することがよくあります。これを簡素化するための「実行」ボタンまたは何かを備えた単純なテキストエディタはありませんか? Eclipseでさえ、それは簡単ではありません。どのテキストエディターがこれをサポートしているか、どのように拡張してこれをサポートできるかについて、具体的な提案を探しています。

36
smcs

から:

Geditプラグイン

gedit外部端末プラグインを使用する

ターミナルプラグインでgeditを使用できます。手順は非常に簡単です。

  1. 「ユニバース」リポジトリを有効にする
  2. gedit-pluginsをインストールする
  3. 「組み込み端末」を有効にする
  4. 使用する Ctrl+F9 ターミナルを開く
  5. その他のgeditプラグイン

ステップ1.「ユニバース」リポジトリを有効にする

最初のステップは、UniverseリポジトリがSettings-> Software & Updates-> Ubuntu Softwareからアクティブ化され、3番目のオプションがチェックされていることを確認することです。

gedit plugins repository.png

ステップ2. gedit-pluginsをインストールする

次のコマンドでgedit-plugsをインストールします。

Sudo apt install gedit-plugins

ステップ3.「組み込み端末」をアクティブにする

geditを開き(Sudoは使用しないでください)、Edit-> Preferences-> Pluginsを選択してEmbedded Terminalを確認します。

gedit embedded terminal.png

ステップ4.使用 Ctrl+F9 ターミナルを開く

以下のGIFでは、 Ctrl+F9 コマンドプロンプトで小さなウィンドウを表示します。マウスを使用して、分割線を上にドラッグします。

gedit terminal plugin.gif

ステップ5.その他のgeditプラグイン

手順4.で説明したように、セパレーターバーをつかんで、ターミナルウィンドウを大きくすることができます。これが通常の画像(GIFではない)の外観です。

geditコーディングウィンドウで現在使用している他の3つのプラグインがあります。

  • 異なる背景色で80文字のカットオフを表示するプラグイン
  • ドキュメント全体をサムネイルで表示するプラグイン。ドラッグしてすばやくコードセクションに移動できます。
  • 一致する括弧を強調表示する

gedit teriminal line wrap.png

詳細については、以下を参照してください。

17

オプション1:vim、emacs、geanyなどを使用する!

vim:!bash file.shを使用するか、.vimrcにショートカットを作成します

Emacsでは、M-!を使用します。だからあなたは長押しします Alt そして次に押します !。コマンドに渡したいものを選択してM-|を押すと、現在のバッファーのテキストをコマンドに渡すこともできます。したがって、コードを強調表示して、コマンドbashに渡すことができます。

どのツールにも独自の方法があります!

オプション2:findentrを使用する

このコマンドを実行すると、ディレクトリ内の.shファイルが変更されるたびに、自動的に再実行されます。

find . -name '*.sh' | entr -cs file.sh

オプション3:ライブコーディングにtmuxvimentrの組み合わせを使用する

私はこれをc++のためにずっと前に書いた後、他の言語でより多く使用し、シェルプログラミングにも使用できるようになりました。

これは次のようになります。

cppshell

プログラムを実行するには、vim(:w)に保存するだけで実行されます。

これを~/bin/ideに保存:

#!/usr/bin/bash

tmpdir=""
template="simple"

for i in "$@"
do
case $i in
    -t=*|--template=*)
        template="${i#*=}"
    shift # past argument=value
    ;;

    -n=*|--name=*)
    dir="${i#*=}"
    mkdir -p ~/cppshells/$dir
    tmpdir=~/cppshells/$dir
    shift
    ;;

    -h|--help)
    echo "-n=*|--name=* \t\t the name of the project"
    echo "-t=*|--template \t\t the template to use"
    exit;
    ;;


    *)
        # nothing to do
    ;;
esac
done

if [ -z "$tmpdir" ]; then
    tmpdir=$(mktemp -d)
fi;

tmpdir=$(realpath ${tmpdir});
window="cpp-$1-$((1 + RANDOM % 10000000))"

if [ -z "$EDITOR" ]; then
    EDITOR="nvim";
fi;

template_dir="$(dirname $0)/templates/${template}"

if [ ! -d $template_dir ]; then
    echo "The specified template ($template) does not exists."
    exit;
fi;

tmux new -s ${window} -d -c "${tmpdir}"
tmux split-window -t ${window} -h
tmux select-pane -t ${window}.right
tmux resize-pane -t ${window}.right -R 18
tmux send-keys -t ${window}.left "cd ${tmpdir}" C-m
tmux send-keys -t ${window}.right "cd ${tmpdir}" C-m


# copy files if the directory does not exists
if [ `ls -A ${tmpdir} | wc -m` == "0" ]; then
    cp -nr $template_dir/* ${tmpdir}/.
fi;

# run build commands
if [ -f ${template_dir}/Makefile ]; then # make
    tmux send-keys -t ${window}.right "find . -name '*.cpp' | entr -cs 'make -j8 && ./a.out'" C-m
        tmux send-keys -t ${window}.left "${EDITOR} ${tmpdir}/main.cpp" C-m
Elif [ -f ${template_dir}/CMakeLists.txt ]; then # CMake
    mkdir -p ${tmpdir}/build
    cmake -G "Unix Makefiles" -B${tmpdir}/build -S${tmpdir}
    tmux send-keys -t ${window}.right "find . -name '*.cpp' | entr -cs 'make -j8 -Cbuild/ && ./build/a.out'" C-m
        tmux send-keys -t ${window}.left "${EDITOR} ${tmpdir}/main.cpp" C-m
Elif [ -f ${template_dir}/main.py ]; then # Python
        chmod +x ${tmpdir}/main.py
    tmux send-keys -t ${window}.right "find . -name 'main.py' | entr -cs '${tmpdir}/main.py'" C-m
        tmux send-keys -t ${window}.left "${EDITOR} ${tmpdir}/main.py" C-m
Elif [ -f ${template_dir}/main.sh ]; then # Bash
        chmod +x ${tmpdir}/main.sh
    tmux send-keys -t ${window}.right "find . -name 'main.sh' | entr -cs '${tmpdir}/main.sh'" C-m
        tmux send-keys -t ${window}.left "${EDITOR} ${tmpdir}/main.sh" C-m
fi;


tmux select-pane -t ${window}.left
tmux attach -t ${window}

次に、~/bin/templates/simpleディレクトリを作成し、ideコマンドを実行するときの開始点となる単純なmain.shファイルをその中に配置します。さらに多くのテンプレートを作成することもできます(それぞれが~/bin/templates/ディレクトリの別のディレクトリにあります)。

パスに/home/$USER/binを追加して、ideを実行できるようにします。

スクリプトを実行するには、次の3つの方法を使用できます。

  • 単純なテストの場合:idemktemp -dコマンドで一時ディレクトリを作成します
  • ファイルを~/cppshell/[something]/ dirに保存するには:ide -n=something
  • 別のテンプレートを使用するには(開始点):ide -t=not-simple -n=some_name

前に述べたように、このスクリプトを使用して、Python、C++、bashを実行するためのシェルのようなツールを作成したり、独自のスクリプトを追加したりすることもできます。

32
moisrex

Vimに慣れている場合は、実行できます

:w !bash

(選択したシェルのサブ)、現在のバッファーでスクリプトが実行されます。

グラフィカル環境では、VS Codeを使用しています。それは軽量ですIDEこれは拡張可能で、GITサポートが組み込まれており、端末が統合されています。

13
NevDull

あなたはケイトを使うことができます、それは働くためにコンソールが必要です:

Sudo apt install kate konsole

次に:

ケイト⇒設定⇒アプリケーション⇒プラグインとターミナルツールビューのチェックボックスをチェックします。

enter image description here

enter image description here

9

EmacsではCtrl-CCtrl-Xそのため。

8
Florian Diesch

優れたオプションの1つは、私の定番であるテキストエディターGeanyを使用することです。デフォルトでは、「実行」ボタンがあり、これもデフォルトでキーに関連付けられています F5 メインエディタウィンドウ内からシェルスクリプトを実行します。

以下は、編集後にシンプルな更新スクリプトを実行しているGeanyのスクリーンショットです。

enter image description here

画面の左側にあるGeanyの「ツリーブラウザー」プラグインも確認してください。これにより、~/binフォルダー内のスクリプトのallを簡単に選択できます。

6
andrew.46

実行する必要のある特定のシェルコマンドは正確にはわかりませんが、Visual Studio Codeは軽量IDEの現在の標準になりつつあります。

クイック検索でこれが表示されます: https://www.reddit.com/r/vscode/comments/9qbbcs/is_there_a_way_to_run_a_bash_scriptcommand_from/

誰かが尋ねたところ:

VS Codeからbashスクリプト/コマンドを実行する方法はありますか?

答えは次のとおりです。

A) https://code.visualstudio.com/docs/editor/tasks はい、タスクを設定できます。特定をデフォルトのビルドタスクとして指定することもできます

B)コードにはコマンドプロンプトが組み込まれています

後で探しているのは、./script.shと入力するだけの統合シェルだけです。


私は他のすべての答えをスクロールしましたが、本当に同意しません。確かに、それぞれのエディター(vim、emacs、vi、gedit、notepad ++、Atomなど)に慣れているユーザーは、常にあなたをお気に入りに向けます。

しかし、コーディング業界での数年の経験と、Atom、Sublime Textなどの多くの新しいエディターをテストしてきたことから、VS Codeはまさに輝いています。 Atomは常になりたかったです。

小さく、高速で、クロスプラットフォームで、拡張可能で、好みに合わせてほぼ完全にカスタマイズできます。非常に生産的で、楽しく、親しみやすい個人的な環境で迅速な結果を提供できるようにしたい場合は、VS Codeをお勧めします。

それは、マイクロソフトがオープンソース、クロスプラットフォーム、そして外国のシステムに対してはるかに友好的な態度をターゲットにして、組織を大きく変えた時代からのものです。そして、編集者の作業をしている人々が彼らの前任のツールを使っていくつかのひどい経験をしていて、それらを一からより良くすることに決めたのは気が付かないことです。

そうそう。また、無料です。

https://code.visualstudio.com/

5
beggarboy

Atom +スクリプト

Atomscript package を併用できます。設定したら、単に押します F5 (何も選択されていない状態で)Shebangに基づいてスクリプトを実行します。次に押す Esc 出力ペインを閉じます。*

Atomは超軽量ではありませんが、超重くもありません。 linter-shellcheck コードの記述とデバッグに役立ちます。 scriptは、Python、Perl、HTMLなど、他の多くの言語もサポートしています。

Atomをインストールするには、 最新リリース の公式.debインストーラーを使用します。


* 2019年11月13日の時点で、scriptには出力ペインが閉じない メジャーバグ が発生していますが、以前のバージョンには影響はありません。以前のバージョンをインストールするには:

apm install [email protected]
5
wjandrea

私はメインテキストエディターとしてsublimeを使用しており、そこでビルドコマンドを使用する必要はありませんでしたが、そのビルドシステムを使用してbashファイルを実行できます。

今のところ、Windowsの場合とまったく同じコマンドをテストすることはできませんが、これで十分です( Source ):

コマンドパレットを開きます(通常はCtrl-Shift-P、または[ツール]メニューの下)。 「ビルド:新しいビルドシステム」を選択します。

ファイルの内容を次のものに置き換えます。

{
    "cmd"       : ["bash", "$file"],
    "selector"  : "source.Shell" 
} 

SublimeのPackagesディレクトリの任意の場所にある推奨ディレクトリにbash.sublime-buildとして保存します。

次に、Ctrl-Bを押してbashファイルを「ビルド」するだけです(そうです、実際に実行しているだけです)。

「cmd」の部分は実際に実行されるコマンドであり、Sublimeがサポートする任意のパラメーターを使用して任意のコマンドを実行できます。 2番目の部分である「セレクター」は、このビルドシステムが実行されるファイルタイプです。これは単なる「シェル」ファイルです。

4
John Hamilton

Vim/gvimの下では、 autocommandsautocmd-use )はこの種のワークフローに役立ち、特定のファイル/バッファイベントでvim(およびシェル)コマンドを実行できます-それらを手動でトリガーする必要があるステップを回避します。

例として

:au BufWritePost,FileWritePost * silent :!( cd /path/to/somewhere && ./my-Shell-command with some args; )

これは./my-Shell-command ...ファイルを書き出す/保存するたび。警告は、エディター自体には出力が表示されないことです(これには別のシェルウィンドウが必要になるため)。これが必要な場合とそうでない場合があります。

概念を拡張して有用にする(たとえば、stdout/stderr出力を保持するためにvim-tmuxを使用する)と、上記は次のようになります。

:au BufWritePost,FileWritePost * silent :Tmux ( cd /path/to/somewhere && bats my-tests.bats && ./my-script with some args; )

これは、ほとんどのワークフローを自動化(コード、テスト、実行、繰り返し)でき、コードを書く作業に集中できる場合、個人的には非常に強力です。

4
shalomb

EmacsにはこれらのShell関連関数があります:(注:Emacsには学習曲線があります)

async-Shell-command       M-&
   Execute string COMMAND asynchronously in background.
compilation-Shell-minor-mode  M-x ... RET
   Toggle Compilation Shell minor mode.
eshell                M-x ... RET
   Create an interactive Eshell buffer.
eshell-command            M-x ... RET
   Execute the Eshell command string COMMAND.
eshell-mode           M-x ... RET
   Emacs Shell interactive mode.
eshell-report-bug         M-x ... RET
   Report a bug in GNU Emacs.
gdb-Shell-minor-mode          M-x ... RET
   Minor mode to add gdb features to Shell mode.
idlwave-Shell             M-x ... RET
   Run an inferior IDL, with I/O through buffer
   `(idlwave-Shell-buffer)'.
minibuffer-default-add-Shell-commands M-x ... RET
   Return a list of all commands associated with the current file.
Shell                 M-x ... RET
   Run an inferior Shell, with I/O through BUFFER (which defaults to
   `*Shell*').
Shell-command             <menu-bar> <tools> <Shell>, M-!
   Execute string COMMAND in inferior Shell; display output, if any.
Shell-command-on-region       <menu-bar> <tools> <Shell-on-region>, M-|
   Execute string COMMAND in inferior Shell with region as input.
Shell-current-directory       M-x ... RET
   Create a Shell pertaining to the current directory.
Shell-script-mode         M-x ... RET
   Major mode for editing Shell scripts.

または、makeを学習曲線とともに使用することもできます。

0
waltinator

vimを使用して編集しているときに、Escを押して:shEnterを入力します。完了したらCtrl-Dを押すと、vimセッションに戻ります。

皆さん、ありがとうございました。

0
Yaron