小编joh*_*ohv的帖子

如何在Vim中重复任何命令,例如emacs中的"Cx z"?

在Vim中,有没有办法重复最后一个命令,无论是否是编辑,并且没有先见之明来首先录制宏?

比如说我输入:bn,并想再次这样做(这是错误的文件).按压.显然不会这样做.或者也许我正在做gE并且想要重复一遍(通过一次击键,因为显然gE有点痛苦).

也许有一些插件?与此问题类似.

(甚至更酷的是将一些命令追溯绑定到一个宏,所以可以输入5qa@a或者重复最后5个命令......)

vim command repeat

50
推荐指数
4
解决办法
4万
查看次数

gnu make:列出特定运行中所有变量(或"宏")的值

如何在运行make时列出Makefile中所有变量(也称为宏)的当前值?

例如,如果这是在Makefile中:

CUR-DIR := $(shell /bin/pwd)
LOG-DIR := $(CUR-DIR)/make-logs
Run Code Online (Sandbox Code Playgroud)

然后我想告诉我:

CUR-DIR = /home/johv/src/test
LOG-DIR = /home/johv/src/test/make-logs
Run Code Online (Sandbox Code Playgroud)

makefile gnu-make

38
推荐指数
4
解决办法
3万
查看次数

grep匹配精确的子串忽略正则表达式语法

有没有办法让grep匹配一个精确的 字符串,而不是将其解析为正则表达式?或者是否有一些工具可以正确地为grep转义字符串?

$ version=10.4
$ echo "10.4" | grep $version
10.4
$ echo "1034" | grep $version # shouldn't match
1034
Run Code Online (Sandbox Code Playgroud)

bash grep

8
推荐指数
1
解决办法
9323
查看次数

嵌入式awk for .NET?

是否有针对.NET的AWK实现?

更具体地说,这是我想要解决的问题类型的一个例子:

Article number        Price          Package day
10.1002-50            $50            Tuesday
10.1002-51            $40            Monday
10.1002-52            $50
10.1002-53            $50            Tuesday
#start prepackaged
20.2001-51            $1             Monday
20.2001-52            $30            Tuesday
10.1002-54            $10            Tuesday
10.1002-55
#end prepackaged
10.1001-50
10.1002-50            $50            Friday
10.1003-50
10.1004-50
Run Code Online (Sandbox Code Playgroud)

我想获得文章编号,但跳过预先打包的文章编号.

以下是我可以想象用C#中提供的AWK实现来解决它的方法:

using Awk.Extensions;
string[][] output = System.IO.File.ReadLines("C:\Temp\input.txt")
    .Skip(1)
    .Awk("/start prepackaged/,/end prepackaged/ {next}; {print $1}")
    .Select(fields => fields[0])
    .Distinct()
    .ToArray();

foreach(var item in output)
{
    Console.WriteLine(item);
}
Run Code Online (Sandbox Code Playgroud)

这将理想地产生输出:

10.1002-50
10.1002-51
10.1002-52
10.1002-53
10.1001-50
10.1003-50
10.1004-50
Run Code Online (Sandbox Code Playgroud)

有类似的东西吗?是否还有其他一些强大的,基于行的.NET脚本库?我应该考虑一下吗?

进一步调查显示,有一个awk的Java实现Jawk,它也可以将AWK脚本编译为Java字节码!似乎有一个直接的端口这个C#,虽然它似乎不太成熟.

另一个Java项目, …

.net c# embed scripting awk

8
推荐指数
1
解决办法
2059
查看次数

Emacs样式突出显示vim中的增量搜索

在Vim中,有没有办法在搜索时为所有匹配启用动态突出显示?

如果我启用incsearch并输入"/ something",它将仅突出显示第一个匹配项.如果我启用hlsearch并输入"/ something",则在按Enter键之前没有任何反应(它只突出显示上一次搜索).

在emacs中,第一个匹配将被突出显示,并且(在稍微延迟之后)屏幕上的所有其他匹配以不同颜色突出显示,在扫描一段代码中的匹配时提供几乎即时的反馈.

vim highlight

7
推荐指数
1
解决办法
1134
查看次数

DefaultValueHandling在Json.NET 4.5中没有兑现

我正在使用JSON.NET 4.5并关注此博客文章,试图让我的用户对象正确序列化.

