升级vim 升级vim每次升级,都是累,可不升级又不行.升级要用vim官网的稳定版,否则,是不行的.要出错.python要用py32里面的dll,要求名字叫python39.dll,然后放进E:\vim\vim82目录里面._viminfo也给你覆盖了,我说怎么速度变快了.覆盖了都不讲一声.什么插件都不安逸,不如自己写.把扩展.dll放入vim82目录中....
ahk强大的if功能 #If WinActive("ahk_class CabinetWClass")&&(!A_CaretX)n::send {esc}^+{tab}m::send {esc}^{tab}h::send {left}j::send {down}k::send {up}l::send {right}g::send {home};G::send {end};不分大小写.e::send {end}o::send {enter}i::send !{up}v::send +{f10
ahk判断输入状态及函数赋值 ;要一个:,还要一个%a%.H(){GetKeyState,state,LButton,P;return A_Cursor == IBeam && state == D};判断是否是输入状态.Loop{m:=H()ToolTip,%m% %A_CaretX%+200 %A_CaretY%+200Sleep,400}
d无法检查函数地址 // --- module a:alias F = extern (C) void function(string param);F fun = someLibLoad!F("name");assert(fun !is null); // 编译,且运行时工作.// --- module b:import a;// 参数太少.assert(fun !is null);//不编译.应该是哪里还有个fun.断定是语句,不是声明.可用std.traits.fullyQualifiedNam
d闭包中循环,每次应不一样 import std.stdio;void main()@safe{ void delegate()@safe[] dgList; foreach(i; [1, 2, 3]) { immutable b = i; dgList ~= { writeln(b); };//应该不同. } foreach(dg; dgList) dg();}即使用-dip1000编译,也应不同.
d的不抛方法可以覆盖 class C{ void fun() { throw new Exception("oops"); }}class D : C{ override void fun() nothrow { }}void main(){ D d = new D; C c = new D; d.fun(); // ok c.fun(); // ok}
d,C++的常函数覆盖 extern(C++) class foo{ void func() { }}extern(C++) final class bar : foo{ override void func() const { }}---class foo{public: virtual void func();};class bar final : public foo{public: void func() override;};int main(){
d隐式整转换 import std.stdio: writeln;void foo(uint x) in (x >= 0){//删除该前条件,因为x为`正`总是`>=0`. writeln(x);}void foo(ushort x) in (x >= 0){ writeln(x);}void main() { int x = -1; foo(x); //打印4294967295 short y =-1; foo(y);
d的类型可变参数 struct S{ string[] s;}auto foo(string[] s...) //不能用`中`标记`s`{ return S(s);//改为 return S(s.dup);}void main(){ import std.stdio: writeln; writeln(foo("你好D"));}可变参数保存在函数结束时过期的临时数组中,因而复制到GC....
d如何推导闭包. import std.stdio;import std.algorithm;import std.traits;import std.range;void print(R)(R r) { static assert(isIterable!R); r.each!writeln;}auto construct(R)(R r, ElementType!R delegate(ulong i) fn) { static assert(isIterable!R && hasA
d出域变量 import std.stdio;@safe:unittest { void delegate()[] dgList; foreach(int i; [1, 2, 3]) { int b = 2; dgList ~= { writeln(b); }; writeln(&b); //报错,d不能取出域变量地址. }}超过引用变量的闭包字面的正确行为是,分配闭包.这里也是....
d调用破坏有问题 import core.memory;import core.stdc.stdlib : malloc, free;import core.lifetime : emplace;T NEW(T, Args...)(auto ref Args args) /*@nogc*/ if (is(T == class)) { enum size = __traits(classInstanceSize, T); void* mem = malloc(size); scope(failu
d突破性更改需要有迁移路径 如下,T* ptr;if ((ptr = func()) && ...) { ... }// 上面为前,下面为后.T* ptr;if ((ptr = func()) !is null && ...) { ... } // 更可读了.关键是,要提供迁移路径.
ahk模拟ctrl+shift+tab Dcst(){ send {esc} send {ctrl down}{shift down} send {tab 4} send {shift up}{ctrl up}}是,有点麻烦.折腾了半天,搞出来的.
d插件构造器 import std.array, std.exception, std.stdio;mixin template RealizeException() { this(string msg, string file = __FILE__, size_t line = __LINE__) { super(msg, file, line); }}//插件构造器.class WrongUsage : Exception { mixin RealizeExcepti
ahk检测是否存在输入法 HasIme(WinTitle=""){ ifEqual WinTitle,, SetEnv,WinTitle,A WinGet,hWnd,ID,%WinTitle% DefaultIMEWnd := DllCall("imm32\ImmGetDefaultIMEWnd", Uint,hWnd, Uint) ;Message : WM_IME_CONTROL wParam:IMC_GETOPENSTATUS DetectSave := A_DetectHid
d各种条件下的断定 // 调试断定,可能有性能影响.debug assert(condition);assert(condition);//`普通`断定.对多数应用,即使在`发布`版本中也应`启用`,但`接受`断定`失败`时无`内存安全`性,则可`省略`该选项.应该是最常见的断定.version(D_NoBoundsChecks){} else if(!condition) assert(0)//半强式断定.应对所有关心`内存安全`应用`启用`.用于在`"@trusted"`或`"@system"`代码中自定义`
extab作为资源管理 最重要的问题是win11的资源管理经常崩溃.为此必须找替代方法.找了几个QTtabbar搞半天,都不成功,最后要安装netfx3.5,真是坑,没人能够安装它.微软明明最擅长的是兼容,结果,在这里完全把祖先本领忘记了.然后找到extab,非常不错.但是,要改几个映射.我们用ahk来改一改,不然非常不舒服.#IfWinActive ahk_class CabinetWClassf4::send {esc}^+{tab}^f4::send {esc}^w;可专门针对某一窗口,统一关闭.要等等#I