使用记事本++搜索字符串时,会打开新窗口并显示查找结果。我想在vim中使用这个功能。经过谷歌搜索后,我发现了一些建议:
vimgrep /<pattern>/ %
copen
Run Code Online (Sandbox Code Playgroud)
可以创建执行这两个命令的映射。模式应该是当前单词:可能是 vim 中的 cword 关键字?
我从项目到项目处理程序创建了地图.
array set handlers {
handleItem1 handlerFunction1
handleItem2 handlerFunction2
}
Run Code Online (Sandbox Code Playgroud)
但是handlerFunctions可以接受参数.
所以下面的代码不会起作用.
if { [info exists handlers($item) ] } {
eval $this $handlers($item)
}
Run Code Online (Sandbox Code Playgroud)
那么我可以使用这个代码来调用可以获取参数的处理程序吗?
我正在尝试编写一个能够使用以下输入的语法:
begin #this is a example
x = 56;
while x > 0 do
begin
point 15.6 78.96;
end;
end;
Run Code Online (Sandbox Code Playgroud)
这是 lexer.l 文件:
%option noyywrap
%{
#include "parser.h"
#include <stdlib.h>
#include <stdio.h>
const char * const unrecognizedToken = "Unrecognized token";
%}
NewLine \n
WhiteSpaces [\r\t\f\v ]+
Semicolon ;
digit [0-9]
number1 {digit}+\.?([eE][-+]?{digit}+)?
number2 {digit}*\.{digit}+([eE][-+]?{digit}+)?
double_number {number1}|{number2}
BEGIN "begin"
END "end"
WHILE "while"
DO "do"
POINT "point"
%x POINT_DEFINITIONS
%%
{WhiteSpaces} {
printf("WhiteSpaces");
printf("\n");
}
{NewLine} {
printf("NewLine");
printf("\n");
}
{WHILE} …Run Code Online (Sandbox Code Playgroud) 我有两个包含一些数据(数字数据或/和字符串)的列表?
那么在假设列表不包含子列表的情况下,我应该如何加入这两个列表.
什么是首选,为什么?
set first [concat $first $second]
lappend first $second
append first " $second"
如何从通用方法调用非通用方法:
class Test {
...
public <T> int someFunction1(T someParam) {
return someFunction2(someParam);
}
public int someFunction2(String someParam) {
return 1;
}
public int someFunction2(Integer someParam) {
return 1;
}
}
Test t = new Test;
t.someFunction1(new String("1"));
t.someFunction1(new Integer(5));
Run Code Online (Sandbox Code Playgroud)
也可以在编译时而不是在运行时执行此操作吗?
我使用vim进行C++代码编辑.但它的代码完成并不是那么好(虽然我尝试过很多插件,比如OmniCppComplete).Qt Creator代码完成非常棒,并且它还具有vim样式编辑功能,对我来说功能足够了.只有对我不利的事情是我不能在Qt Creator中使用ctags功能(尽管Qt Creator具有转到类定义的功能,但是解析源代码需要花费更多的时间).
是否可以在假vim模式下创建源代码标记文件并在Qt Creator中使用它?
有一组顶点:[x1 y1 x2 y2 .. xn yn]
我想改变那些坐标的中心.所以我尝试:
proc changeCenter { vertices X Y } {
set myList [list]
foreach element $vertices {
lappend myList [expr [lindex $element 0] + $X]
lappend myList [expr [lindex $element 1] + $Y]
}
return $myList
}
Run Code Online (Sandbox Code Playgroud)
但它的表现太慢了.
如何更改上面的代码以更有效或者可能需要更改顶点的表示?
考虑一下这个lex.l文件:
%{
#include "y.tab.h"
%}
digit [0-9]
letter [a-zA-Z]
%%
"+" { return PLUS; }
"-" { return MINUS; }
"*" { return TIMES; }
"/" { return SLASH; }
"(" { return LPAREN; }
")" { return RPAREN; }
";" { return SEMICOLON; }
"," { return COMMA; }
"." { return PERIOD; }
":=" { return BECOMES; }
"=" { return EQL; }
"<>" { return NEQ; }
"<" { return LSS; }
">" { return GTR; } …Run Code Online (Sandbox Code Playgroud) 以下是"Effective STL"的引用:
当您从容器中获取对象时(通过例如正面或背面),您设置的是所包含内容的副本.复制,复制出来.这是STL的方式.
我很难理解这一部分.据我所知,front返回第一个元素的引用(至少为std::vector).你能解释一下这句话吗?
我想grep所有以:student_开头的字符串模式 ,然后是 任意数量的符号(字母和数字) ,以.tcl结尾
我面对的代码对我来说有一个非常类似的操作:
return std::pair<T1, T2>(value >> 32, ( (value << 32) >> 32) );
Run Code Online (Sandbox Code Playgroud)
这是什么意思:( (value << 32) >> 32).
这和刚刚一样value吗?(对我来说,当值类型的大小是64位时是合理的)
在lex&yacc中有一个名为YY_INPUT的宏,可以重新定义,例如以这种方式
#define YY_INPUT(buf,result,maxlen) do { \
const int n = gzread(gz_yyin, buf, maxlen); \
if (n < 0) { \
int errNumber = 0; \
reportError( gzerror(gz_yyin, &errNumber)); } \
\
result = n > 0 ? n : YY_NULL; \
} while (0)
Run Code Online (Sandbox Code Playgroud)
我有一些叫做YYACCEPT宏的语法规则.如果在YYACCEPT之后我调用了gztell(或ftell),那么我得到一个错误的数字,因为解析器已经读取了一些不必要的数据.
那么如果我有一些叫做YYACCEPT的规则,我怎么能得到当前的位置(一个坏的解决方案是逐个字符地阅读)
(我已经做过这样的事情:
#define YY_USER_ACTION do { \
current_position += yyleng; \
} while (0)
Run Code Online (Sandbox Code Playgroud)
但似乎不起作用)
我对sscanf函数的使用有疑问.
#include <iostream>
#include <stdio.h>
int main()
{
char a[3];
char b[4];
const char* p = "aaaaaaaaaaaaaaaaaa bbbbbb";
sscanf(p, "%2s %3s", a, b);
std::cout << a << std::endl;
std::cout << b << std::endl;
return 0;
}
Run Code Online (Sandbox Code Playgroud)
期望的输出是:aa bbb
实际输出是:aa aaa