当使用vim插件YouCompleteMe进行C++代码完成时,我偶然发现了一个问题.使用嵌套模板类可以使完成无法正常工作.
请考虑以下示例来重现行为:
#include <vector>
template<class T>
class foo {
public:
void Init();
private:
struct bar {
int foobar;
};
bar one_bar;
std::vector<foo<T>::bar> some_bars;
};
template<class T>
void foo<T>::Init(){
one_bar.foobar = 0; // completion as expected
some_bars.at(0).foobar = 0; // no completion neither for "at" nor for "foobar"
}
Run Code Online (Sandbox Code Playgroud)
"some_bars"的代码完成根本不起作用,而"one_bar"的行为与预期一致.
如何完成此代码的完成工作?这个问题是否与设置有关并且实际上应该有效还是YCM中的错误?
我的系统是基于debian的jessie/sid,vim版本7.4,来自GitHub的YCM最新版本.
编辑:YCMs bug跟踪器中报告了类似的问题:https : //github.com/Valloric/YouCompleteMe/issues/243 https://github.com/Valloric/YouCompleteMe/issues/530
似乎是铿锵而不是YCM中的错误.有人能证实吗?
编辑2:我在YCM问题跟踪器中打开了另一个问题. https://github.com/Valloric/YouCompleteMe/issues/1170
目的是获得有关clang中的错误信息的更多信息,最后在clang问题跟踪器中进行错误报告.
编辑3:我按照RedX的建议程序,在clang中输入我的代码以获得完成.Clang没有为代码中讨论的位置提供任何建议.这显然是YCM未能在vim中提出建议的原因,它与YCM或vim无关.
已提交clang问题跟踪器中的错误报告:http: //llvm.org/bugs/show_bug.cgi?id = 20973
我使用 Visual Studio 2022 一段时间了,它的行为非常烦人。当我在现有文本前输入引号 \xe2\x80\xba"\xe2\x80\xb9 时,要将此文本括在引号中,Visual Studio 会在文本前输入两个引号。
\n在早期版本中,仅当您在行尾输入引号而不是在现有文本之前输入引号时,才会发生这种情况。
\n很多时候,我只想输入一个引号,而 Visual Studio 会写两个。\n我想也许我已经习惯了这种行为,但我没有。
\n有谁知道如何停用这种行为。
\n我已经停用了所有扩展,只是为了确保此行为不是由扩展引起的。
\n我正在寻找一套插件,可以帮助我最终切换到vim全职.
现在我正在使用Komodo取得了一些成功,但他们的vim绑定有足够的错误,我已经厌倦了它.
不过,我在Komodo所喜欢的是代码完成.所以,这就是我正在寻找的(按重要性排序).
在许多情况下(例如函数参数),Pydev不会静态地知道变量的类型.因此,代码完成(在.使用之后或使用时ctrl+space)不起作用.
在大多数情况下,您在设计软件时知道运行时的类型.有没有办法暗示Pydev正确编码完成它?
我想这可能需要特定的Pydev功能,或者甚至是新的Python PIP.
这实际上似乎是所有动态语言的一般问题......
更新:
也许有一个例子可以澄清:
def some_func(a_list, an_object):
a_list.app # Here I would not get code completion for append
Run Code Online (Sandbox Code Playgroud)
如果Pydev(或PIP)支持它,可以使用的示例:
from someobj import SomeObject
def some_func(a_list, an_object):
# typecast: a_list=list
# typecast: an_object=SomeObject
a_list.app # Now code completion would show append
Run Code Online (Sandbox Code Playgroud)
我不支持这种特定的方法 - 它只是一个可以工作的系统的例子.同样,当然这不应该是强制性的 - 但有时缺乏提示类型的可能性是令人讨厌的.
我想修改类完成,以便创建的每个方法都包含一个 raise ENotImplemented.Create;
有谁知道如何自定义此行为?
更新:
我想要的解决方案不依赖于第三方.
IDE从哪里获取模板?
通过OTA有办法吗?
我在一个包中有一些模块(一种工具包),我在我的项目中使用它.结构如下所示:
the_toolkit:
__init__.py
basic_io.py
simple_math.py
matrix_kit.py
...
Run Code Online (Sandbox Code Playgroud)
现在当我从包中导入模块后使用IPython或代码完成VIM时
from the_toolkit import matrix_kit
Run Code Online (Sandbox Code Playgroud)
我得到一堆模块/功能,其matrix_kit.py进口(array,math,log,loggin,format_exc,等等),与该实际功能一起matrix_kit限定.我怎样才能否则过滤掉一切,因为我不感兴趣,math或array在的代码完成matrix_kit模块?
__init__.py许多pythonistas建议这是空的,还是这样做的?
首先我认为这是VS2013 RC/beta的一个问题,但现在我安装了VS2013 RTM并且仍然存在同样的问题:代码完成仅在我通过strg + space手动执行后才会打开.如何打开例如点后打开窗口?
intellisense code-completion visual-studio visual-studio-2013
免责声明:这是Java和IntelliJ的大师那天的天真问题!
首先,我的观点是不要启动尚未重新审视的IDE或编辑的战争.作为一名程序员,有时候我只想享受一些乐趣,我对这个时期感到好奇.准备?
我们在这里,我每天都使用GNU/Emacs,我非常满意.作为Java开发人员,我非常了解IDE的代码完成功能.有些项目已尝试将此类完成传播到Vim或Emacs:请参阅eclim项目,派生的emacs-eclim项目,或者使用完全相反的方法:最近的(ATTOW)ideavim插件.话虽这么说,我现在想知道eclim方法是否可以应用于IntelliJ/Emacs情侣利用或不是yasnippet和/或自动完成.第一个问题是,乍一看,似乎不可能像使用Eclipse那样将IntelliJ作为无头过程运行.
因此,我认为第一步是使IntelliJ的代码完成组件无头运行.我已经浏览了完成代码,但我对Java的熟练程度不足以确定是否可行.
让我知道你的想法.
来自评论的更新:
从Tom的评论中,我同意主要问题不是运行无头IntelliJ而是隔离代码完成组件并开发代码完成服务器插件.不过,没有一个完整的IntelliJ的UI运行会很好.我将尝试看看如何链接Emacs和IntelliJ插件.
有趣(......或不)引用:
我正在使用Android工作室,我正试图找到一种方法来使用我曾经在eclipse中做的非常常见的事情.当我正在编写(例如)一个for循环时,我正在写"for"这个词然后我点击Ctrl+ Space和eclipse自动完成到一个包含所有参数的for循环
for (int i=0 ; i<mCheckBoxArray.length;i++){
mCheckBoxArray[i].setChecked(false);
}
Run Code Online (Sandbox Code Playgroud)
但现在,在Android工作室中它只是自动完成for().for循环只是一个例子,有谁知道如何在android studio中做到这一点?
android for-loop keyboard-shortcuts code-completion android-studio