我们的一位开发人员决定他要求其他开发人员如何格式化他们的源代码.
我自己,我坚信Allman风格的缩进比K&R更好.
格式化风格就像宗教一样,总有那些不同意.无论证据表明一个人比另一个人好,但人们不会接受它.
所以我想做的是,每次我在Eclipse中打开一个文件时,我都会对源代码进行格式化,这样我就可以查看漂亮的代码了.每次我保存,它应格式化为办公室的口述风格.
我想我可以手动完成这个并且有两个热键.Ctrl-Alt-PgUp:我的方式Ctrl-Alt-PgDown:高路
热键选项可能很好,因为那时我会验证一切都很好,而不是在幕后无形地发生.
Eclipse有一个格式选项.我需要的是两种格式样式,并将它们各自映射到快捷键.这有可能,如果是的话,怎么样?
我知道我可以这样做:
#define MACRO(api, ...) \
bool ret = api(123, ##__VA_ARGS__);
Run Code Online (Sandbox Code Playgroud)
这只是一个例子,它是更复杂的解决方案的一部分.关键是我需要将可变数量的参数附加到第一个123. ##使编译器在123参数之后删除逗号,如果没有参数传递给MACRO.
但现在我想向api附加参数,如下:
#define MACRO(api, ...) \
bool ret = api(__VA_ARGS__##, 456);
Run Code Online (Sandbox Code Playgroud)
诺坎多.一种解决方案是使用两个宏,MACRO和MACRO_V,并使_V版本不处理任何参数.但有没有办法让它与一个宏一起工作?
通常情况下,我可以通过google方式找到解决方案,但这次不是.
我正在使用64位Linux Ubuntu 11.04来编译32位Windows应用程序.我正在使用i586-mingw32msvc-gcc来编译我的C++文件.
TEST.CPP:
#include <boost/asio.hpp>
Run Code Online (Sandbox Code Playgroud)
生成文件:
i586-mingw32msvc-gcc -c -m32 -mthreads -o test.o test.cpp
Run Code Online (Sandbox Code Playgroud)
错误:
boost/asio/detail/socket_types.hpp:
# include <sys/ioctl.h>
doesn't exist.
Run Code Online (Sandbox Code Playgroud)
添加到makefile:-DBOOST_WINDOWS
Error:
# warning Please define _WIN32_WINNT or _WIN32_WINDOWS appropriately
Run Code Online (Sandbox Code Playgroud)
好的,添加到makefile:-D_WIN32_WINNT = 0x0501
Error:
# error "Compiler threading support is not turned on. Please set the correct command line options for threading: -pthread (Linux), -pthreads (Solaris) or -mthreads (Mingw32)"
Run Code Online (Sandbox Code Playgroud)
但我确实指定了-mthreads.
我可以使用Ctrl+]跳转到光标下单词的定义,我可以使用Ctrl+O跳转回我来自的地方。但是如果我做一些类似控制点击某事的事情,那个跳转列表似乎并没有记录我来自哪里。Ctrl+O然后不会跳回到我点击控制键时所在的位置。
有没有办法确保跳转列表不会错过这个?
IdeaVim 中的Ctrl+T和Ctrl+都不会O在以任何方式跳转到某个东西时总是返回到前一个位置。
是的,在Ctrl+ 之类的之后],您可以跳回到使用Ctrl+ 的地方O。但是有各种不同的跳跃方式。
我想要一组快捷键,无论它如何跳转到某处,它都可以始终跳回到我来自的地方。无论是通过 Vim 操作还是 IDE 操作,Ctrl+O和Ctrl+ 都I应该让我来回切换。现在,这似乎是一个可怕的混乱令人沮丧的混乱。
我有一个很大的第三方xsd文件,它通过导入引入了一大堆其他xsd文件。整个过程产生了1000多个类。当我告诉xjc(jaxb)处理器在特定程序包中生成所有内容时,我会遇到各种命名冲突。如果我未指定包,则处理器使用xsd文件中的target属性创建java包,并且整个生成过程没有任何错误。
问题在于包结构很糟糕,因为目标名称的选择确实很差。其他开发人员讨厌它。他们只需要几节课。
所以我一直想做的就是给处理器一个bindings.xml文件,我想在其中指定要在给定包名称中生成的某些类。我在Oracle网站的文档,论坛和示例之间来回走动。我无法引用绑定文件的每个迭代。我当前的化身是这样的:
<jaxb:bindings
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
version="2.1"
schemaLocation="heavy.xsd"
node="//xsd:element[@name='Error']"
>
<jaxb:bindings node="//xsd:element[@name='Error']">
<jaxb:package name="ABC"/>
</jaxb:bindings>
<jaxb:globalBindings
underscoreBinding="asCharInWord"
localScoping="toplevel"
typesafeEnumMaxMembers="10000"
generateElementClass="true"
>
</jaxb:globalBindings>
<!--
<jaxb:package name="ABC"/>
-->
<!--
<jaxb:schemaBindings>
<jaxb:package name="ABC"/>
</jaxb:schemaBindings>
-->
<!--
<jaxb:schemaBindings>
<jaxb:package name="ABC"/>
<jaxb:nameXmlTransform>
<jaxb:elementName prefix="Error"/>
</jaxb:nameXmlTransform>
</jaxb:schemaBindings>
-->
</jaxb:bindings>
Run Code Online (Sandbox Code Playgroud)
不管我尝试什么,我都没有看到它会在ABC包中生成任何类。在这种情况下,我希望在ABC中生成错误。任何帮助将不胜感激。
我有一个应用程序,该应用程序在包结构的两个不同位置具有两个称为“服务”的类。日志记录将像这样输出文件和行号,例如:(Service.java:102)这将成为Eclipse中控制台输出中的可单击链接。通常,这些链接非常有用,因为您只需单击一下即可找到打印输出的确切位置。但是,现在我有两个Service.java文件,它们执行两种完全不同的操作,并且它们在包结构中的位置不同。我不能重命名任何一个。当我单击链接时,即使在编辑器中打开了正确的Java文件,它也会带我到错误的Java文件。
我到处搜寻,但是找不到答案。有没有办法告诉Eclipse首先要考虑哪个Java文件?还是一种告诉先看哪个包的方法?可以使这些可点击链接再次有用的东西吗?
ctrl-O用于跳转到跳转列表中的上一个条目.但是在IDE中,根据文档,ctrl-O可以帮助您覆盖基类中声明的方法,当光标位于空行时,类似于在Eclipse中进行ctrl-enter.
可以更改将ctrl-O控件分配给IDE的设置.这将使vim松散访问该键,并且您不再可以使用它来跳转跳转列表.
是否有一个特殊的快捷键,以便下一个键由IDE而不是vim处理?
在开始我的应用程序之前,IDEA 需要很长的构建时间,这让我感到沮丧。我确实使用 DCEVM 比普通的热插拔更好地享受动态更改代码的乐趣,但是如果我确实需要多次启动我的应用程序,这将不起作用。
IDEA 应该能够进行增量编译,但我没有看到。我看不到启用此功能的选项。启动或启动应用程序的调试,需要将近半分钟。一定要花这么长时间吗?理论上,IDEA 已经生成了所有的类文件,除了刚刚编辑的源文件。IDEA 应该能够填补少数空白,并让应用程序几乎立即运行。有什么问题,为什么它坚持必须重新编译每个源文件?附:我在 IDEA 中使用 Eclipse 编译器,因此它可以容忍一些无法编译的源文件。我必须这样做,因为它是一棵巨大的 java 文件树,我无法控制每个文件。
然后我看到也许 Gradle 确实有增量编译。所以我想重新创建我的项目,这次是用 Gradle。我很难弄清楚它是如何工作的,它是如何集成的,哪些任务从 IDEA 转移到 Gradle(如果有)。即使在 IDEA 中使用 Gradle 创建一个简单的骨架测试应用程序也非常令人沮丧。到处都是各种模糊的东西,让你猜测。Jetbrains 上的教程几乎没用。我找不到一个清晰到可以简单地解释它是如何工作的。我看到一些演示说,点击这里、这里和那里,但我的结果与我看到的不一样。
例如,Gradle 抱怨它找不到 junit jar。好的,所以我进入项目设置,并尝试将 junit jar 添加到类路径。在库下,我会看到“Gradle: junit:junit:4.11”的条目。但是还有第二个:“junit-4.11”。为什么是两个?我可以删除一个吗?为什么这个是口头的,冒号这个冒号等等。所以我将我必须的junit jar文件添加到两者中。但随后在 Gradle Projects 窗口中,我看到了 gradle 项目设置的分层细分,验证->测试。然后应该运行我设法创建的测试类。
FAILURE: Build failed with an exception.
* What went wrong:
Could not resolve all dependencies for configuration ':testCompileClasspath'.
> Could not resolve junit:junit:4.11.
Required by:
xpert_client4:xpert_client4:1.0-SNAPSHOT
> No cached version of junit:junit:4.11 available for offline mode.
* Try: …Run Code Online (Sandbox Code Playgroud) java ×4
eclipse ×2
ideavim ×2
boost ×1
boost-asio ×1
boost-thread ×1
c ×1
formatting ×1
gcc ×1
gradle ×1
jaxb ×1
linux ×1
mingw ×1
vim ×1
xsd ×1