Bash 我可以将一些输出写入当前文档,将一些写入shell输出吗?

Bash 我可以将一些输出写入当前文档,将一些写入shell输出吗?,bash,gedit,external-tools,Bash,Gedit,External Tools,我正在使用gedit,并试图将其转换为一个真正的IDE。我想要的是映射ctrlshift,当文件类型为“text/html”时运行我的tidy工具,当文件类型为“text/x-python”时运行我的autopep8工具 事实证明(我认为这是一个bug),gedit并不关心您指定的文件类型。如果您有一个键组合集,无论文件类型是否匹配,它都会运行一个工具。相关,但可能不是bug,我只能将键盘快捷键设置为一个外部工具 因此,我编写了一个在ctrlshift上运行的外部工具,如果文档是Python,则

我正在使用gedit,并试图将其转换为一个真正的IDE。我想要的是映射ctrlshift,当文件类型为“text/html”时运行我的
tidy
工具,当文件类型为“text/x-python”时运行我的
autopep8
工具

事实证明(我认为这是一个bug),gedit并不关心您指定的文件类型。如果您有一个键组合集,无论文件类型是否匹配,它都会运行一个工具。相关,但可能不是bug,我只能将键盘快捷键设置为一个外部工具

因此,我编写了一个在ctrlshift上运行的外部工具,如果文档是Python,则运行
autopep8
,如果文档是HTML,则运行
tidy

#!/bin/sh
# [Gedit Tool]
# Save-files=document
# Shortcut=<Primary><Shift>bar
# Output=replace-document
# Name=Tidy by Filetype
# Applicability=all
# Input=document

if [ $GEDIT_CURRENT_DOCUMENT_TYPE = "text/x-python" ]; then
    autopep8 - -v -a
elif [ $GEDIT_CURRENT_DOCUMENT_TYPE = "text/html" ]; then 
    #-i auto indents, -w 80 wrap at 80 chars, -c replace font tags w/CSS
    exec tidy -utf8 -i -w 80 -c "$GEDIT_CURRENT_DOCUMENT_NAME"
elif [ $GEDIT_CURRENT_DOCUMENT_TYPE = "text/css" ]; then
    #TK CSS tidy
else 
    echo "This seems to be " $GEDIT_CURRENT_DOCUMENT_TYPE " I don't know how to tidy that."
fi
#/垃圾箱/垃圾箱
#[Gedit工具]
#保存文件=文档
#快捷方式=条
#输出=替换文档
#名称=按文件类型分类
#适用性=全部
#输入=文件
如果[$GEDIT_CURRENT_DOCUMENT_TYPE=“text/x-python”];然后
自动EP8--v-a
elif[$GEDIT_CURRENT_DOCUMENT_TYPE=“text/html”];然后
#-i自动缩进,-w 80以80个字符换行,-c替换字体标记w/CSS
exec tidy-utf8-i-w 80-c“$GEDIT\u当前\u文档\u名称”
elif[$GEDIT_CURRENT_DOCUMENT_TYPE=“text/css”];然后
#TK CSS整洁
其他的
echo“这似乎是”$GEDIT_CURRENT_DOCUMENT_TYPE“我不知道如何整理它。”
fi
倒数第二句话让我心碎。如果我没有为最后一个
else
定义任何操作,它只会删除我现有的文档。如果我运行ctrlshift |并且文件类型不是我考虑的类型,我希望它将文件类型报告给shell输出,而不是将文档内容替换为

这似乎是application/x-shell脚本,我不知道如何整理 那个


有没有一种方法可以编写我的工具,这样我就可以将一些输出写入shell,将一些输出写入文档?

没有尝试使gedit更可用的经验,我确实发现:

这里的关键结构是

echo "..." > /dev/stderr
如果文件与mime类型不匹配,至少可以阻止您对文件内容的破坏,但我不确定它将打印到哪里(希望是在正常的地方)

编辑(获取更完整的答案):


您还需要
cat$GEDIT\u CURRENT\u DOCUMENT\u NAME
将文件内容替换为文件本身。@markku-k(谢谢!)

指出了这一点,我想您可能只是想
cat“$GEDIT\u CURRENT\u DOCUMENT\u NAME”
将当前文档替换为它自己。您是否尝试将消息写入stderr(即,
echo“这似乎是…”>&2
)?@MarkkuK。非常感谢。但是为什么要把你的答案写在评论里呢?我不能在那里接受它。我仍然需要
cat$GEDIT\u CURRENT\u DOCUMENT\u NAME
,否则它会将我文件的内容完全删除,但将输出重定向到
stderr
确实会将其放入Shell输出窗格中。