vi学习

vmware 8.0下安装了ubuntu-10.04-desktop-i386[d044a2a0c8103fc3e5b7e18b0f7de1c8].iso

新装的vi太精简,给~/.vimrc新增如下:

"backspace键删除前一个字符
set nocompatible

"设置制表符宽度 tabstop
set ts=4

"设置行首缩进宽度 shiftwidth
set sw=4

"输入tab时自动转化为空格 expandtab
set et

"显示行号
set number #缩写为 set nu

"高亮当前行
set cursorline #缩写为cul

"高亮当前列 cursorcolumn
set cuc

"搜索高亮 high light search
set hls

"搜索是忽略大小写
set ignorecase 

"将文件格式转换为unix(dos)
set fileformat=unix

"自动对齐autoindent (继承前一行的缩进方式)
set ai

"高亮显示匹配的括号
set showmatch

"在搜索时,输入的词句的逐字符高亮(类似firefox的搜索)
set incsearch

"清除\r,类似%s/\r//g
set fileformat=unxi

"新建.c文件时,自动插入模板(读入$VIM\cfile.tpl的内容)
autocmd BufNewFile *.c r $VIM\cfile.tpl

"与系统共享剪贴板
set clipboard+=unnamed

"整词换行
set linebreak

"总是显示状态行set laststatus
set ls=2

"换行符,制表符可见模式
set list

## 命令模式下的快捷键:

# 合并行 J
将光标所在行的下一行移动到该行,再并将光标移动到行尾



相关参考:
http://blog.csdn.net/macrocrazier/article/details/6404267
http://blog.163.com/goldman2000@126/blog/static/1672968952012317105325654/

#显示当前正在编辑的文件5种方法
冒号模式下:file(简写为:f)或者:ls或者:set ls=2 或者:echo %@
阅读模式下 ctrl + g

#另存为
:saveas xxx

#将当前文件保持为html文件(a.c文件另存为a.c.html)
:TOhtml

# 打开配置文件
:edit $MYVIMRC

#制表符,换行符 可见
:set list

#列出所有选项设置情况
:set all

#向后搜索xxx # n为跳到下一个搜索关键字
:/xxx

#向前搜索xxx
:?xxx

#替换字符
:s/xxx/yyy             #将当前行的第一个xxx替换为yyy
:1,10s/xxx/yyy       #将1~10行中没行的第一个xxx字符替换为yyy
:10,$s/xxx/yyy/g    #将10~最后一行的所有xxx字符替换为yyy
:%s/xxx/yyy/g       #将该文件所有的xxx字符替换为yyy,%表示所有行

#  全局替换,模式支持正则
:g/xxx/s/yyy/zzz/g    匹配包含xxx的行,把其中的yyy替换成zzz
:%/xxx/s/yyy/zzz/g     同上
# 显示所有xxx字符
:g/xxx/p

#给文件加密,要取消时,在等待输入密码时直接输入回车即可
:X

#同时打开两个文件,上下分栏显示
vi -o a.c b.c          #左右分栏显示为 -O

#插入模式下的宏替换
:ab aazz abcdefghigklmnopqrstuvwxyz
:map <C-1> !abc 


一些技巧
#交换光标所在字符和其后的字符
xp
#交换光标所在行和其后的行
ddp
#选中所有行
ggVG
#向上移动9行
9k
#格式化当前文件
gg=G
格式化当前光标接下来的8行  
8==
#删除所有行
dG
#上下两行合并
J
#显示总行数
:=

guu 行小写
gUU 行大写
g~~ 行翻转(当然指大小写啦)
guw 字小写(狭义字)
gUw 字大写(狭义字)
g~w 字翻转(狭义字)
vEU 字大写(广义字)
vE~ 字翻转(广义字)
ggguG 把整个文章全部小写(ft!bt!)

阅读模式下的几个常用命令
e  往右跳到光标所在单词尾部
w  往右跳到光标所在单词首部
b  往左调到光标单词的首部
ctrl+u 往下滚动半屏
ctrl+d 往上滚动半屏
(  移动光标到其所在句子的首部
)  ..................尾部
{  移动光标到其所在段落的首部
}  ..................尾部
[n]G  移动第n行首部
cc 光标所在行替换为空行并等待输入数据
A  光标移动到行尾,并等待输入数据
~  对光标右边的字符大小写转换,并将光标右移1个字符

编辑模式下的几个命令
:1,5 co 12     # 将1~5行复制到第12行
:1,5mo12       # .......移动.......


#查看当前vim的版本(含有vimrc文件,gvimrc文件,exrc文件路径)
:version #缩写为:ver
#查看vim环境变量
:!env #windows 下为!set 
#同时打开两个文件, 水平方向
vi -o a.c b.c 

#同时打开两个文件, 垂直方向
vi -O a.c b.c 


#为F4添加作者信息
map <F4> ms:call TitleDet()<cr>'s
function AddTitle()
    call append(0,"##############################################")
    call append(1,"#")
    call append(2,"#Author: wangshenghui - [email protected]")
    call append(3,"#")
    call append(4,"#QQ:417685417")
    call append(5,"#")
    call append(6,"#Last modified: ".strftime("%Y-%m-%d %H:%M"))
    call append(7,"#")
    call append(8,"#Filename: ".expand("%:t"))
    call append(9,"#")
    call append(10,"#Description: ")
    call append(11,"##############################################")
    call append(12,"#!/bin/bash")
    echohl WarningMsg | echo "Successful in adding the copyright." | echohl None
endfunction
#修改文件修改时间和文件名
function UpdateTitle()
    normal m'
    execute '/#*Last modified:/s@:.*$@\=strftime(":%Y-%m-%d %H:%M")@'
    normal ''
    normal mk
    execute '/#*Filename:/s@:.*$@\=":".expand("%:t")@'
    execute "noh"
    normal 'k
    echohl WarningMsg | echo "Successful in updating the copy right." | echohl None
endfunction
#判断如果前10行中如果有Last modified:字段
#如果没有的话,则代表没有添加过作者的信息等条件,则重新添加
#如果有的话,那么只更新修改时间和文件名
function TitleDet()
    let n=1
    while n < 10
        let line = getline(n)
        if line =~ '^\#\s*\S*Last\smodified:\S*.*$'
            call UpdateTitle()
            return
        endif
        let n = n + 1
    endwhile
    call AddTitle()
endfunction


H 光标跳到屏幕首行
M .... 中间行
L  ............ 尾行
`` 光标移动上次位置

详细了解vi,可参看Learning the vi and Vim Editors.pdf

你可能感兴趣的:(vi学习)