当我使用:%!通过筛选器运行文件的内容并且筛选器失败(它返回0以外的其他代码)并向stderr输出错误消息我将此文件替换为此错误消息.如果过滤器返回指示错误的状态代码和/或忽略过滤器程序写入stderr的输出,是否有办法告诉vim跳过过滤?
在某些情况下,您希望将文件替换为过滤器的输出,但大多数情况下这种行为是错误的.当然,我可以用一个按键撤消过滤,但它不是最佳的.
在编写自定义vim脚本进行过滤时,我也遇到了类似的问题.我有一个脚本,用system()调用过滤器程序,并用它的输出替换缓冲区中的文件,但似乎没有办法检测system()返回的行是否写入stdout或stderr .有没有办法在vim脚本中区分它们?
根据http://vimdoc.sourceforge.net/htmldoc/usr_41.html#function-list vim脚本有函数setline()和append()来修改当前缓冲区但是如何从脚本中删除一行?使用setline(1,""),该行只是清空但我想摆脱它.
字节码操作的合法用途是什么以及人们如何在实践中实现基于字节码操作的解决方案?
更新:我应该更清楚地说明这个问题实际上是关于人们使用什么模式和技术来使代码在字节码操作的帮助下飞行.
像已经提到的面向方面编程或动态构建代理对象和类似技术的东西.
我使用GLib来解析一些命令行选项.问题是我想要强制选择其中两个选项,以便在用户省略它们时程序终止于帮助屏幕.
我的代码看起来像这样:
static gint line = -1;
static gint column = -1;
static GOptionEntry options[] =
{
{"line", 'l', 0, G_OPTION_ARG_INT, &line, "The line", "L"},
{"column", 'c', 0, G_OPTION_ARG_INT, &column, "The column", "C"},
{NULL}
};
...
int main(int argc, char** argv)
{
GError *error = NULL;
GOptionContext *context;
context = g_option_context_new ("- test");
g_option_context_add_main_entries (context, options, NULL);
if (!g_option_context_parse(context, &argc, &argv, &error))
{
usage(error->message, context);
}
...
return 0;
}
Run Code Online (Sandbox Code Playgroud)
如果我在命令行中省略了其中一个参数或两者都没有,那么g_option_context_parse()仍然成功,并且有问题的值(行和/或列)仍为-1.如果用户没有在命令行上传递这两个选项,我怎么能告诉GLib解析失败?也许我只是盲目但我找不到我可以放入GOptionEntry数据结构的标志,告诉它要强制使用这些字段.
当然我可以检查其中一个变量是否仍为-1但是用户可能只是在命令行上传递了这个值,如果值超出范围,我想打印一个单独的错误消息.
我有一个使用 QTableView 和 QListView 的 Qt 应用程序。在两个witdgets 中我都显示了一些图标。
问题是,当用户选择其中一个条目时,Qt alpha 会混合图标上的选择,从而使图标显示的对比度较低且颜色略有不同。
我希望 Qt 首先绘制选区,然后在顶部绘制图标,这样无论是否选择它们,它们看起来都一样。我怎样才能做到这一点?
更新:
这就是我的问题:
使用白色矩形图标更容易识别:
当您使用图形编辑器检查颜色值时,您会看到颜色值发生变化。我希望 Qt 在没有此覆盖的情况下按原样绘制图标。
这里的 QListView 采用颜色渐变背景样式。但我对无样式的 QTableView 也有同样的问题。
顺便说一句,所有图标都是 SVG。