基本文件操作
-
打开文件::e
-
保存文件::w
-
保存并退出::wq或者:x
-
另存为::sav
-
关闭文件(但不退出vim)::bd(参见笔记 buffer-related operations in vim )
-
退出vim::q
-
打开光标处的文件: gf
参考笔记 Vim的文件浏览
界面与显示
-
修改界面配色风格::colo evening (colo是colorscheme的简写,evening风格在gVim上比较好,ron风格在vim console上效果好)
-
是否折行::set wrap/nowrap
-
开/关行号::set nu/:set nonu (number和nonumber的简写)
-
开/关语法高亮::syntax on/off
-
显示/隐藏制表符(tab)和结尾符号::set list/nolist,tab显示为^I,结尾符显示为$,空格仍显示为空;
-
刷新屏幕:Ctrl+L
-
vim console的界面提示语句中如果有中文,则Windows命令行窗口的代码页必须设置为GBK(cp936),否则vim console的中文提示信息会变为乱码。
-
关闭搜索结果的高亮显示::noh(nohlsearch的简写);
gvim相关选项
-
隐藏所有界面组件::set go= (go是guioptions的简写)
-
显示水平滚动条::set go+=b
-
显示垂直滚动条::set go+=r
-
显示菜单栏::set go+=m
-
显示工具栏::set go+=T
-
更多guioptions相关定制选项见:h guioptions
定制界面字体/字号
gVim (gvim.exe)
界面菜单方式:在字体/字号菜单中选择::set guifont=*
命令方式: :set guifont=Consolas:h13
查询当前使用的字体/字号::set guifont
vim console ( vim.exe on Windows or vi on Linux)
由于 vim console使用操作系统的命令行窗口,可以通过修改命令行窗口(ConEmu on Windows or Terminator on Linux)属性中字体和字号的方法达到改变的目的,但由于Windows的GBK代码页中只提供点阵和新宋体两种字体,都不好看,当平常简单的文本查看和编辑工具的话,建议使用gVim,如果一定要用vim console,可以用ConEmu之类的命令行增强工具改变字体;
打开(修改)vim启动配置文件
以下方法可以用全局书签来代替(2013-8-13更新) :e \(MYVIMRC(或\)myvimrc)或者主菜单【编辑->启动设定】 (用于gVim)
:so % 修改完_vimrc后无需重启vim即可让新_vimrc生效,_vimrc里有函数时此方法无效
以上只对gVim有效,在Ubuntu上全局配置文件为/etc/vim/vimrc,但最好不要改它,因为即使改了之后要生效也得重启系统,而且影响其他用户的配置,比较好的方法是在用户$HOME下新建一个.vimrc文件,写上用户自己定制的特性,修改.vimrc后即刻生效。
光标移动
参考笔记“ Cursor move in vi”;
文档查找(相当于windows下的ctrl+f)
行内查找
-
f/F:向前查找/向后查找;
-
t/T:跳转到查找目标的前一个字符(主要与d,c等编辑指令配合使用);
-
分号(;):重复最近一次查找;逗号(,):撤销最后一次查找;
跨行查找
/searched string
-
match case: option 1:/searched string \c ;option 2:using "set ic/noic" command to switch between ignore/match case(ic means igore case);
-
match whole word only: \<匹配词首,>匹配词尾,所以全字匹配就是\<searched string>;
-
search & replace word under the cursor: 光标置于要查找的单词上,"*"标出所有相同单词,ciw替换单词(参考Search and replace the word under the cursor)
-
incremental search: set incsearch
文本替换
- 将光标下的单词替换为剪贴板里的单词:viwp,其中viw是选中一个词,p是粘贴;
:%s/four/4/g,"%"这个范围意为对所有行执行该命令,"g"标志则指示替换操作将一行中所有出现的目标字串都进行替换; 不过如果你的文件里面有"thirtyfour"这样的词, 结果就不是你想要的了, 它将会被替换为"thirty4". 要避免这种例外. 可以在要替换的目标字前面加上"\<", 它匹配一个word的起始位置::%s/\<four/4/g; 但是碰到"fourty"这样的词还是会弄错. ">"可以用来指示一个word的结束位置::%s/\<four>/4/g; 如果你是在写程序,你可能只想替换那些出现在注释中的"four",代码中的留下,这可有点为难,"c"标志可以让每个目标被替换之前询问你的意见::%s/\<four>/4/gc;
文本查找和替换的更多功能见笔记"用vim注释多行代码"和http://vim.wikia.com/wiki/Search_and_replace。
Copy/Paste
Vim中的y,d,p(拷贝yank,剪切,粘贴)放在了自己独有的一个剪贴板上,与windows的公用剪贴板不同,如果要将拷贝内容放入windows剪贴板,在拷贝命令前加"+("*表示VIM自己的剪贴板),例如"+yl00j就是将100行文本拷贝到windows剪贴板,vim剪贴板的使用方法见笔记 Vim的剪贴板操作 。
若想y, p的时候直接放在windows剪贴板上,只要在_vimrc里加一句:set clipboard+=unnamed(将无名寄存器与windows的+寄存器连接)就可以了(只在Windows上有效)。
拷贝/剪切一整行:yy/dd
光标前/后粘贴文本:P/p
从外部粘贴文本时防止缩进递增
用set noai
关闭自动缩进,粘贴,然后set ai
复原;
或者粘贴之后,选中要重排的段落然后用等号("=")自动设置缩进;
VIM的操作方式
动作命令+位移,例如拷贝光标下的一个字符:yl(l表示向右移动一个字符);拷贝从光标开始的100行文本:y100j。其中y代表拷贝,j是向下移动一行,100j就是向下移动100行。
-
窗口(视图)和标签页的更多说明见笔记“ VIM的窗口和标签页操作 ”; * 与多个buffer相关的操作见“ buffer-related operations in vim ”。
-
命令的自动补全: 输入前面的字符后按tab;
-
显示/隐藏非ASCII码字符::set list/nolist
-
Visual模式:类似于windows的“先选择再操作”的方式,先hjkl或者其他光标移动键或者鼠标选择一个范围,再执行一个命令,如删除d,拷贝y等;v进入普通选择模式,V进入行选择模式,Ctrl+Q或者Ctrl+V进入列选择模式;
-
列模式:见“ 用vim注释多行代码 ”;
改变备份文件和swp文件的目录
vim打开一个文件(例如file.txt)后会生成一个file.txt.swap文件,非正常退出VIM(没有保存文件)时可以用这个文件恢复,修改前的文件被另存为file.txt~,这两个文件都很有用,但默认是放在file.txt所在目录下,看上去比较杂乱,下面的指令将这两个文件放在temp文件夹下以解决这个问题:
set directory=C:\Windows\Temp
set backupdir=C:\Windows\Temp
可以用set nobakupfile和set noswapfile不让这两个文件生成,但不建议这样做。
转换目标文件的行结束符格式
确定采用 dos 还是 unix 格式的行结束符。
-
查询::set ff? (ff是fileformat的简写)
-
改变dos格式文件为unix格式::set ff=unix (shell下运行DOS格式文件会出现“/bin/sh^M: bad interpreter...”错误)
设置新建文件的 dos/unix 格式
-
设置默认格式为 unix:在 .vimrc 中 加入
set ffs=unix,dos
-
设置默认格式为 dos:在 .vimrc 中 加入
set ffs=dos,unix
制表符(tab)相关的配置
包括下面4个参数:
set autoindent "设置自动缩进,缩写为ai
set tabstop=4 " tab的宽度是4个空格,缩写为ts
set shiftwidth=4 " 使用>>时缩进的空格数,缩写为sw,>>是在标准状态下缩进,而用tab需要来回在标准和insert模式间切换;
set expandtab " tab转换为空格,缩写为et
将缩进设为4个空格是许多编程语言(如Java)的习惯。双引号(")是vim脚本中的注释(comment)符号
将行首缩进为tab的文本内容替换为空格的命令(即untabify indent)是":retab"(需要先set expandtab);
Normal模式下的常用编辑指令
-
光标前/后插入:i/a
-
光标所在行的行首/尾插入:I/A
-
光标的上/下一行插入:O/o
-
删除单个字符:x
-
替换单个字符:r(替换后仍然是normal模式,而不像s进入插入模式)
-
进入覆盖模式:R
-
删除光标所在字符并进入插入模式:s 参考A Tale of Two (Vim) Commands: "s" and "c"
-
删除光标所在行并进入插入模式:S
-
进入字符选择(visual)模式:v
-
进入行选择模式:V
-
使用书签:参考笔记“ Note about marks in vi ”;
-
自动缩进(auto indent):= 已验证对Java, C, XML文件有效,不同于“自动格式化 auto format”,后者可以将在同一行上的代码重排到多行并缩进;
-
缩进与反缩进(indent/unindent):>、<(详见:help shift-left-right)
-
重复上一次操作:.(参考http://www.viemu.com/a-why-vi-vim.html)
-
选中光标所在单词:*
-
移动光标到行首/尾:0/$
-
移动光标到匹配括号处:%
-
大小写变换:将
范围内的文字转换为大/小写,gU/u/~ ,例如:gUw将光标开始处的一个单词转换为大写,gu$将光标开始到行尾文字转换为小写,"~"表示大小写切换,例如g~w表示将光标开始处的单词大小写对换;单个的~表示切换光标下字母大小写;
c键
删除指定范围(如一个词,一句话,一段)并进入插入模式,例如ciw将删除光标所在词并进入插入模式,其中i表示inner,即不包括单词旁边的空格、括号、引号等,w表示范围是word,cas将删除整句(s: sentence)以及周围的分隔符(a表示含分隔符),还可以简写为cw,详见The Power and Precision of Vim's Text Objects: Efficient, Elegant, Awesome。
c键后面还可以跟光标移动指令,例如cft删除的范围是从光标到t字符出现的地方,c2w删除光标开始处的两个word。
C键删除从光标到行尾并进入插入状态。
如果使用v键进入visual模式选中文本,则c键与s键的功能一样,都是删掉选中的文本然后进入插入模式。
路径相关操作
-
设置vim的启动路径:配置文件_vimrc里加上"cd <当前路径>",例如:cd e:\MyDoc\MobileBook;
-
显示当前路径:":pwd"
-
改变当前路径:":lcd <目标路径>"
与Shell交互
-
执行系统命令::!
,例如列出当前文件夹下文件::!ls;又如在vim中运行"ruby <当前文件>"写为:":!ruby %",参见笔记 Use VIM as lightweight IDE ; -
将系统命令的输出插入到当前buffer中:!!
-
临时进入shell: :sh,返回vi: C-d
Autocomplete
C-n, or C-p