我喜欢使用vim和vimdiff.我目前正在比较vimdiff中的两个文件,我经常遇到我想在两个缓冲区中删除相同行的情况.在以下示例中,我想删除第40和41行.
39 text_a | 39 text_b
40 text_aa | 40 text_aa
41 text_bb | 41 text_bb
42 text_c | 42 text_d
Run Code Online (Sandbox Code Playgroud)
执行dd Ctrl-W-W,dd Ctrl-W-W删除当前窗口中的行,跳转到另一个窗口,删除那里的行并跳回我的原始窗口感觉很繁琐.
有谁知道这个的捷径?
我是Perl-OO初学者,我遇到了设计挑战.我希望你能给我一些提示,以获得一个优雅的解决方案.我在这里使用鼠标对象系统.
举个简单的例子,假设我有一个User-Object.用户有一个名字.
package User;
use Mouse;
has "name" => (
is => "rw",
isa => "Str|Undef",
);
Run Code Online (Sandbox Code Playgroud)
然后我有一个User-Cache-Object,它获取所有用户的列表(来自LDAP服务器).您可以说这是用户缓存和用户之间的"有一个"关系.
package UserCache;
use Mouse;
has "users" => (
is => 'rw',
isa => 'ArrayRef|Undef',
default => sub { [] },
);
Run Code Online (Sandbox Code Playgroud)
我将此用户列表存储为用户缓存的访问者中的用户对象数组.
my $cache = UserCache->new();
foreach my $entry ( $ldap->searchGetEntries() ) {
my $user = User->new();
$user->name($entry->get_value('userdn'));
push @{ $cache->users }, $user;
}
Run Code Online (Sandbox Code Playgroud)
现在这就是我的问题所在.如果我想找到具有特定属性的用户对象(例如,名为John的用户),我必须遍历整个用户对象数组并查询每个对象的名称.当给出名称列表时,这会得到一个非常低效的过程.
foreach my $user ( @{ $cache->users } ) {
if ( $user->name eq 'John' ) {
#do …Run Code Online (Sandbox Code Playgroud)