小编act*_*ctf的帖子

Vim findfile函数用法?

我正在寻找一个示例,说明如何在vim脚本中使用findfile函数以递归方式向上搜索文件,特别是使用通配符.

每当我将通配符包含为第一个函数参数的一部分时,这似乎不起作用.

例如,使用以下目录结构:

~/MyProject/
    Test.sln
    src/
      Test.cs
Run Code Online (Sandbox Code Playgroud)

如果我运行以下函数,在编辑文件Test.cs时将pwd设置为〜/ MyProject/src

function! Test()
   let a = findfile("*.sln", ".;")
   echo a
endfunction
Run Code Online (Sandbox Code Playgroud)

findfile似乎什么也没有返回.但是,如果我修改函数以删除widcard,如下所示:

function! Test()
   let a = findfile("Test.sln", ".;")
   echo a
endfunction
Run Code Online (Sandbox Code Playgroud)

它做了我所期望的.

我已经在ubuntu和windows上测试了这个,我看到两者都有相同的行为.我在这里做错了什么,或者findfile只是不支持通配符?缺乏对通配符的支持似乎是一个相当奇怪的遗漏.看来我必须在这里做错事.

vim

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

system()在vim中使用powershell

我正在尝试在Vim中编写一个简单的函数来返回powershell命令的结果.不过,我在结果中不断受到喋喋不休.

我认为这可能是一个编码问题,但你会发现问题很奇怪,因为它"有点工作".但是我没有解决问题的方法.

使用vim中设置的以下非默认shell选项:

set shell=powershell
set shellcmdflag=-c
Run Code Online (Sandbox Code Playgroud)

鉴于以下功能:

function! Test()
   let result = system("ls")
   call setline(1, result)
endfunction
Run Code Online (Sandbox Code Playgroud)

当我运行时(来自C:\ Windows):

:call Test()
Run Code Online (Sandbox Code Playgroud)

以下内容写入我的缓冲区:

^@^@    Directory: C:\Windows^@^@^@    Mode            LastWriteTime   Length Name ^@-------
 ....continues
Run Code Online (Sandbox Code Playgroud)

但是当我运行以下命令时:

:r!ls
Run Code Online (Sandbox Code Playgroud)

我得到了我期望的结果(即ls的powershell结果)更有趣的是当我运行命令时:

:echo system("ls")
Run Code Online (Sandbox Code Playgroud)

结果看起来很正确

我尝试修改我原来的功能如下:

function! Test()
   let result = system("ls")
   echo result
   call setline(1, result)
endfunction
Run Code Online (Sandbox Code Playgroud)

回声的价值正是我所期待的 - 但我仍然看到了胡言乱语

我也尝试过以下修改我的功能:

function! Test()
   let result = system("ls")
   let conv = iconv(result, "utf-8", &enc)
   call setline(1, conv)
endfunction
Run Code Online (Sandbox Code Playgroud)

但结果完全相同(即它们包括^ @ ^ @符号和其他乱码)

我猜测正在发生的是使用>生成utf-16输出重定向的powershell cmds,而vim无法处理这个问题.我从powershell得到以下内容(本例中的文件是gnu32程序):

PS> ls > …
Run Code Online (Sandbox Code Playgroud)

vim powershell

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

实体框架中使用存储过程的乐观并发

在实体框架中,使用存储过程,我想使用乐观并发在我的表上执行更新.在没有修改现有更新存储过程的情况下,我一直无法使用它.我正在尝试确定是否有一种方法可以映射现有的存储过程,以便在没有更新行时发生并发异常.

一些背景资料:

  • 我已经在我的.edmx文件中映射了更新存储过程(包括时间戳)列
  • 我现有的存储过程如下所示(显然省略了实际的表名和列):

    UPDATE Table SET Column = @Column1, Column2 = @Column2 ....
    WHERE PK = @PK AND Timestamp = @Timestamp
    
    SELECT PK, Column1, Column2, ....., Timestamp
    FROM Table WHERE PK = @PK
    
    Run Code Online (Sandbox Code Playgroud)
  • 在该更新失败(由于时间戳不匹配)的情况下的存储过程的选定部分仍然返回一行.

当我将存储过程修改为以下内容时:

   UPDATE Table SET Column = @Column1, Column2 = @Column2 ....
   WHERE PK = @PK AND Timestamp = @Timestamp

   IF @@ROWCOUNT > 0
       SELECT PK, Column1, Column2, ....., Timestamp
       FROM Table WHERE PK = @PK
Run Code Online (Sandbox Code Playgroud)

然后一切都按预期工作,并发生并发错误.

或者,如果我使存储过程返回一个输出参数,并将该输出参数映射到Entity Framework的.edmx文件中的"Rows Affected Parameter",那么并发错误也会按预期工作.

这个解决方案(即使用输出参数)最好解释,我发现,这里:http: …

c# entity-framework

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

标签 统计

vim ×2

c# ×1

entity-framework ×1

powershell ×1