我想为vim创建两个命令:
1 -
示例代码:
var a = "My string to be replaced";
假设光标位于"内的任何字母顶部。我会使用命令ds"它会相当于
T"
dt"
i
所以它会删除字符串中的所有内容并自动进入插入模式。如果它是一个函数,它将使用用于调用其中的命令的字符,因此dt"
将删除内部的所有内容。并且dt'
会删除内部的所有内容。
2 -
示例代码:
class SomeClassNameHere {
所以现在想象光标位于' Name'之上。我想使用一个命令将光标放在当前位置左边的第一个大写字符上,然后删除所有内容直到右边的第一个大写字符(不包括字符本身)并进入插入模式。此命令与第一个命令类似,但它会查找一个大写字母,这可能意味着命令需要使用某些正则表达式,如[A-Z]。在命令之后,代码看起来像:
class SomeClassHere {
我希望这些是我可以添加到.vimrc文件中的某种地图。
答案 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>
它增加了选择或删除最后一个大写单词的功能,这是不可能的,并在完成时隐藏了突出显示。