我经常会在 gedit 中更改一个小脚本,然后从终端运行它。难道没有一个带有“运行”按钮的简单文本编辑器或其他东西来简化这一过程吗?即使在 Eclipse 中,这也不是一件容易的事。我正在寻找关于哪些文本编辑器支持此功能或如何扩展它们以支持此功能的具体建议。
答案1
选项 1:使用 vim、emacs、geany 等等!
在vim
并使用:!bash file.sh
或只是为其创建一个快捷方式.vimrc
在 Emacs 中,您可以使用M-!
。因此,您按住Alt,然后按!。您甚至可以将当前缓冲区中的文本传递给命令,方法是选择要传递给命令的内容,然后按M-|
。因此,您可以突出显示代码并将其传递给命令bash
。
每种工具都有其用途!
选项 2:使用find
和entr
运行此命令,这样每当.sh
目录中的任何文件发生变化时,它都会自动再次运行:
find . -name '*.sh' | entr -cs file.sh
选项 3:使用tmux
、vim
和的组合entr
进行实时编码
我很久以前就写过这个,c++
然后在其他语言中更多地使用它,现在你也可以将它用于 shell 编程。
它看起来是这样的:
为了运行该程序,我要做的就是将其保存在 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
目录并main.sh
在其中放置一个简单的文件,这将是您运行命令时的起点ide
。您还可以创建更多模板(每个模板位于~/bin/templates/
目录中的不同目录中)。
添加/home/$USER/bin
到您的路径以便您可以运行ide
。
要运行脚本,您可以使用以下三种方式:
- 对于简单的测试:(
ide
它将使用mktemp -d
命令创建一个临时目录 - 要将文件保存在
~/cppshell/[something]/
目录中:ide -n=something
- 要使用不同的模板(起点):
ide -t=not-simple -n=some_name
正如我所说的,你可以使用该脚本来制作类似 shell 的工具来运行 python、C++、bash,甚至可以添加你自己的脚本。
更新:自从我写下这个答案以来,我已经多次更新了自己的版本,增加了新功能和更广泛的支持。这是一个此 shell 脚本的 GitHub 页面链接。您还可以查看自述页面。
答案2
从:
Gedit 插件
使用gedit
外部终端插件
您可以使用gedit
终端插件。步骤相当简单:
- 启用“Universe”存储库
- 安装
gedit-plugins
- 激活“嵌入式终端”
- 使用Ctrl+F9打开终端
- 其他
gedit
插件
步骤 1. 启用“Universe”存储库
第一步是确保存储库从-> ->Universe
激活,并确保选中第三个选项:Settings
Software & Updates
Ubuntu Software
第 2 步。安装gedit-plugins
gedit-plugs
使用以下命令安装:
sudo apt install gedit-plugins
步骤3. 激活“嵌入式终端”
打开gedit
(不要使用sudo
)并选择Edit
-> Preferences
->Plugins
并勾选Embedded Terminal
:
步骤 4. 使用Ctrl+F9打开终端
在下面的 GIF 中,我们使用Ctrl+F9来获取一个带有命令提示符的小窗口。使用鼠标将分隔线向上拖动。
步骤5.其他gedit
插件
如步骤 4 中所述,您可以抓住分隔条以放大终端窗口。以下是它在普通图片中的样子(不是 GIF)。
我目前在编码窗口中使用了另外三个插件gedit
:
- 插件显示80个字符的截断值,具有不同的背景颜色
- 插件以缩略图形式显示整个文档,您可以拖动它以快速转到代码部分
- 突出显示匹配的括号
欲进一步了解,请参阅:
答案3
如果你熟悉 vim,你可以执行
:w !bash
(替换您选择的 shell)然后将在当前缓冲区中执行脚本。
在图形环境中,我使用 VS Code。它是一款轻量级的 IDE,可扩展、内置 GIT 支持和集成终端。
答案4
在 Emacs 中您可以使用Ctrl-C
Ctrl-X
它。