几个小时我一直在靠墙打我的头; 无论我做什么,当它们被设置为"该值类型的默认单位化值"(即0)时,我无法让Json.NET忽略整数.

[DataContract]    
public class User
{
    [DataMember]
    public int Id { get; set; }

    [DataMember]
    public string Name{ get; set; }

    [DataMember]
    public string Email{ get; set; }        
}
Run Code Online (Sandbox Code Playgroud)

这是序列化它的调用:

var user = new User()
{
    Id = 0,
    Name = "John Doe",
    Email = null
}

string body = JsonConvert.SerializeObject(user, Formatting.Indented, new JsonSerializerSettings()
{
    DefaultValueHandling = DefaultValueHandling.Ignore
});
Run Code Online (Sandbox Code Playgroud)

生成的JSON是:

{
    "Id": 0,
    "Name": "John Doe"
}
Run Code Online (Sandbox Code Playgroud)

电子邮件被省略,因为它为空.应该省略Id,因为它是0.我还尝试在Id上显式设置[DefaultValue(0)]属性,没有效果.

我做错了什么,或者这是一个错误?

更新

我们再看一下后,DefaultValueAtribute 被荣幸地为整数.因此,此代码将导致Ids为0未被序列化.

[DataContract]    
public …
Run Code Online (Sandbox Code Playgroud)

.net json.net

6
推荐指数
1
解决办法
2618
查看次数

f#设置和映射相等

如何set1 = set2F#的不可变集和地图的工作?他们会做出适当的集合/地图平等吗?

文件说:

基于二叉树的不可变集合,其中比较是F#结构比较函数,可能使用关键值的IComparable接口的实现.

它们基于二叉树,因此可能不会根据订单元素插入确切的形式?如此天真地使用F#结构比较功能是行不通的......

我在文档中找不到任何相关内容.我错过了吗?

f# equality map set

6
推荐指数
1
解决办法
1162
查看次数

f#async何时检查其CancellationToken?

我正在阅读F#的乐趣和利润 - 异步编程.在取消工作流程下,他们有以下示例:

let testLoop = async {
    for i in [1..100] do
    // do something
    printf "%i before.." i

    // sleep a bit 
    do! Async.Sleep 10  
    printfn "..after"
    }

open System
open System.Threading

// create a cancellation source
let cancellationSource = new CancellationTokenSource()

// start the task, but this time pass in a cancellation token
Async.Start (testLoop,cancellationSource.Token)

// wait a bit
Thread.Sleep(200)  

// cancel after 200ms
cancellationSource.Cancel()
Run Code Online (Sandbox Code Playgroud)

他们说:

在F#中,任何嵌套的异步调用都会自动检查取消令牌!

在这种情况下,它是线:

do! Async.Sleep(10) 
Run Code Online (Sandbox Code Playgroud)

从输出中可以看出,此行是取消发生的位置.

