vim使用技巧.docx

上传人:b****6 文档编号:7694128 上传时间:2023-01-25 格式:DOCX 页数:36 大小:56.39KB
下载 相关 举报
vim使用技巧.docx_第1页
第1页 / 共36页
vim使用技巧.docx_第2页
第2页 / 共36页
vim使用技巧.docx_第3页
第3页 / 共36页
vim使用技巧.docx_第4页
第4页 / 共36页
vim使用技巧.docx_第5页
第5页 / 共36页
点击查看更多>>
下载资源
资源描述

vim使用技巧.docx

《vim使用技巧.docx》由会员分享,可在线阅读,更多相关《vim使用技巧.docx(36页珍藏版)》请在冰豆网上搜索。

vim使用技巧.docx

vim使用技巧

vim使用技巧

 

vim常用技巧

所以我初步设想分三大部分来写

(1)vim基础

(2)vimtips的翻译和解释

(3)vimrc

由于水平所限,有错误和可笑之处,恳请批评。

这里就附带说一下vim基础了

很简单的概括一下:

1.程序

Unix:

vim

Win:

gvim

2.工作方式

normalmode普通模式

insertmode插入模式

visualmode可视模式

visual-linemode

visual-blockmode

command-linemode命令行模式

searchmode搜索模式

模式切换:

记住Esc总可以返回普通模式

normal=i=>insert

normal=v=>visual

normal=Shift-V=>visual-line

normal=Ctrl-V=>visual-block

normal=:

=>command-line

normal=/=>search

3.光标移动

开始,会用方向键和PgUp,PgDn就可以用了

vim和perl一样,你掌握一个子集,就可以很好的使用了

4.最后,说一下两个概念和

称为狭义字,它指一个单词,其中不包含空白和特殊字符

称为广义字,它所指的单词可以包含一些特殊字符

具体有那些字符可以看help

通常,它们会和你想的一样:

因为第二部分经常用到这个概念,所以在此说一下

----------------------------------------

#基础

----------------------------------------

*#g*g#        :

寻找光标处的狭义单词()(前向/后向)

%            :

括号配对寻找{}[]()

matchit.vim      :

使得%能够配对标记  等等

      :

插入模式下的单词自动完成

      :

行自动完成(超级有用)

/      :

把狭义单词  写到搜索命令行

/      :

把广义单词  写到搜索命令行

:

setignorecase    :

搜索时忽略大小写

:

syntaxon      :

在Perl,HTML,PHP等中进行语法着色

:

hregexp    :

按下control-D键即可得到包含有regexp的帮助主题的列表

              :

(使用TAB可以实现帮助的自动补齐)

----------------------------------------

#使更新_vimrc更容易

:

nmap,s:

source$VIM/_vimrc

#译释:

nmap是绑定一个在normal模式下的快捷键

:

nmap,v:

e$VIM/_vimrc

#译释:

在normal模式下,先后按下,s两个键执行_vimrc,而,v则是编辑_vimrc

----------------------------------------

#visual模式(例子是:

轻松添加其他的HTMLTags)

:

vmapsb"zdiz  :

在visual模式下选中的文字前后分别加上和

#译释:

vmap是绑定一个在visual模式下的快捷键

#译释:

原理:

在visual模式下,"zd把一个选中的区域命名为z然后删除,

#i进入插入模式,输入,z撤销刚才的删除,然后再写入,

#最后返回normal模式

#译释:

"z命令创建一个选中的区域为register,并把它命名为z

#译释:

更令人开心的有:

在visual模式下选中几行,然后输入2>,

#    则选中的行会全部缩进两个tab

#    555,偶一开始还是用:

xx,xxs/^/\t\t/,好傻啊!

:

vmapst"zdiz?

>  :

在visual模式下选中的文字前后分别加上和?

>

----------------------------------------

#文件浏览

:

Ex                    :

开启目录浏览器,注意首字母E是大写的

:

Sex                  :

在一个分割的窗口中开启目录浏览器

:

ls                    :

显示当前buffer的情况

:

cd..                  :

进入父目录

:

args                  :

显示目前打开的文件

:

lcd%:

p:

h              :

更改到当前文件所在的目录

#译释:

