在Vim中,有没有办法重复最后一个命令,无论是否是编辑,并且没有先见之明来首先录制宏?
比如说我输入:bn,并想再次这样做(这是错误的文件).按压.显然不会这样做.或者也许我正在做gE并且想要重复一遍(通过一次击键,因为显然gE有点痛苦).
也许有一些插件?与此问题类似.
(甚至更酷的是将一些命令追溯绑定到一个宏,所以可以输入5qa@a或者重复最后5个命令......)
如何在运行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) 有没有办法让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) 是否有针对.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项目, …
在Vim中,有没有办法在搜索时为所有匹配启用动态突出显示?
如果我启用incsearch并输入"/ something",它将仅突出显示第一个匹配项.如果我启用hlsearch并输入"/ something",则在按Enter键之前没有任何反应(它只突出显示上一次搜索).
在emacs中,第一个匹配将被突出显示,并且(在稍微延迟之后)屏幕上的所有其他匹配以不同颜色突出显示,在扫描一段代码中的匹配时提供几乎即时的反馈.
我正在使用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) 如何set1 = set2F#的不可变集和地图的工作?他们会做出适当的集合/地图平等吗?
文件说:
基于二叉树的不可变集合,其中比较是F#结构比较函数,可能使用关键值的IComparable接口的实现.
它们基于二叉树,因此可能不会根据订单元素插入确切的形式?如此天真地使用F#结构比较功能是行不通的......
我在文档中找不到任何相关内容.我错过了吗?
我正在阅读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#中,任何嵌套的异步调用都会自动检查取消令牌!
在这种情况下,它是线:
Run Code Online (Sandbox Code Playgroud)do! Async.Sleep(10)从输出中可以看出,此行是取消发生的位置.
但是,对我来说(VS2010,F#2.0,F#Interactive)我得到以下输出.请注意..after …
在为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) 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) 如何让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) 所以我有一些具有难以记忆,冗长,笨拙的名字的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下面这样的功能? …
我有类似的东西:
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个列表,数组.