但是,对我来说(VS2010,F#2.0,F#Interactive)我得到以下输出.请注意..after …

f# asynchronous cancellationtokensource cancellation-token

6
推荐指数
1
解决办法
1166
查看次数

是否有任何带有便利扩展方法的库可以将泛型与旧的.net库一起使用?

在为Winforms编写代码时,我不得不抛出一切来获得通用的IEnumerable.

resultsListView
    .SelectedIndices
    .Cast<int>()
    .ToArray();

treeView1.Nodes.Cast<TreeView>().Where...

var items = listView1.Items.Cast<ListView>();
Run Code Online (Sandbox Code Playgroud)

现在,如果我像上面那样犯了一个拼写错误,那么在代码运行之前我就不会注意到了.(即它是动态输入的.)

为了解决这个问题,我编写了一些这样的实用程序扩展方法:

resultsListView
    .SelectedIndices
    .AsEnumerable()
    .ToArray();

treeView1.Nodes.AsEnumerable().Where...

var items = listView1.Items.AsEnumerable();
Run Code Online (Sandbox Code Playgroud)

示例扩展方法:

public static IEnumerable<TreeNode> AsEnumerable(this TreeNodeCollection source)
{
    return source.Cast<TreeNode>();
}
Run Code Online (Sandbox Code Playgroud)

现在,我刚刚在这里和那里编写了一个方法,并且在.NET库中有很多类,所以我希望有一些好的灵魂已经完成了吗?那怎么样?

是否有任何带有便利扩展方法的库可以将泛型与旧的.net库一起使用?

编辑:

实际上,为了利用类已经提供的静态类型(通常),这就是我真正编写它们的方式:

    public static IEnumerable<TreeNode> AsEnumerable(this TreeNodeCollection source)
    {
        AssertTypesMatch(source, (s) => s.AsEnumerable(), (s) => s[0]);
        return source.Cast<TreeNode>();
    }

    public static IEnumerable<ListViewItem> AsEnumerable(this ListView.ListViewItemCollection source)
    {
        AssertTypesMatch(source, (s) => s.AsEnumerable(), (s) => s[0]);
        return source.Cast<ListViewItem>();
    }

    [System.Diagnostics.Conditional("ALWAYZ__EXKLUDE_ME_")]
    private static void AssertTypesMatch<TSource, TItem>(TSource t1, Func<TSource, …
Run Code Online (Sandbox Code Playgroud)

.net c# generics extension-methods winforms

5
推荐指数
0
解决办法
168
查看次数

为什么C#中的常量字段不能是非内置结构类型?

class T
{
    enum E { }
    struct S { }
    interface I { }
    delegate void D();
    class C { }

    const E e = new E();
    //const S s = default(S); // ERROR
    const I i = default(I);
    const D d = default(D);
    const C c = default(C);

    const int x = 10;
    const string y = "s";

    private void MyMethod(
        E e = new E(),
        S s = default(S), // NO ERROR
        I i = default(I),
        D …
Run Code Online (Sandbox Code Playgroud)

c# struct const

5
推荐指数
1
解决办法
362
查看次数

如何让emacs列出像ls这样的建议(沿着列)

如何让emacs按列而不是行列出建议?

简而言之,emacs给了我这个:

In this buffer, type RET to select the completion near point.

Possible completions are:
abc1                  abc2                  abc3
abc4                  abc5                  abc6
abc7                  abc8                  abc9
bc1                   bc2                   bc3
Run Code Online (Sandbox Code Playgroud)

但我希望这样,所以我可以快速扫描一列:

In this buffer, type RET to select the completion near point.

Possible completions are:
abc1                  abc5                  abc9
abc2                  abc6                  bc1
abc3                  abc7                  bc2
abc4                  abc8                  bc3
Run Code Online (Sandbox Code Playgroud)

sorting emacs ls autosuggest

4
推荐指数
1
解决办法
213
查看次数

是否有类型推断的F#强制转换函数,如Seq.cast?

所以我有一些具有难以记忆,冗长,笨拙的名字的COM类型,所以如果我可以避免它,我宁愿不必在从对象转换时输入它们.随着Seq.cast它将推断所需的类型和铸造必要的.

以下是使用int的简化版本:

> let o = 1 :> obj;;
val o : obj = 1

> let inc x = x+1;;
val inc : int -> int

> inc o;;

  inc o;;
  ----^

stdin(15,5): error FS0001: This expression was expected to have type
    int    
but here has type
    obj    
Run Code Online (Sandbox Code Playgroud)

好的,有道理.所以我们施展它:

> inc (o :?> int);;
val it : int = 2
Run Code Online (Sandbox Code Playgroud)

但是,如果我使用Seq.cast投射它,我不需要显式写入类型:

> inc ([o] |> Seq.cast |> Seq.head);;
val it : int = 2
Run Code Online (Sandbox Code Playgroud)

有没有像cast下面这样的功能? …

f# casting type-inference

2
推荐指数
1
解决办法
461
查看次数

合并两个(或更多)FileInfo列表......

我有类似的东西:

var d1 = new DirectoryInfo(Path.Combine(source, @"bills_save." + dt));
var d2 = new DirectoryInfo(Path.Combine(source, @"reports_save." + dt));

var f1 = d1.GetFiles();
var f2 = d2.GetFiles();
Run Code Online (Sandbox Code Playgroud)

我想将所有文件名合并到一个FileInfo列表中.会使我的解析更容易.Concat,AddRange,加入......似乎没什么用.我看到的大多数是添加2个列表,数组.

c# directoryinfo fileinfo

1
推荐指数
1
解决办法
5102
查看次数