Chrome神器Vimium快捷键学习记录

今天下午折腾了一下Chrome下面的一个插件Vimium的使用,顿时发现该插件功能强大,能够满足减少鼠标的使用。至于为何要使用这个插件,源于我手腕上的伤一直没有好,使用鼠标的时候有轻微的疼痛。而且,由于我一般都是在SNS网站上停留,在人人和微博比较多,所以实际上发现每次看完一个一个页面都要点下一页的感觉很不爽,而同时最近在学习Vim,所以想到如果能够实现几个简单的快捷键,那么会相当方便。为此Google之,发现了这个给力的插件,以下为我的学习笔记。

Vimium使用快捷键总结

Vimium-help-graphic

 

j,

: Scroll down

k,

: Scroll up

h

: Scroll left

l

: Scroll right

gg

: Scroll to the top of the page

G

: Scroll to the bottom of the page

zH

: Scroll all the way to the left

zL

: Scroll all the way to the right

d

: Scroll a page down

u

: Scroll a page up

r

: Reload the page

gs

: View page source

yy

: Copy the current URL to the clipboard

yf

: Copy a link URL to the clipboard

gu

: Go up the URL hierarchy

i

: Enter insert mode

gi

: Focus the first (or n-th) text box on the page

f

: Open a link in the current tab

F

: Open a link in a new tab

: Open multiple links in a new tab

b

: Open a bookmark in the current tab

B

: Open a bookmark in a new tab

[[

: Follow the link labeled previous or <

]]

: Follow the link labeled next or >

gf

: Cycle forward to the next frame on the page

j: 向下移动。
k:向上移动。(不明白默认的表示是啥用法,使用了c-y这三个键没有效果)
h:向左移动。
l:向右移动。

zH:一直移动到左部。
zL:一直移动到右部。
gg:跳转到页面的顶部。
G:跳转到页面的底部。
d:向下翻页(相当于PageDown被按下了)
u:向上翻页(相当于PageUp被按下了)
r:重新载入该页(相当于F5刷新页面)

gs:查看页面源代码
yy:拷贝当前页面的URL到剪贴板
yf:拷贝某一个URL到剪贴板(实际上是相当于输入了f,然后出现很多编码的URL,选择某个之后,相当于拷贝了某个,因为一个页面中可能有很多超链接)

