我正在寻找一个优雅的解决方案来确定变量是否是VBA中的整数.不幸的是,如果变体是从字符串创建的,我就被卡住了.这是一个小测试脚本:
dim v as variant
v = "42"
if v <> round(v) then
msgBox("<>")
end if
Run Code Online (Sandbox Code Playgroud)
这里,msgBox会弹出,可能是因为变量是从字符串创建的,尽管我希望v是= round(v).
我面临以下问题:我有一个HTML文档,我想打印基本状态/调试/等消息.
因此,HTML文档包含一个id为out的空前元素:
<body onload='init () && main();'>
<pre id='out'>
</pre>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
init()函数将pre元素赋给变量:
var out_div;
function init() {
out_div = document.getElementById('out')
return 1;
}
Run Code Online (Sandbox Code Playgroud)
然后,为了在pre-div中打印一些东西,我使用这个函数:
function txt_out(txt) {
out_div.innerHTML += "\n" + txt
}
Run Code Online (Sandbox Code Playgroud)
换行符应确保每次调用txt_out都是在自己的行上编写的.这在Firefox中可以正常工作.然而,IE似乎没有注意到\n.那么,IE的这个是错误的,还是我做错了什么?
在MSDN的Win32-Api文档(http://msdn.microsoft.com/en-us/library/ms633573%28VS.85%29.aspx)上WindowProc,它指出:返回值是消息处理的结果并取决于发送的消息.
由于我必须实现这个(回调)程序,我想知道它依赖什么,以及我必须返回什么.有人可以对此有所了解吗?
当我尝试在vim缓冲区中全局替换FOO时,我意外地输入了
:%S/FOO/BAR/
Run Code Online (Sandbox Code Playgroud)
注意大写S而不是更合适s.
当然,它不会取代我的FOO.这是可以理解的.然而,vim将窗口分成两个窗口,两个窗口都保持相同的缓冲区.
不幸的是,我无法找到任何:help关于这种行为.那么,有人可以解释大写:%S应该做什么以及我可以在哪里找到帮助吗?
我希望能够为现有的单字母标记设置额外的标记。因此,我可以解决我目前面临的两个问题:
标记是在脚本中设置的,我不想破坏脚本用户已经设置的标记
我可以设置无限数量的标记,这样我就不必计算它们(我将它们命名为"script_mrk_" . s:mark_count)。
所以,如果表示为函数调用,我可能正在寻找一些东西
setPrivateMark(l:mark_name, l:line, l:pos)
Run Code Online (Sandbox Code Playgroud)
和
let line_pos = getPrivateMark(l:mark_name)
Run Code Online (Sandbox Code Playgroud)
当然,在使用setPrivateMark和之前设置它之后,解决方案应该能够抵抗对标记上方的缓冲区的更改getPrivateMark(...)。
有这样的事情吗?
据我所知,我没有设置viminfo任何地方,但它已设置.
:verbose set viminfo?
Run Code Online (Sandbox Code Playgroud)
版画
viminfo='100,<50,s10,h,rA:,rB:
Last set from ~/vimfiles/vimrc
Run Code Online (Sandbox Code Playgroud)
但是~/vimfiles/vimrc没有设定它.
即使我~/vimfiles/vimrc将其设置为任意值,viminfo仍将设置为'100,<50,s10,h,rA:,rB:.
为什么这样,我怎么设置/取消设置viminfo?
我想影响当我启动vim时我的vimrc文件的执行方式并想到使用像这样的全局变量
if exists("g:UseEnv1")
....
else
....
endif
Run Code Online (Sandbox Code Playgroud)
这样变量将在启动vim时设置
gvim -c "let g:UseEnv1=1" file-1 file-2
Run Code Online (Sandbox Code Playgroud)
但是,这不起作用,因为在执行vimrc文件后评估-c ex命令.
我可以使用环境变量
if $UseEnv1 == 1
...
endif
Run Code Online (Sandbox Code Playgroud)
但是我觉得这有点问题,以防我忘记在两个会话之间更改$ UseEnv1的值.理想情况下,当我启动vim时,我想明确表示我想要Env 1.
还有其他可能吗?
我编译了gnu标准库并将其安装在$GLIBC_INST.
现在,我尝试编译一个非常简单的程序(只使用一个#include :) #include <stdio.h>:
gcc --nostdinc -I$GLIBC_INST/include foo.c
Run Code Online (Sandbox Code Playgroud)
编译(预处理器?)告诉我,它没有找到stddef.h.
事实上,没有$GLIBC_INST/include(也没有/usr/include).然而,我发现了一个stddef.h在/usr/lib/gcc/x86_64-unknown-linux-gnu/5.3.0/include.
为什么那个文件不在/usr/include?我认为它属于标准的c库,应该安装在$GLIBC_INST/include.
我怎么能用foo.c新安装的标准库编译我的标准库stddef.h?
编辑:澄清
我觉得这个问题的标题不是最优的.正如一些答案所指出的那样,没有要求stddef.h进入/usr/include(或$GLIBC_INST/include就此而言).我明白这一点.
但是我想知道当我想要使用时如何继续$GLIBC_INST.我似乎很明显(虽然我可能在这里错了)我需要调用gcc --nostdinc以便不使用系统安装的头文件.这需要我使用-I$GLIB_INST/include.这对我来说很清楚.
然而,我还不清楚的是:当我还添加时,我-I/usr/lib/gcc/x86..../include怎么能确定我确实拥有新编译的glibc的最新头文件?
消息
Cloning into 'sub-mod'...
done.
Run Code Online (Sandbox Code Playgroud)
git submodule add...将命令写入stderr后。我希望该消息被写入标准输出,因为我不认为它表明命令出了问题。
我可以使用以下命令序列重现此内容:
rm -rf /tmp/repo /tmp/module
mkdir /tmp/repo /tmp/module
cd /tmp/module
git init > /dev/null
echo "foo" > foo;
git add foo > /dev/null
git commit . -m "+ foo" > /dev/null
cd /tmp/repo
git init > /dev/null
git submodule add /tmp/module/ sub-mod 1> /dev/null
Run Code Online (Sandbox Code Playgroud)
如果我将最后一个命令中的重定向更改为... 2> /dev/null,则不会打印任何内容。
以下脚本以UTF-8编码:
use utf8;
$fuer = pack('H*', '66c3bc72');
$fuer =~ s/ü/!!!/;
print $fuer;
Run Code Online (Sandbox Code Playgroud)
其中ü的s///内容存储在脚本中c3 bc,如下面的xxd十六进制转储所示.
0000000: 75 73 65 20 75 74 66 38 3b 0a 0a 24 66 75 65 72 use utf8;..$fuer
0000010: 20 3d 20 70 61 63 6b 28 27 48 2a 27 2c 20 27 36 = pack('H*', '6
0000020: 36 63 33 62 63 37 32 27 29 3b 0a 0a 24 66 75 65 6c3bc72');..$fue
0000030: …Run Code Online (Sandbox Code Playgroud)