zoukankan      html  css  js  c++  java
  • Vimperator

    应该说,Vimperator是一个刚出道而且想法不错的Firefox插件。它把vim的很多操作移植到了Firefox上,对于我这个接触vim不久的人来说很有新鲜感。

    简单来说,它使得Firefox成为一个有不同“模式”的浏览器,用户可以更容易地获取对浏览器的全盘控制,更快速地利用键盘而不是鼠标做你想做的事,但随之而来的就是不要按错键的问题。

    你有没有想过为什么键盘上有104个键(台式机)或者87个键(笔记本),然而只有在打字的时候才能物尽其用,而控制(比如说)Firefox的时候还得同时按两个键(Ctrl,Alt,Shift...)。更多的击键次数却换不来更高的操作速度,这不是很令人郁闷的吗?

    Vimperator首先就把用户的手重新从鼠标上、水杯旁、下巴上拉回到了键盘打字的准备位置,因为正如vim所做的一样,h-j-k-l的移动 方式才是更直接而迅速的。当你的焦点不是在地址栏、搜索栏、命令栏、输入框等等的地方(换句话说,在普通模式下)时,h用于左移,j用于下移,k用于上 移,l用于右移。老实说,我是通过google reader第一次听说这种控制方式(并且熟练),后来才知道是vi的经典键位的。

    这样子和直接用上下左右四个箭头有区别吗?有的。如果你按 20j,Firefox将下移20个单位。利用数字配合命令来控制命令的重复次数,是vim的一大特色。当然不断按20j来翻页显然并不合 算,PageUp和PageDown好用多了,但是PgUp和PgDn不在手的旁边,怎么办?Vimperator给了我们Ctrl+u和Ctrl+d可 以用,分别用于Up半页和Down半页。可是老实说,这键也好按不到哪里去。没关系,我们可以做键盘映射,把它们映射到J和K(Shift+..)上面。 只需键入

    :map J <C-d> (回车)
    :map K <C-u> (回车)

    这里出现了vim的万能冒号,它的出现代表进入control模式,我们开始给Firefox下命令,而使用Esc键退出control模式。内容很明显,把J/K给map成Ctrl-d/Ctrl-u。我还会map这个:

    :map H gT (回车)
    :map L gt (回车)

    h和l不是左右移动吗?H和L其实也已经有后退和前进的功能了,那这gt和gT……则是转换标签页,对于我来说要比前者常用一些。gt表示下一个标 签页,gT表示上一个标签页。这样利用Shift+h/l,也就自然懒得用鼠标移过去点击了,以前用开的Ctrl+PgUp/PgDn也显得稍稍不顺手 了。但鼠标滚轮和垂直滚动条难道就不能打败h-j-k-l移动吗?网页一长,用J和K也不是办法,用数字配合J/K也往往很难掌握数字的尺度,这时用gg 是最合适的了。普通的gg只是相当于Home,回到页顶;普通的G也只是相当于End,转到页末。一旦配上数字,20gg就表示页面20%的地方,如果你 浏览网页的时候注意到下方的xx%,那么在长文章里到处跳转也只是一眨眼的事,要是遇上一大篇文字,垂直滚动条也还不是要败下阵来?

    这样说来,3gt和3gT也有类似效果啰?注意,3gT确实是往前滚三个标签页,但是3gt表示的却是第三个标签页。当然有时候这也很有用,如果你注意到网页下方的[x/yy]的话,进行标签页跳转也是瞬间的事。再加上g0,跳至第一个标签页;g$,跳至最后一个标签页;Ctrl+6,跳至上一个标签页,用户也就更加得心应手了。

    说了这么多,倒也还没点过链接,难道Vimperator有这么大的败笔?当然不是,只需按f,所有可见的链接都会变成底色黄色,同时出现数字提 示,键入数字就点了链接,但是要把1从10、11、12中区分开,要按1回车。这还是不方便啊,然而你可以按了f之后试着键入你要点的链接的前几个字母, 顿时可以选择的项目少了很多,这功能倒是方便了英文链接而对中文链接无益。要是你发现,哎呀错了,要在新标签页中打开,哎呀怎么后退?除了之前说的H/L 来后退/前进之外,还可以用Ctrl+o来后退,用Ctrl+i来前进,前面配上数字也是可以的哦。而要在新标签页打开,你只需按F(Shift+f)而 不是f,类似。

    希望你还只是一路看下来,没找来装,否则很可能会被Vimperatorized的Firefox的全新面孔吓怕:没有菜单栏、没有地址栏、没有书 签栏,底部多了黑色和白色的两行东西。其实你可以很容易把menubar、navigation bar、bookmark bar找回来,还是万能冒号

    :set go+=mTb (回车)

    这样一来,go(GUIoptions的简写)参数里就多了mTb三项(+=是C的风格哈)。有什么不懂,万能冒号会用 :help 帮你解答,比如 :help d 。d是一个简洁而常用的命令,关闭当前标签页,你不需要用鼠标找那个小红叉了,也不需要用Ctrl+w了。数字配合d也非常贴心,可以关闭从这个标签页往 后算起的若干个标签页。关错了,Vimperator还提供了u一键undo。同样是一键,r键可以refresh,/键可以开始全文搜索。 Vimperator的默认是增量搜索,也就是你键入关键词的同时Firefox已经开始把搜索结果展示给你,回车之后文中符合的字眼都会有黄色底色,只 需一键n即可跳到下一个搜到关键词的地方,N则是上一个。想去除黄色高亮了?只需用万能冒号

    :set nohls (回车)

    nohls代表no highlight search,就这么简单。

    然而怎样打开网页呢?为何还没讲到?那是因为连我都觉得Vimperator的方式糟蹋了Firefox的Awesome Bar。o键可以把你带到命令栏 :open 的后面,键入url地址即可打开该网页;t键可以把你带到命令栏 :tabopen 的后面,键入url地址即可在新标签页内打开该网页。虽然这里默认也有智能匹配功能,比如 :open xiaonei(Tab键)会出现一个网址列表,然后使用Tab和Shift+Tab选择,回车打开,但比起Firefox本身的地址栏还是稍逊一筹。唯 一值得赞赏的是,你可以在此键入关键词,调用搜索引擎(默认google)打开新标签页或本页内搜索。这就省下了Ctrl+t,Ctrl+k,键入关键 词,回车的功夫,也便于看着当前页面的文字来斟酌关键字。更加人性化的是,如果你设好了搜索引擎的关键字(点击搜索引擎栏的标签->管理搜索引擎, 第二栏便是),那么调用各种引擎来搜索也方便多了,比如我会用

    :tabopen wkcn 过冷液体
    :tabopen wken supercooling
    :tabopen wkfr surfusion

    来打开同一个现象的中文、英文、法文维基百科(很遗憾,中文没有这个词条……),反正比起以前Ctrl+t, Ctrl+k, Ctrl+↓(选择搜索引擎)是快多了。

    与此相关的还有另一个更有用(但是平时容易按错键)的p键,作用是把剪贴板中的内容直接当成url地址或者搜索关键字在当前页打开,要想在新标签页 中打开,使用P键即可。对于不习惯vim操作的人来说,这时一个大问题出现了:用惯的Ctrl+c, Ctrl+v和Vimperator冲突,vim的Yank对新手还是很陌生。Vimperator说Ctrl+c是用来停止页面加载的(vim的 ctrl+c也好像是用来中断所有未完成的操作的),说Ctrl+v是用来pass through一个键的(也就是下一个按键将会由Firefox自己处理),类似的还有Ctrl+z是进入pass through模式(Vimperator不再对你的按键其反应,除非用Esc退出此模式)。简单来说,要让Vimperator“放过”Ctrl+C, 给Firefox收到,连续按Ctrl+v, Ctrl+c即可。当然聪明人都不这么干,而是

    :noremap <C-c> <C-v><C-c>

    为什么是noremap而不是map?因为要是Vimperator把后面的Ctrl+c又换成Ctrl+v, Ctrl+c,如此下去岂不永无终止?我已经亲身试过这个导致Firefox崩溃的死循环了……这样还不够

    :cnoremap <C-c> <C-v><C-c>
    :inoremap <C-c> <C-v><C-c>

    这才可以在control模式(键入命令的时候)和insert模式(在文本框里的时候)下恢复Ctrl+c的使用。对于Ctrl+v同理。可这样 子,Esc已经被用来返回普通模式,总得有个键停止页面载入吧?你自己找个键来map就行了。再仔细一想,难道用Vimperator的人都从来不用复制 粘贴?非也,只是vim把它叫做yank(召回)而已,Y键(Shift+y)就可以把选中的文字放入剪贴板,方便p键paste。但是且慢,我们可以不 用鼠标来反白选择文字吗?是可以的,因为有caret模式。按 i 键,效果等同于F7,网页中会出现一个光标,接受我们的h-j-k-l等等移动的命令。这时再按 v 键,就进入visual模式,再移动光标就开始选择文字了。离开caret模式可以用Esc或者F7。

    在结束这篇文章之前,要讲的至少还有buffer,其实也就是Vimperator对于标签页的另一个叫法,来源于vim对于多文件操作的称呼。键 入B,你得到的是现在所有标签页的标题和地址,带有%记号的是当前标签页,有#记号的是上一个标签页。键入b,你便会出现在命令栏 :buffer! 的后面,你可以通过键入标题或url中的文字到达某一个标签页,比如用 :buffer! xiaonei 来回到已经打开的校内主页。如果Vimperator没找对(比如说有几页符合要求),你还可以通过gb跳到下一个满足条件的标签页。

    同样很好用的命令还有gi,跳到上次使用的文本框中,这功能可以方便搜索时修改、调整关键词。gf用来查看源代码。还有智能的]]和 [[,Vimperator会寻找页面中形如next、>>、previous、<<的链接,从而实现转到下一页或者上一页的功 能,不过Vimperator本身不认识中文,需要调整一下参数

    :set nextpattern=\s*下一页|下一张|下页\s*,\bnext\b,^>$,^(>>|»)$,^(>|»),(>|»)$,\bmore\b
    :set previouspattern=\s*上一页|上一张|上页\s*,\bprev|previous\b,^<$,^(<<|«)$,^(<|«),(<|«)$

    试用完了Vimperator,怎么用键盘关Firefox呢?和vim一样,ZZ表示记住现在打开的页面并关闭Firefox,ZQ表示不记住现 在打开的页面并关闭。可是先别关,要先把刚刚做的set和map等设置存好。使用 :mkv 可以在$HOME目录下生成配置文件 .vimperatorrc 或者 _vimperatorrc,Unix和Mac的用户应该很熟悉$HOME目录了,Windows的$HOME目录一般应该是C:\Documents and Settings\Username\ 。有时为了更方便地管理配置文件,你可以建立一个环境变量$VIMPERATOR_HOME,写上你常用的文件夹,再把配置文件移过 来。$VIMPERATOR_HOME的优先级比$HOME高,但是据说2.0版以后的Vimperator不会再用这个环境变量。如果你像我这样使用 xp/ubuntu双系统,又希望两边的Vimperator使用同一个配置文件,一个方法是在ubuntu底下建立一个指向xp的配置文件的软链接, 如:

    user@localhost:~$ ln -s /media/sdaN/Documents/_vimperatorrc

    你生成配置文件之后,还可以自己修改,我的配置文件是这样的:
    (注:新的、与时俱进的.vimperatorrc文件见这篇日志)

    " 1.2 (created: 2008/08/16 18:51:52)
    " Mappings
    map A <Nop>
    map <C-o> <Nop>
    map <C-i> <Nop>
    map J <C-d>
    noremap K <C-u>
    map H gT
    map L gt
    noremap j 3j
    noremap k 3k
    noremap I <C-o>
    noremap O <C-i>
    noremap <C-u> <C-v><C-u>
    noremap <C-s> <C-c>
    noremap <C-c> <C-v><C-c>
    noremap <C-a> <C-v><C-a>
    cnoremap <C-c> <C-v><C-c>
    cnoremap <C-v> <C-v><C-v>
    cnoremap <C-x> <C-v><C-x>
    inoremap <C-a> <C-v><C-a>
    inoremap <C-c> <C-v><C-c>
    inoremap <C-v> <C-v><C-v>
    inoremap <C-x> <C-v><C-x>
    inoremap <C-z> <C-v><C-z>
    inoremap <C-y> <C-v><C-y>

    " Options
    set guioptions=mT
    set titlestring=Mozilla Firefox
    set popups=2
    set nextpattern=\s*下一页|下一张|下页\s*,\bnext\b,^>$,^(>>|››|»)$,^(>|»),(>|»)$,\bmore\b
    set previouspattern=\s*上一页|上一张|上页\s*,\bprev|previous\b,^<$,^(<<|‹‹|«)$,^(<|«),(<|«)$

    " PassThrough gmail and greader
    autocmd LocationChange .* js modes.passAllKeys = /.*(mail\.google\.com|www\.google\.com\/reader).*/.test(buffer.URL)

    " Abbreviations

    " Commands
    command noimg set! permissions.default.image=2
    command ysimg set! permissions.default.image=1
    command nojs set! javascript.enabled=false
    command ysjs set! javascript.enabled=true

    source! ~/_vimperatorrc.local

    " vim: set ft=vimperator:

    这里的map用了<Nop>,作用就是废了那个按键。PassThrough gmail and greader 则有这样的效果:每当到达gmail/greader的页面时自动进入PassThrough模式,从而让gmail/greader捕捉到快捷键而不是 给Vimperator拦截下来。这里使用了autocommand功能,每当LocationChange事件发生,当时的url满足正则表达式 .* (即无论任何网址)时,调用javascript更改参数modes.passAllKeys,将其赋值为真/假,依据是用后面这个正则表达式来测试 buffer.URL变量。这里的javascript怎么来的呢?没错,你可以试试

    :js alert("test")

    你还可以使用 :! 来调用命令行,比如(以对此相对陌生的Windows用户为例)

    :! mspaint
    :! ping 127.0.0.1

    我的配置文件使用的command是Vimperator的自定义命令的功能,分别定义了noimg命令和ysimg命令。如果你知道 :set! 是用来修改Firefox本身设置(见about:config)的话,这两个命令的作用就呼之欲出了:执行 :noimg 和 :ysimg 分别可以命令Firefox打开网页时是否载入图片。旧版本的Firefox应该调整 network.image.imageBehavior 而不是 permissions.default.image ,而且值应该是1和0。在这方面,Vimperator本身带有一个更彻底的禁用花哨CSS的参数,执行

    :set um

    可以进入usermode,相当于 查看->页面风格->无风格 的效果,仅仅是键盘操作比较快的优势。退出usermode只需 :set noum

    此外,Vimperator还能在control模式zoom in, zoom out,能够利用QuickMarks快速跳转标签页,能够录制键盘宏(Macro),当然还有相对基本的链接另存为、复制链接地址、复制链接文字等等不同于f的功能。

    至于文中所提到的 noimg, ysimg, nojs, ysjs 几个autocmd,本来我的目的是用一个键(如F12等)来toggle,但技术不精,没能做到,主要是除了set!我不知道还有什么方法更改firefox preferences。

    这篇文章到此为止,可以说是我认识Vimperator的心得吧。

    官网:

    http://vimperator.org/vimperator
  • 相关阅读:
    PAT (Advanced Level) Practice 1055 The World's Richest (25 分) (结构体排序)
    PAT (Advanced Level) Practice 1036 Boys vs Girls (25 分)
    PAT (Advanced Level) Practice 1028 List Sorting (25 分) (自定义排序)
    PAT (Advanced Level) Practice 1035 Password (20 分)
    PAT (Advanced Level) Practice 1019 General Palindromic Number (20 分) (进制转换,回文数)
    PAT (Advanced Level) Practice 1120 Friend Numbers (20 分) (set)
    从零开始吧
    Python GUI编程(TKinter)(简易计算器)
    PAT 基础编程题目集 6-7 统计某类完全平方数 (20 分)
    PAT (Advanced Level) Practice 1152 Google Recruitment (20 分)
  • 原文地址:https://www.cnblogs.com/xfiver/p/1915241.html
Copyright © 2011-2022 走看看