【问题标题】:Create custom commands for vim为 vim 创建自定义命令
【发布时间】:2016-01-02 19:48:28
【问题描述】:

我想为 vim 创建两个命令:

1 -

示例代码:

var a = "My string to be replaced";

所以想象一下,光标位于“。我会使用命令 ds”中的任何字母之上,它的作用相当于

T" dt" i

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

2 -

示例代码:

class SomeClassNameHere {

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

class SomeClassHere {

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

【问题讨论】:

  • 仅供参考,您目前可以使用di'di" 分别删除单引号和双引号内的所有内容。但它不会自动进入插入模式。
  • 好像ds" 你实际上是指ci"

标签: regex vim


【解决方案1】:

第一个操作已经作为文本对象存在,它是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>

你可以这样使用:

ciu
diu
yiu
viu

【讨论】:

    【解决方案2】:

    这是 romainl 答案的改进版本:

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

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

    【讨论】:

      猜你喜欢
      • 2011-10-22
      • 2015-12-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-16
      • 2020-12-31
      • 2013-02-24
      • 2018-06-11
      相关资源
      最近更新 更多