概述
Pentadactyl 是由 Vimperator 项目最活跃的开发者 Kris Maglione、Doug Kearns、Martin Stubenschrott维护的针对 Firefox4的一个分支。及由pentadactyl插件,firefox可以采用vim的操作方式进行网页浏览。
由于dactyl不符合火狐的插件规范,所以官方插件中心收录的dactyl版本很低,已经不支持新版本,要从项目网站上下载最新版。
使用
Hint模式
在我看来,dactyl最大的作用就是减少鼠标操作,利用键盘与浏览器进行交互。那么该如何与网页上的可点击元素交互呢?pentadactyl里采用的方案是hints f
or F
。进入hints模式后,网页上的可点击元素都会被高亮,并用数字或者字母编号。这时候输入对应编号的字符就可以过滤高亮的元素,当能够唯一定位一个元素时,即执行点击动作。
通过配置项hintkeys可以修改编号时使用的字符,我个人习惯用字母编号(尽管这样就不方便使用Follow Hint了)
set hintkeys='asdfjklgheriop'
扩展Hint模式
上面两个模式会高亮页面上所有的可点击元素,而且定位元素后直接触发点击动作。使用扩展hint模式,可以更灵活地控制高亮元素的范围,比如只高亮超链、只高亮图片等;可以控制定位元素后的触发动作,比如复制链接地址、另存图片等。具体请查看帮助 :h ;
状态栏
状态栏会显示如下信息:
url [+-??] [n/m]100% plugins
- url 为当前页面的url地址
-
- 此页面包含后退历史
-
- 此页面包含前进历史
- ? 代表此页面已存为书签
- 其他字符代表QuickMark
- n/m 当前标签索引/总标签数
- 100% 当前位置在页面纵向上的百分比
编译
#解压缩
unzip dactyl-master.zip
#编译pentadactyl
make -C pentadactyl xpi
#downloads/dactyl-xxx.xpi为编译完的文件
安装
- 打开插件管理界面
- 点击上方的工具按钮,选择从文件安装插件并安装dactyl
配置
dactyl也存在类似vim的配置方式,在~/.pentadactylrc文件中进行配置.而~/.pentadactyl/目录可以存放各种脚本
UI选项(guioptions)
通过该配置项可以控制firefox的GUI显示,可以简写成go,其取值是一个字符列表,每个字符对应一个可控GUI元素,包含在go中的会显示出来。通过命令操作:
set go+=x "让x对应的GUI元素显示出来
set go-=x "让x对应的GUI元素不显示
set go=abc "只显示a,b,c对应的GUI元素
参见.pentadactylrc
文件
firefox行为配置
及由dactyl的 set语法,可以对firefox about:config里的设置进行修改
例如:
set! xxx=hello
前边的探号是为了强行覆盖设置,这样的效果在变量已经被定义的时候不会弹出警告信息
同时由于本身配置文件是遵循vim语法的,所以可以辅助vim script语法,做一些逻辑判断
if config.OS.isWindows
set! font.name.monospace.x-western="Monaco"
end
默认搜索引擎设置
另外发现dactyl可以修改自身插件的默认搜索引擎设置
set defsearch=google
set suggestengines=google
有意思的是,在dactyl命令行调用默认搜索引擎或者s
调用的时候,会自动补全google关键字的提示.
由于国内某些不可抗拒的原因,无法使用google进行搜索,可以使用百度作为默认搜索引擎,同样可以达到智能补全的效果
dialog searchengines
打开搜索引擎设置窗口,点击"更多搜索引擎"按钮- 访问firefox的搜索引擎添加页面,找到需要的搜索引擎添加就可以了
- 为搜索引擎定义一个关键字
例如:
baidu -> bd
google -> gg
方便后边调用其他搜索引擎 - 修改配置文件
set defsearch=bd
set suggestenginges=bd
这里可以用别名,也可以用搜索引擎列表上面的默认名称.不过取个别名,可以在dactyl里直接快速打开,例如现在默认引擎是baidu,但是想用google搜个内容
o gg xxxx
- o 激活命令行并输入:open命令
- gg google 搜索引擎
后边输入内容还会自动调用google suggest
插件
插件存放
插件应该存放在名为plugins的文件夹下
pentadactyl会从配置项runtimepath定义的文件夹中查找plugins子文件夹
可以有多个plugins文件夹
runtimepath默认值是 $PENTADACTYL_RUNTIME
,如果没设置,windows系统下则是~/pentadactyl
,其他系统下是~/.pentadactyl
,所以在windows下,默认情况插件应该放在~/pentadactyl/plugins
文件夹里
我准备把plugins放到profile文件夹下,因此需要将profile加到runtimepath中,由于已在启动参数设置$HOME为profile,所以
set runtimepath+=$HOME
插件加载
根据上述查找方式找到的所有plugins文件夹里的脚本文件会被加载
脚本文件通过配置项loadplugins来控制识别,默认是以.js和.penta结尾的文件
设置配置项noloadplugins可以关闭所有脚本的加载,但是最新每夜版(hg6126)无此参数,不过可以通过设置loadplugins达到同样的目的
set loadplugins=‘’
设置如下启动参数(++noplugin或者+u=NONE),同样可以关闭脚本加载。具体请查看帮助
:h startup-options
插件下载
dactyl项目网站有收集一些插件,可以 :h
,底部有项目网站链接
dict.js 翻译插件
https://github.com/grassofhust/dict.js
夜间模式
https://code.google.com/p/dactyl/issues/detail?id=1013
配色方案
pentadactyl项目网站上有几个配色方案,其中感觉vimium,kolor,ubuntu三个配色方案不错。
- vimium 只是让基本配色更“圆润”,另外修改了hint标记样式。
- kolor 典型的深色主题
- ubuntu 仿照ubuntu的配色,大字体效果
三个配色或多或少都存在一些瑕疵,网站安全配色都忽略了一部分。
常用命令
命令 | 描述 |
---|---|
:mkp | 生成配置文件 |
:mkp! | 强制保存更改的配置文件 此操作会覆盖现有文件 |
:rehash | 重载插件 好像有bug 补全菜单失效 |
:restart | 重启firefox |
:downloads | 显示下载列表 |
:bmarks | 书签列表 |
:!command | 执行命令 |
:source path | 加载配置 |
:colorscheme name | 更换配色方案 |
:scrptnames | 查看当前生效的配置文件路径 |
:w | 下载文件 |
:tabo(nly) | 只保留当前标签,关闭其他所有标签 |
:undoa(ll) | 恢复closed标签列表中的所有标签 |
:pin | 隐藏当前标签title只保留logo |
:unpin | 恢复当前标签title |
:tabm(ove)[[!]+/-] count | 移动标签顺序 tabm! 移动到边界时会循环(只在+/-方式中有效) |
u | 重新打开上一个关闭的标签 |
a | 添加到书签 |
d | 关闭当前标签,选中右侧标签 (:tabc) [count]d 连续关闭count个 |
:tabc keywords 关闭匹配keywords的主机名 :tabc! keywords 同时匹配url和title | |
D | 关闭当前标签,选中左侧标签 |
T | 复制当前标签 (:tabdu) |
t | 新标签打开 |
o | 在当前标签打开 |
w | 在新窗口打开 |
t,o,w 支持打开单个URL,多个URLs(URL之间的分隔符可以通过配置项urlseparator设置), | |
书签(关键字),指定搜索引擎搜索,用默认搜索引擎搜索(默认引擎通过配置项defsearch设置) | |
另外打开命令还提供了非常强大的completion(细节请查阅配置项complete和autocomplete) | |
s | 用默认搜索引擎搜索 |
i | 光标定位模式 |
iv | 选择模式 |
zo | 缩小 |
zm | 放大 |
zz | 恢复默认缩小 |
gu | 回上级url目录 |
gh | 回firefox首页 about:home |
Ctrl+n(ext) | 下一个标签 |
Ctrl+p(revious) | 上一个标签 |
gt | 下一个标签 |
gT | 上一个标签 |
g0 | 第一个标签 |
g^ | 第一个标签 |
g$ | 最后一个标签 |
Ctrl+^ | 切换到上次选的标签,连续使用可以实现在两个标签间切换 |
[count]b | 切换到第[count]个标签 |
p | 在当前标签打开剪贴板的内容 如果是url则打开url,如果不是url则调用默认搜索引擎搜索 |
P | 在新标签打开剪贴板的内容 |
ctrl+b | 向上滚一屏 |
ctrl+f | 向下滚一屏 |
ctrl+u | 向上滚半屏 |
ctrl+d | 向下滚半屏 |
j k h l | 页面移动 |
gg | 顶部 |
G | 底部 |
count% | 按百分比移动 |
^ | 屏幕左移到头 0 功能相同 |
$ | 屏幕右移到头 |
/ | 正向搜索 |
? | 反向搜索 |
n | 下一个匹配项 |
N | 上一个匹配项 |
* | 向下查找当前光标处单词 |
# | 向上查找当前光标处单词 |
查看当前标签基本信息 | |
g |
查看当前标签详细信息 |
gf | 查看页面源码 |
gF | 用外部编辑器查看页面源码 |
y | 复制当前焦点hint的链接 |
B | 缓冲区列表 (:buffers) |
app tab和一般的tab会分开显示。 | |
带%标记的对应当前tab | |
带#标记的对应上一次选择的tab,可以通过<C-^>跳转过去 | |
buffer/buffers keywords 匹配keywords 包括url和title | |
b | 显示缓冲区列表,可以利用tab切换 |
f | hint模式 |
F | hint模式 在新标签打开 |
; | 扩展hint模式 :h ; |
;i | 查看图片 |
;y | 复制链接地址 |
;Y | 复制链接文字 |
;; | 定位焦点到hint |
firefox gui命令 | |
:emenu name | 打开指定菜单项 |
:dialog name | 打开对话框 |
:toolbarshow name | 显示name工具栏 |
:toolbarhide name | 隐藏name工具栏 |
:toolbartoggle name | 切换隐藏/显示name工具栏 |
相关链接
总结
pentadactyl作为众多类vim操作插件,其功能强大真是无与伦比.其中,翻页/搜索/插件更是把pentadactyl的功能推向极至.
然而pentadactyl由于内部实现紧紧依赖firefox的XUL插件API,每当firefox升级,必然造成pentadactyl兼容性出现问题,pentadactyl的开发热度又相当底下,所以导致插件的正确使用时长遇到问题.
在最近的firefox更新到57的时候,mozilla彻底抛弃了XUL插件API,拥抱WebExtension,这种插件模式是google在chrome使用的,对多进程和插件安全性有更好的优化,然而就我知道的问题,就是插件只能在页面加载完成后才能使用,通俗的说,如果刚打开浏览器,不能使用vim操作浏览器.再加上本身就几近中止的开发进度,遇到需要用WebExtension重写整个插件.后果已经显而易见了.
对我来说,pentadactyl和一些其他插件是我坚持使用firefox的主要原因.面对mozilla的决策我很无奈,正如以前在知乎上看到的说法:“我用firefox从来不是因为他的性能比别人快”,firefox的插件绝对是众多浏览器中最优秀的.然后现在mozilla放弃了他最后坚持的阵地.现在浏览器市场chrome一家独大,firefox的前途,真的很不明朗.
2018-05-13
上面这段总结是我在整理pentadactyl笔记的时候追加的,现在已经改用chrome有一年左右了,类vim操作插件是cvim,算是接触过的类vim操作插件中,比较接近pentadactyl的.
但是WebExtension的限制已经无法避免了,今天在github上搜索dactyl的时候,发现pentadactyl项目已经一年有余没有更新了…不过意外的发现了一个叫tridactyl的项目,其描述信息是"Implementing Vimperator/Pentadactyl as a WebExtension.",看了下readme文件,虽然同样存在webextension的众多不足,但是心里感觉就像pentadactyl以另外一种方式活了过来一样,感到很欣慰.现在已经回不去firefox了,很多插件的重写,不知道还会带来什么变故.只是写下这些,祭奠曾经陪我度过N个日夜的dactyl.