热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

基于gnureadline的节点shell

如何解决《基于gnureadline的节点shell》经验,为你挑选了1个好方法。

节点的shell是否在内部使用gnu readline?

如您所知,节点shell有两种方式(其中包括):它没有搜索历史记录.这可以通过使用像https://github.com/danielgtaylor/nesh 这样的东西来解决它太糟糕了.使用gnu readline的shell(比如psql,ipython,python,bash等)有很多开箱即用的功能,并且共享你在〜/ .inputrc中设置的配置.例如,我在上面列出的所有shell中都有很好的vim-mode,因为它们都在内部使用gnu readline.如果有一个js的shell也在内部使用gnu readline,那么它将与我的其他shell一致.



1> Hans Lub..:

那个人是对的:rlwrap会工作的.不幸的是,它抛弃了 node自己的完成.如何避免这是一个 FAQ,所以这里遵循一种方法来恢复完成:不是通过提供一个TAB包装的命令,然后以某种方式解析产生的混乱,但使用过滤器.

过滤器是充当rlwrap插件的小脚本 .可以重写用户输入,命令输出,提示,历史和完成单词列表.它们可以写入perlpython组合在一个管道中.

过滤器可以再做一个技巧:与用户背后的包装命令进行交互(cloak_and_dagger()方法)

因此,如果我们教node一个rlwrap_complete(prefix)打印完成列表的新命令,prefix我们可以使用它 cloak_and_dagger("rlwrap_complete($prefix)")来获取所有可能的完成,并将它们用于rlwrap自己的完成.

这是为nodein perl,for编写的过滤器,但是python不同命令的版本看起来非常相似:

#!/usr/bin/env perl

use lib ($ENV{RLWRAP_FILTERDIR} or ".");
use RlwrapFilter;
use strict;

my $filter = new RlwrapFilter;

$filter -> completion_handler( sub {
  my($line, $prefix, @completions) = @_;
  my $command = "rlwrap_complete('$prefix')";
  my $completion_list = $filter -> cloak_and_dagger($command, "> ", 0.1); # read until we see a new prompt "> "
  my @new_completiOns=  grep /^$prefix/, split /\r\n/, $completion_list; # split on CRNL and weed out rubbish
  return (@completions, @new_completions);                                                  
 });

$filter -> run;

现在我们要教node这个命令rlwrap_complete().因为node 不使用init文件,就像.noderc我们必须创建一个REPL实例并扩展它:

#!/usr/bin/env node

// terminal:false disables readline (just like env NODE_NO_READLINE=1): 
var myrepl = require("repl").start({terminal:false}); 

// add REPL command rlwrap_complete(prefix) that prints a simple list of completions of prefix
myrepl.context['rlwrap_complete'] =  function(prefix) {
  myrepl.complete(prefix, function(err,data) { for (x of data[0]) {console.log(x)}});
}    

移动过滤器代码$RLWRAP_FILTERDIR/node_complete,将上面的代码保存为myrepl.js可执行文件.然后打电话:

$ rlwrap -z node_complete ./myrepl.js

...并享受可搜索历史 TAB完成的REPL !任何时候你按下TAB rlwrap将有一个(看不见的)聊天,node以提出正确的完成.

如果需要,可以添加其他rlwrap好东西(彩色提示,vi模式,附加过滤器).

当然,在我们使用相同的解决方案之前,任何REPL都需要能够进行一些元编程来访问自己的命名空间作为数据. node


推荐阅读
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • PDO MySQL
    PDOMySQL如果文章有成千上万篇,该怎样保存?数据保存有多种方式,比如单机文件、单机数据库(SQLite)、网络数据库(MySQL、MariaDB)等等。根据项目来选择,做We ... [详细]
  • 本文介绍了Python函数的定义与调用的方法,以及函数的作用,包括增强代码的可读性和重用性。文章详细解释了函数的定义与调用的语法和规则,以及函数的参数和返回值的用法。同时,还介绍了函数返回值的多种情况和多个值的返回方式。通过学习本文,读者可以更好地理解和使用Python函数,提高代码的可读性和重用性。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • HDFS2.x新特性
    一、集群间数据拷贝scp实现两个远程主机之间的文件复制scp-rhello.txtroothadoop103:useratguiguhello.txt推pushscp-rr ... [详细]
  • 也就是|小窗_卷积的特征提取与参数计算
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了卷积的特征提取与参数计算相关的知识,希望对你有一定的参考价值。Dense和Conv2D根本区别在于,Den ... [详细]
  • 前景:当UI一个查询条件为多项选择,或录入多个条件的时候,比如查询所有名称里面包含以下动态条件,需要模糊查询里面每一项时比如是这样一个数组条件:newstring[]{兴业银行, ... [详细]
  • Oracle seg,V$TEMPSEG_USAGE与Oracle排序的关系及使用方法
    本文介绍了Oracle seg,V$TEMPSEG_USAGE与Oracle排序之间的关系,V$TEMPSEG_USAGE是V_$SORT_USAGE的同义词,通过查询dba_objects和dba_synonyms视图可以了解到它们的详细信息。同时,还探讨了V$TEMPSEG_USAGE的使用方法。 ... [详细]
  • python3 logging
    python3logginghttps:docs.python.org3.5librarylogging.html,先3.5是因为我当前的python版本是3.5之所 ... [详细]
  • UMTS基础知识汇总
    协议框架23G接口UMTS实体EntityNameDescriptionAuCAuthenticationCenterCBCCellBroadcastCenterC-RNCCon ... [详细]
  • 用聪明的方式学习 Vim
    来自量子位Vim难学难用?但事实是,它依旧受许多程序员的欢迎。或许,只是你的「打开方式」不对。最近,在GitHub上便出现了 ... [详细]
  • 开发笔记:讲给前端的网络安全: 网络模型与攻击手段
    本文由编程笔记#小编为大家整理,主要介绍了讲给前端的网络安全:网络模型与攻击手段相关的知识,希望对你有一定的参考价值。 ... [详细]
  • Unity 3D 4.5.1和4.5.2 for Mac的安装与破解方法
    这里有两个版本的unity3dformac可以下载并破解。首先去官网下载unity3dformac4.5.1f3或者4.5.2f1。附上官 ... [详细]
author-avatar
lanshan1126141
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有