我有以下缓冲区:
class Greeting
def english_greeting
words.each do
# do some stuff
end
return 'hello'
end
def spanish_greeting
# do some stuff
return 'hola'
end
end
我想要一种删除除english_greeting函数及其内容之外的所有内容的方法。我确实知道我可以使用matchit.vim
并跳转到def spanish_greeting
拉动该函数,然后删除所有内容然后打印出拉出的缓冲区。但我想知道是否还有其他方法可以解决这个问题?
答案 0 :(得分:2)
您可以收集想要的行,而不是删除不需要的行:
:g/^def english_/,/^end/y A
所有english
相关函数都会进入注册"a
,您可以使用" ap 将其删除。
答案 1 :(得分:0)
一个 - 不那么优雅 - 可以做到这一点。
ggd/def english_greeting<Enter>
这将删除english_greeting
功能之前的所有内容。
现在,要删除所有的剩余功能(在english_greeting
功能之后),
/def<Enter>dG
答案 2 :(得分:0)
这应该可以解决问题
var envConnectionString = Environment.GetEnvironmentVariable(...);
if (string.IsNullOrEmpty(envConnectionString))
{
// log error, throw exception, etc
}
else
{
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(envConnectionString)));
}
它假定:0;/^def english_greeting$/-1 d | /^end$/+1,$ d
和def
前面没有任何空格。
这样做的原因是,如果您在end
中有do
,end
块或if
语句,则会从english_greeting
中删除,并删除太多了。
这样,如果使用代码缩进,则最终应该使用整个方法。
如果您不希望该命令在执行前要求确认,只需添加end
,即silent
。
另一种选择是安装vim-ruby插件。
它为ruby方法添加了一个文本对象,因此您可以轻松地将整个方法移动到命名缓冲区。例如,要使用缓冲区:silent 0;...
,您可以将光标放在方法中的任意位置并键入a
。然后,您只需删除文件中的所有文字,例如"ayam
,然后将方法粘贴回ggdG
。
答案 3 :(得分:0)
您可以使用此替换命令:
:%s/\_.*\(def english_greeting\_.*\)def\_.*/\1/