gu:跳转到父页面(比如http://www.douban.com/group/vim/,输入后跳转到父页面即http://www.douban.com/group/,所以不同于H的快捷键是回到上个历史页面)

i:输入模式(如果发现命令不起作用,可能是进入输入模式了,此时按Esc回到命令模式)
gi:将焦点集中到第一个输入框(输入gNi则焦点集中到第N个输入框)
f:在当前的页面打开一个新的链接。
F:在新的页面打开一个新的链接。

:在当前页面打开多个链接(没感觉使用到了多个标签,不过表示的是输入af)
b:在当前页打开一个书签。(输入部分网址会自动进行搜索)
B:在新的标签页打开一个书签

gf:循环到当前页面的下一个框层(可能跟页面制作有关,目前没用到)

查找模式:(和Vim相似)
/ : 查找
n: 向下查找匹配内容
N:向上查找匹配内容

导航历史:
H:回退上一个历史页面(相当于浏览器中的向左箭头)
L:回到下一个历史页面(相当于浏览器的向右箭头)

标签页操作:
K,gt:跳转到右边的一个标签页
J,gT:跳转到左边的一个标签页
t:创建一个新的标签页
x:关闭当前的标签页
X:恢复刚刚关闭的标签页
?:显示命令的帮助提示(再按一次关闭)
(红色为常用的命令)

另外,在当前的标签页直接输入一个新的网址,按F6就OK了。这个基本的快捷键都不会,搜了半天才搞定,汗~
发现学习一个新的东西也不是很费时间,而且能够提高效率,看来还是要折腾啊,年轻不折腾就会退步,就像工作以后就没心思倒腾了一样,退步不少啊!

附linuxToy的部分说明(http://linuxtoy.org/archives/vimium.html):
Vimium 用法
页面浏览
j、k、h、l:向下/上/左/右滚动 
gg 和 G:移至页顶/页底 
Ctrl + d 和 Ctrl + u:下/上翻页 
zi 和 zo:放大/缩小 
历史
H:后退 
L:前进 
标签页
t:打开新标签 
d:关闭标签 
u:还原标签 
J/K:下/上一个标签 
Hint 模式
f/F:进入 Hint 模式,后者会在新标签页中打开链接 

Ctrl与Caps Lock键的交换

Emacs和VIM之所以这样受程序员的喜爱,是因为两者都有高度的可定制性,以及丰富的快捷键组合。利用这些快捷键组合,让你能够手不离键盘,就能完成大多数的工作。其实,用鼠标操作神马的,效率是极其低下的……

话说Emacs中,用到最多的两个快捷键组合,就是Meta键和Ctrl键。对于我们普通的键盘,Meta键还好,离手很近。不过,对于Ctrl键,就离得比较远了…… 网上有网友推荐的做法,是用手掌去按Ctrl键,不过,这样的方法,对于普通键盘还不错,但是对于笔记本来说,也不太实用。

正规的Unix键盘的键位布局,Ctrl键应该是在现在标准键盘的Caps Lock位置的。这样,按起Ctrl键,就方便多了。

那要怎么交换这两个键的键位呢?重新买一个键盘? No!! 其实,也不用换键盘,我们完全可以用软件的方式来实现两个键位的交换。
下面是我从网上整理来的方法:

Win7下交换键位的设置

其实Win7下面,方法还比较多,一种是直接修改注册表,实现全局的替换,另外一种,是让两个键的交换,只在Emacs窗口激活的时候生效。至于哪个更好,完全根据你自己的需要。

局部替换大法

这种方法,需要用到一个辅助软件,那就是大名鼎鼎的Auto Hotkey,简称AHK

编辑一个脚本,输入如下内容,保存,reload,即可生效:
IfWinActive emacs; 判断当前激活的窗口是否是Emacs,这是根据窗口标题实现的,如果你的标题不一样,请替换一下

Control::Capslock; 把Control替换为Capslock

Capslock::Control; 把Capslock替换为Control

IfWinActive

全局替换大法

可以利用第三方工具,或者直接在注册表中修改键位映射关系

注册表位置:[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Keyboard Layout] 如果没有此键,就新建一个

新建一个二进制值的Key,名叫:Scancode Map

输入如下的值:

00,00,00,00

00,00,00,00

03,00,00,00

3A,00,1D,00

1D,00,3A,00

00,00,00,00

前两行和最后一行,都是固定的,全部为0。第三行,表示你修改了几个键,其实我们只是改了两个键,不过最后那一行也要算进去,所以是3。

重点是在第四行和第五行。3A00,代表Caps Lock, 1D00,代表Ctrl。这一行,意思即为,将Caps Lock映射为Ctrl

第五行,就不用说了,意思刚好相反。

修改完毕后,重新登录Windows即可生效!

下面附上各个键位值的参考:

Escape 01 00

Tab 0F 00

Caps Lock 3A 00

Left Alt 38 00

Left Ctrl 1D 00

Left Shift 2A 00

Left Windows 5B E0

Right Alt 38 E0

Right Ctr l1D E0

Right Shift 36 00

Right Windows 5C E0

Backspace 0E 00

Delete 53 E0

Enter 1C 00

Space 39 00

Insert 52 E0

HOME 47 E0

End 4F E0

Num Lock 45 00

Page Down 51 E0

Page Up 49 E0

Scroll Lock 46 00

Mac OS下交换键位设置

Mac OS Lion下,非常简单,甚至不需要任何第三方软件,直接在键盘设置里面修改即可。当初我还google了一下文章,有的说需要装键盘驱动,有的说要用第三方软件,其实没那么麻烦,Lion已经有这个功能了……

git commit 出现There was a problem with the editor ‘vi’

今天在Mac OS X 10.9.3上使用git的时候遇到这么一个问题,执行git commit操作会显示如下错误:
There was a problem with the editor ‘vi’

搜寻了一下相关的解决方案,发现好多人遇到了这个问题。似乎是因为vim的返回值有问题导致的。
所以执行一下下面这条命令:
$ git config –global core.editor /usr/bin/vim
将git使用的编辑器强制指定一下,就可以正常使用了。具体的错误分析就不翻译了,贴在下面:

I have had an annoying problem with git and vi. I like to use vim to edit my commit messages, but I’ve been hit with this annoying message every time I write the message and quit vim.

error: There was a problem with the editor ‘vi’
After a little bit of digging I found that this message is shown by git when the editor exits with a non-zero exit code. You can use $? to see the exit code of last script or application.

$ vim # then exit vim with :q immediately
$ echo $?
1
I’m still not sure why vim is exiting with non-zero exit code, but it is definitely related to my .vimrc – moving it to .vimrc.bak seemed to fix the problem. I’m using the excellent pathogen plugin to manage my vimfiles, so I plan to go through that and my installed plugins to find the cause of the problem.

There is a fix though, I’m not sure what’s causing this, but I found a post on the vim-mac mailing list which shows this:

$ vim # and exit with :q
$ echo $?
1
$ /usr/bin/vim # and exit with :q
$ echo $?
0
$ which vim
/usr/bin/vim
Running vim with /usr/bin/vim seems to make it exit cleanly. So to fix the problem with git commit you just need to run this:

$ git config –global core.editor /usr/bin/vim
I’d still like to get to the root of the problem, but this gets me my git commit messages back!

VIM查看文件编码文件编码格式转换文件名编码转换

如果你需要在Linux中操作windows下的文件,那么你可能会经常遇到文件编码转换的问题。Windows中默认的文件格式是GBK(gb2312),而Linux一般都是UTF-8。下面介绍一下,在Linux中如何查看文件的编码及如何进行对文件进行编码转换。

查看文件编码
在Linux中查看文件编码可以通过以下几种方式:
1.在Vim中可以直接查看文件编码
:set fileencoding
即可显示文件编码格式。
如果你只是想查看其它编码格式的文件或者想解决用Vim查看文件乱码的问题,那么你可以在
~/.vimrc 文件中添加以下内容:

set encoding=utf-8 fileencodings=ucs-bom,utf-8,cp936

这样,就可以让vim自动识别文件编码(可以自动识别UTF-8或者GBK编码的文件),其实就是依照fileencodings提供的编码列表尝试,如果没有找到合适的编码,就用latin-1(ASCII)编码打开。

文件编码转换
1.在Vim中直接进行转换文件编码,比如将一个文件转换成utf-8格式
:set fileencoding=utf-8

2. iconv 转换,iconv的命令格式如下:
iconv -f encoding -t encoding inputfile
比如将一个UTF-8 编码的文件转换成GBK编码
iconv -f GBK -t UTF-8 file1 -o file2

文件名编码转换:

从Linux往 windows拷贝文件或者从windows往Linux拷贝文件,有时会出现中文文件名乱码的情况,出现这种问题的原因是因为,windows的文件名中文编码默认为GBK,而Linux中默认文件名编码为UTF8,由于编码不一致,所以导致了文件名乱码的问题,解决这个问题需要对文件名进行转码。

在Linux中专门提供了一种工具convmv进行文件名编码的转换,可以将文件名从GBK转换成UTF-8编码,或者从UTF-8转换到GBK。

首先看一下你的系统上是否安装了convmv,如果没安装的话用:
yum -y install convmv
安装。

下面看一下convmv的具体用法:

convmv -f 源编码 -t 新编码 [选项] 文件名

常用参数:
-r 递归处理子文件夹
–notest 真正进行操作,请注意在默认情况下是不对文件进行真实操作的,而只是试验。
–list 显示所有支持的编码
–unescap 可以做一下转义,比如把%20变成空格
比如我们有一个utf8编码的文件名,转换成GBK编码,命令如下:

convmv -f UTF-8 -t GBK –notest utf8编码的文件名

这样转换以后”utf8编码的文件名”会被转换成GBK编码(只是文件名编码的转换,文件内容不会发生变化)

vim 编码方式的设置

和所有的流行文本编辑器一样,Vim 可以很好的编辑各种字符编码的文件,这当然包括UCS-2、UTF-8 等流行的 Unicode 编码方式。然而不幸的是,和很多来自 Linux 世界的软件一样,这需要你自己动手设置。

Vim 有四个跟字符编码方式有关的选项,encoding、fileencoding、fileencodings、termencoding (这些选项可能的取值请参考 Vim 在线帮助 :help encoding-names),它们的意义如下:

* encoding: Vim 内部使用的字符编码方式,包括 Vim 的 buffer (缓冲区)、菜单文本、消息文本等。默认是根据你的locale选择.用户手册上建议只在 .vimrc 中改变它的值,事实上似乎也只有在.vimrc 中改变它的值才有意义。你可以用另外一种编码来编辑和保存文件,如你的vim的encoding为utf-8,所编辑的文件采用cp936编码,vim会自动将读入的文件转成utf-8(vim的能读懂的方式),而当你写入文件时,又会自动转回成cp936(文件的保存编码).

* fileencoding: Vim 中当前编辑的文件的字符编码方式,Vim 保存文件时也会将文件保存为这种字符编码方式 (不管是否新文件都如此)。

* fileencodings: Vim自动探测fileencoding的顺序列表, 启动时会按照它所列出的字符编码方式逐一探测即将打开的文件的字符编码方式,并且将 fileencoding 设置为最终探测到的字符编码方式。因此最好将Unicode 编码方式放到这个列表的最前面,将拉丁语系编码方式 latin1 放到最后面。

* termencoding: Vim 所工作的终端 (或者 Windows 的 Console 窗口) 的字符编码方式。如果vim所在的term与vim编码相同,则无需设置。如其不然,你可以用vim的termencoding选项将自动转换成term的编码.这个选项在 Windows 下对我们常用的 GUI 模式的 gVim 无效,而对 Console 模式的Vim 而言就是 Windows 控制台的代码页,并且通常我们不需要改变它。

好了,解释完了这一堆容易让新手犯糊涂的参数,我们来看看 Vim 的多字符编码方式支持是如何工作的。

1. Vim 启动,根据 .vimrc 中设置的 encoding 的值来设置 buffer、菜单文本、消息文的字符编码方式。

2. 读取需要编辑的文件,根据 fileencodings 中列出的字符编码方式逐一探测该文件编码方式。并设置 fileencoding 为探测到的,看起来是正确的 (注1) 字符编码方式。

3. 对比 fileencoding 和 encoding 的值,若不同则调用 iconv 将文件内容转换为encoding 所描述的字符编码方式,并且把转换后的内容放到为此文件开辟的 buffer 里,此时我们就可以开始编辑这个文件了。注意,完成这一步动作需要调用外部的 iconv.dll(注2),你需要保证这个文件存在于 $VIMRUNTIME 或者其他列在 PATH 环境变量中的目录里。

4. 编辑完成后保存文件时,再次对比 fileencoding 和 encoding 的值。若不同,再次调用 iconv 将即将保存的 buffer 中的文本转换为 fileencoding 所描述的字符编码方式,并保存到指定的文件中。同样,这需要调用 iconv.dll由于 Unicode 能够包含几乎所有的语言的字符,而且 Unicode 的 UTF-8 编码方式又是非常具有性价比的编码方式 (空间消耗比 UCS-2 小),因此建议 encoding 的值设置为utf-8。这么做的另一个理由是 encoding 设置为 utf-8 时,Vim 自动探测文件的编码方式会更准确 (或许这个理由才是主要的 ;)。我们在中文 Windows 里编辑的文件,为了兼顾与其他软件的兼容性,文件编码还是设置为 GB2312/GBK 比较合适,因此 fileencoding 建议设置为 chinese (chinese 是个别名,在 Unix 里表示 gb2312,在 Windows 里表示cp936,也就是 GBK 的代码页)。

100个常用的VIM命令

Basics

 

:e filename Open filename for edition
:w Save file
:q Exit Vim
:w! Exit Vim without saving

Search

 

/word Search word from top to bottom
?word Search word from bottom to top
/jo[ha]n Search john or joan
/\< the Search the, theatre or then
/the\> Search the or breathe
/\< the\> Search the
/\< ¦.\> Search all words of 4 letters
/\/ Search fred but not alfred or frederick
/fred\|joe Search fred or joe
/\<\d\d\d\d\> Search exactly 4 digits
/^\n\{3} Find 3 empty lines
:bufdo /searchstr/ Search in all open files

Replace

 

:%s/old/new/g Replace all occurences of old by new in file
:%s/old/new/gw Replace all occurences with confirmation
:2,35s/old/new/g Replace all occurences between lines 2 and 35
:5,$s/old/new/g Replace all occurences from line 5 to EOF
:%s/^/hello/g Replace the begining of each line by hello
:%s/$/Harry/g Replace the end of each line by Harry
:%s/onward/forward/gi Replace onward by forward, case unsensitive
:%s/ *$//g Delete all white spaces
:g/string/d Delete all lines containing string
:v/string/d Delete all lines containing which didn’t containstring
:s/Bill/Steve/ Replace the first occurence of Bill by Steve in current line
:s/Bill/Steve/g Replace Bill by Steve in current line
:%s/Bill/Steve/g Replace Bill by Steve in all the file
:%s/\r//g Delete DOS carriage returns (^M)
:%s/\r/\r/g Transform DOS carriage returns in returns
:%s#<[^>]\+>##g Delete HTML tags but keeps text
:%s/^\(.*\)\n\1$/\1/ Delete lines which appears twice
Ctrl+a Increment number under the cursor
Ctrl+x Decrement number under cursor
ggVGg? Change text to Rot13

Case

 

Vu Lowercase line
VU Uppercase line
g~~ Invert case
vEU Switch word to uppercase
vE~ Modify word case
ggguG Set all text to lowercase
:set ignorecase Ignore case in searches
:set smartcase Ignore case in searches excepted if an uppercase letter is used
:%s/\<./\u&/g Sets first letter of each word to uppercase
:%s/\<./\l&/g Sets first letter of each word to lowercase
:%s/.*/\u& Sets first letter of each line to uppercase
:%s/.*/\l& Sets first letter of each line to lowercase

Read/Write files

 

:1,10 w outfile Saves lines 1 to 10 in outfile
:1,10 w >> outfile Appends lines 1 to 10 to outfile
:r infile Insert the content of infile
:23r infile Insert the content of infile under line 23

File explorer

 

:e . Open integrated file explorer
:Sex Split window and open integrated file explorer
:browse e Graphical file explorer
:ls List buffers
:cd .. Move to parent directory
:args List files
:args *.php Open file list
:grep expression *.php Returns a list of .php files contening expression
gf Open file name under cursor

Interact with Unix

 

:!pwd Execute the pwd unix command, then returns to Vi
!!pwd Execute the pwd unix command and insert output in file
:sh Temporary returns to Unix
$exit Retourns to Vi

Alignment

 

:%!fmt Align all lines
!}fmt Align all lines at the current position
5!!fmt Align the next 5 lines

Tabs

 

:tabnew Creates a new tab
gt Show next tab
:tabfirst Show first tab
:tablast Show last tab
:tabm n(position) Rearrange tabs
:tabdo %s/foo/bar/g Execute a command in all tabs
:tab ball Puts all open files in tabs

Window spliting

 

:e filename Edit filename in current window
:split filename Split the window and open filename
ctrl-w up arrow Puts cursor in top window
ctrl-w ctrl-w Puts cursor in next window
ctrl-w_ Maximise current window
ctrl-w= Gives the same size to all windows
10 ctrl-w+ Add 10 lines to current window
:vsplit file Split window vertically
:sview file Same as :split in readonly mode
:hide Close current window
:­nly Close all windows, excepted current
:b 2 Open #2 in this window

Auto-completion

 

Ctrl+n Ctrl+p (in insert mode) Complete word
Ctrl+x Ctrl+l Complete line
:set dictionary=dict Define dict as a dictionnary
Ctrl+x Ctrl+k Complete with dictionnary

Marks

 

mk Marks current position as k
˜k Moves cursor to mark k
d™k Delete all until mark k

Abbreviations

 

:ab mail mail@provider.org Define mail as abbreviation of mail@provider.org

Text indent

 

:set autoindent Turn on auto-indent
:set smartindent Turn on intelligent auto-indent
:set shiftwidth=4 Defines 4 spaces as indent size
ctrl-t, ctrl-d Indent/un-indent in insert mode
>> Indent
<< Un-indent

Syntax highlighting

 

:syntax on Turn on syntax highlighting
:syntax off Turn off syntax highlighting
:set syntax=perl Force syntax highlighting