在perl调试器中的初始化后从.perldb rc启用vi命令行编辑

hwamh0ep  于 2022-11-15  发布在  Perl
关注(0)|答案(1)|浏览(87)

每当我从一个带有-d选项的脚本启动perl调试器时,会话都会以emacs命令行编辑开始。然后我键入ESC ctrl J来启用vi编辑。我想从一开始就启用vi。
我尝试使用以下.perldb:

&parse_options("HistFile=.perlDebugHist");
 sub afterinit { push @DB::typeahead, ("o inhibit_exit", chr(27).chr(10)) }

但当会议开始时它说

auto(-2)  DB<62> o inhibit_exit
        inhibit_exit = '1'
auto(-1)  DB<63> 

Unrecognized character \x1B; marked by <-- HERE after :db_stop;
<-- HERE near column 96 at (eval 9)[/usr/share/perl/5.22/perl5db.pl:737] line 2.
 at (eval 9)[/usr/share/perl/5.22/perl5db.pl:737] line 2.
    eval 'no strict; ($@, $!, $^E, $,, $/, $\\, $^W) = @DB::saved;package main; $^D = $^D | $DB::db_stop;
;
' called at /usr/share/perl/5.22/perl5db.pl line 737
    DB::eval called at /usr/share/perl/5.22/perl5db.pl line 3110
    DB::DB called at ~/bin/debug.pl line 61
9gm1akwq

9gm1akwq1#

下面是一个可能的解决方法,假定您使用的是gnu readline库:
在当前目录中创建一个名为perldb_inputrc的文件,其内容为:

set editing-mode vi

然后将afterinit()子对象更改为:

sub afterinit {
  if (!$DB::term) {
    DB::setterm();
  }
  $DB::term->read_init_file('perldb_inputrc');
  push @DB::typeahead, "o inhibit_exit";
}

如需详细信息,请参阅perldoc perl5db

更新

更简单的方法是readline init file。您可以使用全局文件~/.inputrc,也可以仅通过设置环境变量INPUTRC为当前调试会话使用本地文件。例如,以上面的perldb_inputrc文件为例,您可以使用(在.perldb init文件中):

sub afterinit { push @DB::typeahead, "o inhibit_exit" }

然后运行Perl脚本,如下所示:

INPUTRC=./perldb_inputrc perl -d myscript.pl

相关问题