lcd是紧紧改变当前窗口的工作路径,%是代表当前文件的文件名,

#加上:

p扩展成全名(就是带了路径),加上:

h析取出路径

:

autocmdBufEnter*lcd%:

p:

h  :

自动更改到当前文件所在的目录

#译释:

autocmd指定一个自动命令,BufEnter指定一个事件,*指定事件的对象,

#lcd%:

p:

h指定一个动作

#hehe,好像和写记叙文差不多

----------------------------------------

#缓冲区(buffer)浏览器(第三方的一个最流行的脚本)

#需要下载bufexplorer.vim,http:

//www.vim.org/script.php?

script_id=42上就有

\be                    :

在缓冲区浏览器中打开缓冲区列表

\bs                    :

以分割窗口的形式打开缓冲区浏览器

----------------------------------------

#大小写转换

guu                    :

行小写

gUU                    :

行大写

g~~                    :

行翻转(当然指大小写啦)

#译释:

g是大小写转换命令(greate),u/U/~是三种转换形式(小写/大写/翻转),

#最后一个重复则表示该转换是对于一行而言的

guw                    :

字大写(狭义字)译注:

建议对比iw

gUw                    :

字小写(狭义字)

g~w                    :

字翻转(狭义字)

#译释:

最后一个w表示该转换是对于一个字而言的,由于是在normal模式下,

#所以这个w表示一个狭义字

vEU                    :

字大写(广义字)

vE~                    :

字翻转(广义字)

#译释:

vE这个指令组合会进入visual模式,然后选择一个广义字

ggguG                  :

