04-06) 制表符TAB
> 输入此命令则光标所在行向右移动一个 tab.
5>> 输入此命令则光标后 5 行向右移动一个 tab.
:12,24> 此命令将12行到14行的数据都向右移动一个 tab.
:12,24>> 此命令将12行到14行的数据都向右移动两个 tab.
那么如何定义 tab 的大小呢? 有人愿意使用 8 个空格位, 有人用4个, 有的用2个.有的人希望 tab 完全用空格代替, 也有的人希望 tab 就是tab. 没关系, vim 能帮助你.以下的设置一般也都先写入配置文件中, 免得老敲.
:set shiftwidth=4 设置自动缩进 4 个空格, 当然要设自动缩进先.
:set sts=4 即设置 softtabstop 为 4. 输入 tab 后就跳了 4 格.
:set tabstop=4 实际的 tab 即为 4 个空格, 而不是缺省的 8 个.
:set expandtab 在输入 tab 后, vim 用恰当的空格来填充这个 tab.
文件格式自动匹配autocmd 这个命令十分的强大, 可以用这个命令实现对不同的文件格式应用不同的配置; 可以在新建文件时自动添加上版权声明等等. 这些命令一般定义在 ~/.vimrc 这样的配置文件里面. 由于他很强大, 所以我不能给出很具体的说明, 只能举几个例子, 详细的请看帮助.
:autocmd! 删除所有之前的自动命令.
autocmd FileType java source ~/.vim/files/java.vim
autocmd FileType java source ~/.vim/files/jcommenter.vim
以上两条命令让我在打开 java 文件时才应用后面提到的两个配置文件.
autocmd BufNewFile *.java 0r ~/.vim/files/skeletons/java.skel
以上这条命令让我在新建java 文件时自动加入 java.skel 文件的内容.
autocmd BufNewFile *.java normal gnp 以上这条命令让我在新建java 文件时自动运行 gnp 命令, 这个命令进行一些特殊化处理, 比如将新 java 文件中的 __date__ 替换成今天的日期什么的.
04-07) 视图模式下注释整块内容
C-v> 选定要注释掉的行
列块选定后I是在前边都插入,A是在后边都插入
之后输入的东西就是插入到选定的行前边(后边)的,直至Esc.
删除整块的注释时,
C-v> 选定整块的注释//, 再按d删除
v选定范围后= 对选定范围内自动格式(适用于编程)
04-08) 寄存器操作
Vim可以将不同字段剪切或复制到不同寄存器中,您可以从不同寄存器中取出内容后粘贴
" 按下 " 键和另一个字符键,便可以定义一个寄存器。例如:
"a "1
定义寄存器后直接进行操作
"ayy 将当前行复制到寄存器 a 中
"ap 将寄存器 a 中的内容粘贴到光标之后
"ayy "ayy复制当前行(整行)到寄存器a中
"AY "Ayy追加当前行到寄存器a中
3"Ayy 追加3行到寄存器a中
"Ay3j 追加3行到寄存器a中(同上)
5"ayy 复制五行内容至寄存器a。
5"Ayy 再复制五行附在寄存器a内容之后,现在寄存器a中有十行内容了!
* 通常情况下,寄存器 + ( " + Shift+= )对应X下的剪贴板。您在其它程序中复制的内容,可以使用 "+p 粘贴到Vim中;
您在Vim中,可以使用 "+y 将内容复制到剪贴板,再粘贴到其它程序中
* 没有指定寄存器时,Vim使用“无名寄存器”存储内容
使用撤销分支功能
可以使用 :undolist 命令查看缓冲区存在的撤销分支列表。而通过 :undo <> 命令则能够移到撤销的某个分支。
寄存器的主要有以下几种:
a. The unnamed register ""
"d", "c", "s", "x" 和 "y" 等涉及删除或拷贝的命令都会将内容存放于此(有例外)。
b. 10 numbered registers "0 to "9
0 为最近拷贝的内容,1-9 为最近删除的内容。
指定 named register 时不会存放于此。
c. The small delete register "-
删除不多于一行的内容会存在于此。
d. 26 named registers "a to "z or "A to "Z
小写与大写的区别是,小写是覆盖方式,大写是添加方式。
e. four read-only registers ":, "., "% and "#
". 存放上次插入的文本
有什么用?呵,例如,你输入了一段文本,在另一个地方也要有相同的内容,你输完后,一般要选择并复制一下吧?而用这个,直接移到需要插入的地方,i. 即可。
"% 是当前编辑文件全名,vim 中,% 就是代表当前编辑文件名的变量,不过,一般直接用 % 就行,例如":!cat %",vim 会自动扩展。
"# 是alternate file 名称 (这个我不知道)
": 上次执行的命令,记起来比较容易,冒号就是命令行提示符嘛。这个有些什么用呢?在测试配置文件时十分有用,先在命令行输入命令,调试好后,在 insert mode 里按C-R : 就可将该命令插到文件中。
f. the expression register "=
表达式寄存器,可以输入一个表达式,并插入结果。
g. The selection and drop registers "*, "+ and "~
跟 gui 即 X/Windows 剪贴板有关的变量。
在 X 中,鼠标中键与系统剪贴板不一样,至于区别,大家自己试验一下,这里给个提示,在命令行下输入 reg 可以列出所有寄存器的内容。
h. The black hole register "_
黑洞
i. Last search pattern register "/
上次搜索的内容。例如,我要搜索一个单词 linuxforum,但我比较懒,先输入 /linux,发现出现很多个 linux,多次按 n 无果,难道要重新输入 /linuxforum ? 不用,只需要 //forum 即可。呵,聪明的你一定想到了,用命令行历史也可以调来,按 C-p 或 C-n即可上下翻阅。这样也可以嘛,也比较快捷,但要查找 forumlinux 呢?
用 C-r 的话只需 /forum/ 。
在使用X Window系统时,有两个特殊的寄存器是需要注意一下的:”"*”访问的寄存器是X的主选择区域
(primary selection),”"+”访问的寄存器是X的剪贴板(clipboard)。
=====================================
存入寄存器:
1)在visual模式下,输入:”寄存器y”
2)录制的时候:输入:“q{regsiter}”,使用:在normal模式下,按“@{regsiter}”
================================
调用寄存器:
在插入模式里,按C+r,再按寄存器名,如调用寄存器a:
C+r,a就可以了。
======================================
vim常用的寄存器:
‘”‘ 无名寄存器,包含最近删除或抽出的文本
‘%’ 当前文件名
‘#’ 轮换文件名
‘*’ 剪贴板内容 (X11: 主选择)
‘+’ 剪贴板内容
‘/’ 最近的搜索模式
‘:’ 最近的命令行
‘.’ 最近插入的文本
‘-’ 最近的行内 (少于一行) 删除
‘=’ 表达式寄存器;你会被提示输入一个表达式
==============================================
04-09) 自定义的标记
m{mark} 用{mark} 标记当前的光标位置。你可以在文本中使用 26 个标记(a到z)。这些标记是不可见的,只
是一个由 Vim 记住的位置。
打开了多个文件时,可以用A-Z来标记不同文件的不同标记,在不同的文件中跳转。
`{mark} {mark} 是指定义标记的那个字母。所以,移到标记a的命令是: 'a
'mark (单引号加上一个标记)会移到标记所在行的行首
:marks 显示标记列表
`` 跳转之前的位置
'' 跳转之前的位置的行首
使用宏来做一些重复工作
q{mark}:使用q键然后跟一个a–z键,就可以开始记录键盘动作。
q:在记录键盘动作开始之后,再次按下q键,就停止记录。
@{mark}:使用@键然后跟一个a–z的字母,就会触发你刚才的记录的键盘动作。
@@:键入连续两个@@就可以重复上次的宏。
vim_gcc(help quickfix)在vim编辑器中进入编译程序
:set makeprg=gcc\ -Wall\ -otest\ test.c\ -std=c99\ -g
使用\是对空格进行转义
:make vim自动按照makeprg选项定义的进行编译,并把编译输出重定向到一个临时文件中,当编译出错时,vim会从上述临时文件中读出错误信息,形成quickfix列表,并跳转到第一个错误地方。
quickfix模式常用命令:
:cc 显示详细错误信息
:cp 跳到上一个错误
:cn 跳到下一个错误
:cl 列出所有错误
:cw 如果有错误列表则打开quickfix窗口
:cold 到前一个较旧的错误列表
:cnew 到后一个较新的错误列表
05) SourceInstall:::::::::::::::::::::::::::::::::::::::::::::::::::::::
tar xjvf /mnt/sda5d/Linux/Software/vim-7.3.tar.bz2 -C /tmp
cd /tmp/vim-7.3/
./configure --prefix=/usr/local/vim73 --enable-cscope --enable-tclinterp --enable-rubyinterp --enable-sniff --enable-multibyte --enable-hangulinput --enable-gnome-check
make && make install
用户自定义配置~/.vimrc
filetype plugin on
filetype indent on
syntax on
set number
"set fileencodings=utf8,gb18030,gbk,gb2312,latin1,ucs-bom,default
set fileencodings=utf8,gb18030,gbk,gb2312,latin1,ucs-bom,default
用vim编辑远程文件:
vim ftp://love@192.168.135.2/sda5d/fglrx-install.log
REMOTE EDITING
:e dav://machine[:port]/path uses cadaver
:e fetch://[user@]machine/path uses fetch
:e ftp://[user@]machine[[:#]port]/path uses ftp autodetects :e http://[user@]machine/path uses http uses wget
:e rcp://[user@]machine/path uses rcp
:e rsync://[user@]machine[:port]/path uses rsync
:e scp://[user@]machine[[:#]port]//path/file uses scp
:e sftp://[user@]machine/path uses sftp
REMOTE READING
:Nread ? give help
:Nread "machine:path" uses rcp
:Nread "machine path" uses ftp with :Nread "machine id password path" uses ftp
:Nread "dav://machine[:port]/path" uses cadaver
:Nread "fetch://[user@]machine/path" uses fetch
:Nread "ftp://[user@]machine[[:#]port]/path" uses ftp autodetects :Nread "http://[user@]machine/path" uses http uses wget
:Nread "rcp://[user@]machine/path" uses rcp
:Nread "rsync://[user@]machine[:port]/path" uses rsync
:Nread "scp://[user@]machine[[:#]port]/path" uses scp
:Nread "sftp://[user@]machine/path" uses sftp
REMOTE WRITING
:Nwrite ? give help
:Nwrite "machine:path" uses rcp
:Nwrite "machine path" uses ftp with :Nwrite "machine id password path" uses ftp
:Nwrite "dav://machine[:port]/path" uses cadaver
:Nwrite "ftp://[user@]machine[[:#]port]/path" uses ftp autodetects :Nwrite "rcp://[user@]machine/path" uses rcp
:Nwrite "rsync://[user@]machine[:port]/path" uses rsync
:Nwrite "scp://[user@]machine[[:#]port]/path" uses scp
:Nwrite "sftp://[user@]machine/path" uses sftp
http: not supported!
REMOTE DIRECTORY BROWSING
:e [protocol]://[user]@hostname/path/
:Nread [protocol]://[user]@hostname/path/
LOCAL DIRECTORY BROWSING
:e /some/path/to/a/directory
06) 从2011-07开始转向使用emacs编辑器,vim只在修改服务配置文件时使用。其它如编辑学习文档或者脚本编程时使用emacs。