在 perl 调试器中从 .perldb rc afterinit 启用 vi 命令行编辑
enable vi command line editing from .perldb rc afterinit in perl debugger
每当我从带有 -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
假设您使用 gnu readline 库,这是一个可能的解决方法:
在当前目录中创建名为 perldb_inputrc
的文件,内容为:
set editing-mode vi
然后将 afterinit()
sub 更改为:
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
初始化文件中):
sub afterinit { push @DB::typeahead, "o inhibit_exit" }
然后 运行 Perl 脚本如下:
INPUTRC=./perldb_inputrc perl -d myscript.pl
每当我从带有 -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
假设您使用 gnu readline 库,这是一个可能的解决方法:
在当前目录中创建名为 perldb_inputrc
的文件,内容为:
set editing-mode vi
然后将 afterinit()
sub 更改为:
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
初始化文件中):
sub afterinit { push @DB::typeahead, "o inhibit_exit" }
然后 运行 Perl 脚本如下:
INPUTRC=./perldb_inputrc perl -d myscript.pl