为vim创建自定义命令

时间:2016-01-02 05:58:12

标签: regex vim

我想为vim创建两个命令:

1 -

示例代码:

var a = "My string to be replaced";

假设光标位于"内的任何字母顶部。我会使用命令ds"它会相当于

T" dt" i

所以它会删除字符串中的所有内容并自动进入插入模式。如果它是一个函数,它将使用用于调用其中的命令的字符,因此dt"将删除内部的所有内容。并且dt'会删除内部的所有内容。

2 -

示例代码:

class SomeClassNameHere {

所以现在想象光标位于' Name'之上。我想使用一个命令将光标放在当前位置左边的第一个大写字符上,然后删除所有内容直到右边的第一个大写字符(不包括字符本身)并进入插入模式。此命令与第一个命令类似,但它会查找一个大写字母,这可能意味着命令需要使用某些正则表达式,如[A-Z]。在命令之后,代码看起来像:

class SomeClassHere {

我希望这些是我可以添加到.vimrc文件中的某种地图。

2 个答案:

答案 0 :(得分:2)

第一个操作已作为文本对象存在,它是public List<string> ImagesString { get { return Directory.EnumerateFiles(Server.MapPath("~/Content/Prop/" + FlatID + "/")) .Select(fn => "~/Content/Prop/" + FlatID + "/" + Path.GetFileName(fn)) .ToList(); } } ,您应该像i"一样使用它:

[operator][text-object]

还有ci" i'i(等。请参阅i{

第二个操作可以这样描述:

:help text-objects

并像这样映射:

?[A-Z]<CR>
c/[A-Z]<CR>

在适当的文本对象中转换它会更好:

nnoremap <key> ?[A-Z]<CR>c/[A-Z]<CR>

您可以这样使用:

xnoremap iu ?[A-Z]<CR>o/[A-Z]<CR>h
onoremap iu :normal viu<CR>

答案 1 :(得分:0)

这是romainl答案的改进版本:

xnoremap iu ?\u<cr>o/.\ze\([^a-z_]\<bar>$\)<cr>:<c-u>noh<cr>gv
onoremap iu :normal viu<cr>

它增加了选择或删除最后一个大写单词的功能,这是不可能的,并在完成时隐藏了突出显示。

相关问题