把整个文章全部小写(ft!

bt!

gf                    :

取当前光标处的广义字作为文件名,然后试图打开它!

#译释:

为什么是广义字呢?

因为这样可以方便的取到路径啊,像/var/www/html/index.htm

ga                    :

显示光标处字符的ascii,hex,oct,...晕菜的一堆转换

ggVGg?

                  :

用rot13编码整个文件(晕!

#译释:

gg到文件首行首字符,V进入Visual-Line模式,G到文件末行首字符,

#    这样就选中了整篇文章,然后g?

就是用rot13编码整个文件啦

#

#【关于rot13——谁让英文是偶数个字母啊】

#ROT13是一种简单的编码,它把字母分成前后两组,每组13个,编码和解码

#的算法相同,仅仅交换字母的这两个部分,即:

[a..m]-->[n..z]和[n..z]

#-->[a..m]。

ROT13用简易的手段使得信件不能直接被识别和阅

#读,也不会被搜索匹配程序用通常的方法直接找到。

经常用于USENET中发表一

#些攻击性或令人不快的言论或有简单保密需要的文章。

#由于ROT13是自逆算法,所以,解码和编码是同一个过程。

              :

增加,减少光标处的狭义字所表示的数字

                      :

(,仅仅是分割了这两个命令,不是命令的一部分)

                      :

Win32的用户可能需要重新定义一下Ctrl-A,呵呵

#译注:

goodguy,令人不得不想到perl的数字串

=5*5                :

插入25(这是一个迷你计算器耶!

----------------------------------------

#好玩的东东

:

h42        :

也可以访问

            :

第一个结果就是News.DouglasAdams1952-2001.

            :

Floor42extendsitsdeepestsympathiesto

            :

thefamily,friends,andfansofDouglasAdams.

:

hholy-grail

:

h!

----------------------------------------

#标记和移动

'.          :

跳到最后修改的那一行(超级有用)(ft,怎么又是这个评价)

`.          :

不仅跳到最后修改的那一行,还要定位到修改点

        :

依次沿着你的跳转记录向回跳(从最近的一次开始)

        :

依次沿着你的跳转记录向前跳

:

ju(mps)      :

列出你跳转的足迹

:

helpjump-motions

:

history      :

列出历史命令记录

:

hisc        :

命令行命令历史

:

hiss        :

搜索命令历史

q/          :

搜索命令历史的窗口

q:

          :

命令行命令历史的窗口

:

        :

历史命令记录的窗口

----------------------------------------

#缩写和键盘映射(原文中文件举例都用了c:

/aaa/x,偶全给他改成/path/file了,哼唧)

:

map    :

'a,'bw!

/path/file

#译释:

map是映射一个normal模式下的键

#这里是把F7键映射成把标记a到标记b中间的内容另存为一个文件/path/file

#标记(mark)的方法:

把光标移动到需要标记的地方,输入m,然后输入标记名,例如a

#引用标记的方法:

'a,即:

单引号加标记名

:

map    :

r/path/file

#译释:

把F8键映射成在当前位置插入文件/path/file的内容

:

map    :

.w!

/path/file2

#译释:

.(点号)表示当前行

#所以F11就是把当前行存为/path/file2

#最后的表示一个回车

:

map    :

r/path/file2

:

abphp      :

列出php表示的缩写

#译释:

定义一个缩写使用:

:

iabhmhmisty

#一个有趣的现象是,它列出的会是php和它的前子串开头的缩写

#例如,有这么几个缩写:

#h=>hmisty1,hm=>hmisty2,hmi=>hmisty3,m=>hmisty4

#那么使用:

abhm会显示这么几个缩写:

hm和h

#而不是你想象中的hm和hmi

:

map,        :

列出以逗号开始的键盘映射

#译释:

一般而言,我们称这些逗号开始的组合键为“逗号命令”

#不过hmisty更喜欢用;构成“分号命令”

#而且不是用map,而是用imap

#因为偶懒么,懒得按,所以直接在insert模式下就执行命令了

#为什么用分号呢?

因为我最常用它写程序啊

#perl/C/C++/objectpascal/java,都是用分号结束一个语句

#我们一般很少在分号后面连续写其他字符

#所以用“分号+其他键”就很少会在输入的时候造成冲突

#在键盘映射中常用的表示

        :

回车

        :

Esc

      :

转义符号\

        :

管道符号|

----------------------------------------

#列出寄存器(Registers)

:

reg        :

显示所有当前的registers

"1p          :

"表示引用register,1表示一个名字叫做1的register,

            :

p就是粘贴(paste)命令

#译释:

"也用来定义register

#先输入",表示定义register

#然后输入名字,如0~9,a~z

#然后执行删除或复制命令,如dd或y,

#      或者是visual模式下的d(删除选中的部分)或y(复制选中的部分)

#则被删除或复制的部分就被存入了这个命名的register

#

#观察:

一个特殊的register,"",里面存储了一个匿名的删除/复制

#在你执行dd或y的时候,被作用的部分被存到了""中

#这些和perl是多么像啊

----------------------------------------

#Usefultrick

"ayy@a        :

把当前行作为一个Vim命令来执行

#译释:

"ayy是定义当前行到registera,然后@a是执行registera中存储的指令

#yy:

复制一行

#10yy:

复制从此向下的10行

yy@"        :

用上面所提到的那个匿名register

----------------------------------------

#从其他程序获取输出(需要外部程序)

:

r!

ls.exe      :

读取ls的输出到当前位置

!

!

date        :

读取date的输出(但是会替换当前行的内容)

#译释:

其实你输入了!

!

后,vim就自动转换到:

.!

等待你继续输入

#使用外部程序sort进行排序(sort是Unix标准命令,ls,date也是)

:

%!

sort-u    :

使用sort程序排序整个文件(用结果重写文件)

#译释:

%表示整个文件的所有行

#!

sort表示执行外部命令sort

#-u是sort的参数,mansort看看,这个参数的意义是合并相同的行

#u就是unique,如果两行内容相同,则结果中只保留一行的说

:

'a,'b!

sort-u  :

对marka到markb中间的内容进行排序

!

1}sort-u    :

排序当前段落(只能在normal模式下使用!

!

#译释:

!

表示使用filter,1}表示filter的对象是从当前行开始向后数一段

#段落指到空行处结束,不包括空行

#其实你一旦输入!

1},vim就自动计算当前段落应该到那一行(eg.+5),然后生成

#:

.,.+5!

等待之后输入sort-u,回车,完成操作

#.表示当前行,.+5当然就是当前行向后数5行

----------------------------------------

#多文档操作(基础)

#译注:

用:

ls!

可以显示出当前所有的buffer

:

bn          :

跳转到下一个buffer

:

bp          :

跳转到上一个buffer

:

wn          :

存盘当前文件并跳转到下一个(又是“超级……”,ft!

:

wp          :

存盘当前文件并跳转到上一个

:

bd          :

把这个文件从buffer列表中做掉

:

bun        :

卸掉buffer(关闭这个buffer的窗口但是不把它从列表中做掉)

:

baddfile.c    :

把文件file.c添加到buffer列表

:

b3        :

跳到第3个buffer

:

bmain      :

跳到一个名字中包含main的buffer,例如main.c

            :

(ultra,这个怎么翻译?

:

()

:

savphp.html  :

把当前文件存为php.html并打开php.html

:

sav!

%换一个后缀保存

:

e!

          :

返回到修改之前的文件(修改之后没有存盘)

:

w/path/%    :

把文件存到一个地儿

:

e#        :

编辑标记为#的buffer(这个buffer必须含有一个可编辑的文件)

            :

用ls命令就能看到哪一个buffer有#

            :

%a表示当前正在编辑的buffer

            :

u表示不能编辑或者已经被做掉的buffer

:

e#3        :

编辑编号为3的buffer(这个buffer必须含有一个可编辑的文件)

:

rew        :

回到第一个可编辑的文件

:

brew        :

回到第一个buffer

:

spfred.txt    :

在一个水平分割的窗口中打开文件fred.txt

#译注:

vsfred.txt可以实现垂直分割

:

sball        :

把当前所有含有可编辑文件的buffer显示到一个分割窗口中

            :

(偶该考虑把super翻译成高级指令了,ft)

:

map  :

ls:

e#:

在normal模式下按F5键,则会显示所有含有一个

            :

可编辑文件的buffer,然后提示你输入buffer的序号,

            :

输入后回车,则编辑这个buffer

#译注:

这是一个键盘绑定

:

sethidden    :

允许不保存buffer而切换buffer(w/o=without)

----------------------------------------

#在分割窗口中快速切换

:

map  j_

#译注:

原文此处有误,前面应该加上冒号

#这是一个键盘绑定,把Ctrl-J定义成切换到下一个窗口并最大化

:

map  k_

----------------------------------------

#命令录制(最佳技巧,ft)

qq  #录制到q

...#输入一系列复杂的指令

q  #再次按q停止录制

@q  #执行q中存储的指令

@@  #重复执行

#编辑register/录制

"ap#把registera中的内容贴到当前位置

...#现在你可以修改它了

"add#删除之,重新存入registera

@a  #执行registera中的指令

----------------------------------------

#_vimrc基础

:

setincsearch                :

实时匹配你输入的内容

:

setwildignore=*.o,*.obj,*.bak,*.exe:

tab键的自动完成现在会忽略这些

:

setshiftwidth=4              :

现在自动缩进将是4个字符

#译注:

一个tab位通常是8个字符

#所以,我们还要设定:

settabstop=4,这样,所有的缩进都是4字符了

#emacs默认就是4字符缩进吧?

:

setvbt_vb=".                :

沉默方式(不要叫beep!

----------------------------------------

#加载windowsiexplorer来浏览(我想这只有在windows下用gvim才能用到)

:

nmap,f:

update:

silent!

startc:

\progra~1\intern~1\iexplore.exefile:

//%:

p

#译释:

nmap是做一个normal模式下的键盘绑定

#这里绑定了一个逗号命令,f

#:

update是写这个文件,与:

w不同,它只有当文件被修改了的时候才写

#:

silent别让弹出窗口报告执行结果

#!

...后面就是执行windows命令了。

呵呵,去问billgates什么意思吧。

#不过偶用gvim6.1试过了,好用!

:

nmap,i:

update:

!

startc:

\progra~1\intern~1\iexplore.exe

----------------------------------------

#用VIM编辑ftp文件

:

cmap,r  :

Nreadftp:

//209.51.134.122/public_html/index.html

:

cmap,w  :

Nwriteftp:

//209.51.134.122/public_html/index.html

#译注:

原文丢失了开头的冒号

#cmap是命令(command)模式绑定

gvimftp:

//209.51.134.122/public_html/index.html

#这一句就是开始编辑一个ftp远端的文件,ft

----------------------------------------

#附加到一个register(就是用大写的register名字啦!

"a5yy#复制5行到a中

10j  #下移10行

"A5yy#再添加5行到a中

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 英语

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1