ZZ:退出并保存
e!:退回到上次保存时的样子
cw:修改单词(自动进入插入模式)
cc:修改一整行的内容
cs:修改一个词(自动进入插入模式)
.:可以重复上一个命令
EX命令
EX命令的逻辑是 将命令作用与指定的地址,有些命令只有源地址参数,而有些命令则由目的地址参数。
EX命令:
t/co:复制行(有目的地址)
nu:显示行号
#:显示行号
EX定位行的方法
绝对方式: a. "."表示当前行,为默认值,如果没有显示指定则为默认行(相当于有一个".")
b. "$"最后一行
c. "0"第一行之前
d. "num"第num行
e. /pattern/模式匹配出现的第一次所在行
相对方式:a. [一个绝对行号]+[num] 如果没有”绝对行号“则相对于当前行, 如果没有num则为1 ,绝对行后面的第num行
b. [一个绝对行号]-[num] 如果没有”绝对行号“则相对于当前行, 如果没有num则为1 ,绝对行前面的第num行
相对地址和绝对地址组合构成各式各样的地址和地址范围
例如命令:
:1,20 s/awk/sed/g
:/^luo/,/^lcm/s/awk/sed/g 将"luo"开头的行到"lcm"开头的行中的所有行做替换操作
:g/^luo/s/awk/sed/g 将所有以luo开始的行执行替换操作
:= ->列出总行数
:.= ->列出当前行
:/pattern/= ->列出第一次匹配的行号
有些时候,希望后续地址是针对前序匹配的地址进行偏移,则使用分号表示地址分隔符,例如:
(当前光标在120行) 则 100,+20 表示的是100,140行的范围
而 100;+20则表示100,120的访问
g表示 定位范围内的所有匹配的 ,g!相反 。如果没有g则表示是第一次出现。
可以用‘|’合并多个命令,后续命令作用在前序命名的结果之上。
":x"与":wq"命令的差别,前者只有文件有改变是才写人,而后者无条件写人。
:w file_name -> saveas file_name ->另存为
:范围 w file_name -> 将范围内的内容保存到新文件
:w >> file_name ->将当前文件内容追加到新文件中
:地址 r file_name ->将文件读到当前文件的地址之下
操作多个文件
在命令行加多个文件名作为参数,打开多个文件,视图位于第一个文件,
使用命令“:ar[gs]”可以查看打开的文件列表,由"[]"包括的文件名,是真正编辑的文件。
通过:n,ctrl+^切换文件。
“rew"切换到第一个文件
”last“切换到最后一个文件。
:e! ->加载最后一次保存的文件
%:代表当前的文件名称
#:代表候补的文件名称
用":e"命令加载新文件时,不会清除命名缓冲区的内容。
:ya ->将内容拖入缓冲
:pu ->将内容从缓冲复制到文件。
:g/pattern/s/old/new/g:在满足模式的行做替换操作(第一个g表示作用于所有模式匹配的行,第二个g表示作用于匹配行里面的所有匹配old的地方)。
:g/pattern/s//new/g将匹配的行的内容替换成new s后面的“//"表示之前匹配的内容
替换串(new) 中的特殊字符含义
\n: 代表捕获
&:代表匹配的串
~:代表上一次替换时,用来替换的串
\u:将后接的字符变成大写
\U:将后接的字符串变成大写
\l:将后接的字符变成小写
\L:将后接的字符串变成小写
&:重复上一次执行的替换操作
选项设置
1.vi首先从terminfo数据库读取当前终端的配置信息
2.vi 打开之前首先执行环境变量EXINIT中的命令,然后是家目录的".exrc"文件中的命令。
3.":set"命令支持两类选项设置
a. :set option / set nooption (打开或关闭某个选项)
b. :set option=数字或字符串
4.":set all"显示所有选项的当前设置值
":set"显示特殊设置值
":set option?"查看某个选项当前的设置值。
.exrc文件
1.在.exrc中的命令不需要加前导":"号。
2.要使本地.exrc文件生效,需要在家目录的.exrc中设置命令"set exrc"
3.可以将命令写入其他任何文件,然后用命令":so 文件名"将该文件的设置在vi中生效。
使用unix命令
1. :!:产生一个子sh后面跟命令
2. :sh 打开一个shell连续执行命令,ctrl+d返回vim
3. :[linenum]r !command 将命令结果插入到 linenum下
4. :[linenum]r file 将文件内容读入到linenum下
//将文件中的内容作为命令的输入,命令输出将覆盖文件当前的内容
5. :[linenum1,linenum2] !cmd
6. vi的方式 不用冒号 [replay times]![文本行范围定位命令] unix命令
7.在vi中可以设置缩写(在插入模式输入缩写,在按下非字母键时会补全)
:ab 查看当前定义的所有缩写
:ab lcm luo cai min
//将"luo cai min"设置成缩写串 lcm
:unab lcm 取消缩写
8.设置命令缩写
:map shortcmd cmd cmd cmd //在命令里面出现的功能键需要先按ctrl+v再输入
map rd :r !date +'\%Y\%m\%d'<CR>^ywI/* luocaimin delete begin <Esc>A */<CR>#if 0<CR>#else<CR>#endif<CR><Esc>pI/* luocaimin delete end <Esc>A */<CR>
map ra :r !date +'\%Y\%m\%d'<CR>^ywI/* luocaimin add begin <Esc>A */<CR><Esc>pI/* luocaimin add end <Esc>A */<CR>
map rae :r !date +'\%Y\%m\%d'<CR>I/* luocaimin add end <Esc>A */<CR>
map rab :r !date +'\%Y\%m\%d'<CR>I/* luocaimin add begin <Esc>A */<CR>
map ra :r !date +'\%Y\%m\%d'<CR>^ywI/* luocaimin add begin <Esc>A */<CR><Esc>pI/* luocaimin add end <Esc>A */<CR>
map rd :r !date +'\%Y\%m\%d'<CR>^ywI/* luocaimin delete begin <Esc>A */<CR>#if 0<CR>#else<CR>#endif<CR><Esc>pI/* luocaimin delete end <Esc>A */<CR>
"求当前行代表的公式之和
map lsum yyp:.!bc<CR>I<C-H>i=<Esc>
在单词末尾进入插入模式 :map e ea
对调两个单词 :map K dwwp
保存一个文件并进入下一个文件 :map q :w^M:n^M
注释代码 :map rmk I/* ^[A */^[
9.需要在插入模式中将某个插入值作为命令则需要在map后面加上!
eg:xml tag自动补全
:map! > >^[F<lyf>f>a<\^[p
10. 在编辑模式输入命令串,然后读入命令缓存(通过删除的方式" "gdd "将命令读入命名缓存区g),通过“@命名缓存”来执行命令。“@”会解释为vi命令
11.自动缩排 : ":set autoindent" 的作用是让新行与上一行有相同的缩进。
在自动缩排下输入代码时(插入模式),在行头"ctrl t"将执行下一层缩排,"ctrl d"相反。
"5<<"将包括当前行在内的以下5行向左缩进8个字符的位置 "5>>"相反
:set tabstop=4 设置tab的宽度为4个字符
12: ":set list"显示整个文件的隐藏字符。 ":l"显示当前行的隐藏字符
13:"%"如果没有在括号字符'{([])}'上,会移到本行的向前找到的第一个括号上。
14: ":set showmatch"在输入括号时会高亮显示其匹配的括号。
15:ctags
15.1 ctags -R 从当前目录迭代搜索源文件,并建立tags文件。
15.2 ":set tags=tags文件" 指定tags文件
15.3 ":tag GET_BALANCE" 查找并跳转到GET_BALANCE所在文件和位置 ,":stag tagname"用横屏分页的方式显示符号
15.4 将光标位于符号之上,ctrl+] 跳转到符号所在文件和位置 , ctrl+w+] 用横屏分页的方式显示符号
15.5 ctrl+t 返回到跳转之前的位置
15.6 ":stag[!] tagname" 新窗口打开标签
16: '*'高亮显示光标下的单词并进入搜索模式,'#'高亮显示光标下的单词,并进入反向搜索模式。
17: 'viw'可视模式下选中一个单词
18.自动添加tag(当文件有变化时自动更新tags文件)
autocmd BufWritePost *.cpp,*.c,*.h :!cur_dir=`pwd` && cd ~ && ctags -a %:p && cd -
注 %:p表示带路径的当前文件名
19. 在可视模式下的选中区
19.1 "niw":选中光标下及后面的n个单词,标点号和空字符都算一个单词
19.2 "niW":选中光标下及后面的n个单词,空格算一个单词
19.3 "naw":选中光标下及后面的n个单词,标点算一个单词,空格算分隔符
19.4 "naW":选中光标下及后面的n个单词,标点不算一个单词,空格算分隔符
19.5 "as","is":选中一句话
19.6 "ap","ip": 选择一段话。
vi -o[n] file1 file2
set laststatus=n
set winheight=n
set winwidth=n
ctrl+w+s/v
ctrl+w+h/j/k/l/t/b
ctrl+w+q
ctrl+w+c
:split otherfile
:vsplit otherfile
:new
:[N]sp[lit] ++opt +cmd other
缓冲区
ls:列出缓冲区
ls!:列出包括“非列出缓冲区”的缓冲区
列出的缓冲区信息
缓冲区命令
:windo cmd 在当前可见页的所有窗口中执行命令cmd,如果cmd报错,则停留在报错窗口
:bufdo[!] cmd 在所有缓冲中(包括所有可见和不可见窗口)执行命令cmd,如果cmd报错,则停留在报错窗口
标签:
:tabnew filename
:tabclose/tabc
:tabonly
:tabn
:tabp
:tabd[o]
VIM脚本
所有命令和选项都是脚本的有效输入
标准流控制(if...then....else,while)
具有函数变量等
变量的作用域与变量的名称有关系
根据时间设置配色方案的例子
let curhour = strftime("%H")
echo "curhour is ".curhour
if curhour < 6
let colshm="darkblue"
elseif curhour < 12
let colshm="morning"
elseif curhour < 18
let colshm="shine"
else
let colshm="evening"
endif
echo "setting color scheme to ".colshm
execute "colorscheme ".colshm (colshm是字符串和下面的直接命令选项不同,命令和命令选项可以直接执行,命令和字符串不可直接执行,需要使用execute命令将命令本身识别为字符串,然后在和后续字符串组成命令加选项的字符串执行)
"let curhour = strftime("%H")
"echo "curhour is ".curhour
"if curhour < 6
" let colshm="darkblue"
"elseif curhour < 12
" let colshm="morning"
"elseif curhour < 18
" colorscheme shine
" echo "setting color scheme to shine"
"else
" let colshm="evening"
"endif
定义函数
定义函数:vim使用function funcname(param1,param2,...)...endfunction定义函数(函数名称必须以大写字符开头)
调用函数:call funcname(param1,param2,...)
statusline可以自定义,在statusline发生变化时会重写,所以可以利用这一点,执行需要频繁检查的操作。
重复检查
let g:colorname = "xyzzy"
"根据时间设置配色方案
function Settimeofcolor()
let curhour = strftime("%H")
echo "curhour is ".curhour
if curhour < 6
let colshm="darkblue"
elseif curhour < 12
let colshm="morning"
elseif curhour < 18
let colshm="shine"
else
let colshm="evening"
endif
if g:colorname !~ colshm
echo "setting color scheme to ".colshm
execute "colorscheme ".colshm
endif
endfunction
打开文件后
set statusline+=\%{Settimeofcolor()}
全局数组定义
最终版本
let g:colorname = "xyzzy"
let g:colorarray=["darkblue","morning","shine","evening"]
"根据时间设置配色方案
function Settimeofcolor()
let curhour = strftime("%H")
echo "curhour is ".curhour
let colshm=g:colorarray[curhour/6]
if g:colorname !~ colshm
echo "setting color scheme to ".colshm
execute "colorscheme ".colshm
endif
endfunction
VIM自动命令
'
自动命令格式
"&vim选项":取vim选项的值 eg: &filetype
"exists(变量名或函数名)":检查变量或函数是否已经定义
eg:
if exists("b:iscount")==0
"如果没有定义变量b:iscount则定义并赋值
let b:iscount=0
endif
文件类型自动检测脚本
"定义新自动命令组
augroup newFileDetection
autocmd CursorMovedI * call CheckFileType() "为组添加自动命令
augroup END
function CheckFileType()
if exists("b:countCheck") == 0
let b:countCheck = 0
endifh
let b:countCheck += 1
" Don't start detecting until approx. 20 chars.
if &filetype == "" && b:countCheck > 20 && b:countCheck < 200
filetype detect
" If we’ve exceeded the count threshold (200), OR a filetype has been detected
" delete the autocmd!
elseif b:countCheck >= 200 || &filetype != ""
”如果不需要自动命令,则通过取消组的自动命令来消除其对性能的影响
autocmd! newFileDetection
endif
endfunction
" 删除组 augroup! newFileDetection
function SetCppPreSet()
set cindent
set foldmethod=syntax
set foldlevel=10
set foldcolumn=6
syntax enable
syntax on
set ai
endfunction
autocmd BufReadPost *.cpp,*.h call SetCppPreSet()
保存编辑会话 ":mksession sessionfile_name"
载入会话:":source sessionfile_name"
程序员扩展功能
折叠
':mkview': 在创建了很多折叠的后,保存折叠
':loadview': 加载保存的折叠
文件比较
vimdiff file1 file2
撤销与重做
"U",撤销
"ctrl+R"重做
//set undolevels=n 设置可以重做的深度
在命令模式下(":") ctrl+f,打开历史命令窗口,查找和执行历史命令。
- OpenGL编程指南(第七版)
OpenGL编程指南(第七版) 转自:http://blog.csdn.net/w540982016044/article/details/21287645 在接触OpenGL中,配置显得相当麻烦,特 ...
- 解读经典《C#高级编程》第七版 Page79-93.对象和类型.Chapter3
前言 本篇我们继续讲解本章其余的部分:构造函数.只读字段.匿名类型.结构详解.部分类.静态类.Object类.扩展方法,等. 01 类 构造函数 构造函数是一种特殊的方法: 与类同名 没有返回值,甚至 ...
- 解读经典《C#高级编程》第七版 Page68-79.对象和类型.Chapter3
前言 新年好,本篇开始进入第三章,<对象和类型>,深刻理解C#的对象,对于使用好.Net类库非常重要. 01 类和结构 从使用角度看,结构和类的区别很小,比如,将结构定义转换为类,只需要将 ...
- 解读经典《C#高级编程》第七版 Page50-68.核心C#.Chapter2
前言 本篇讲述Main方法,控制台,注释,预处理指令,编程规范等.这些概念比较琐碎,为避免长篇大论,主要以列举要点的方式来说明. 01 Main方法 Main方法并不是所有应用类型的入口方法,它只是控 ...
- 解读经典《C#高级编程》第七版 Page45-50.核心C#.Chapter2
前言 本篇讲述枚举和名称空间. 01 枚举 首先需要明确枚举的概念:枚举是用户定义的整数类型.使用枚举的目标是,使用一组容易记忆的名称,来使得代码更容易编写和维护. 我们对比枚举的定义和类的定义,会发 ...
- 解读经典《C#高级编程》第七版 Page38-45.核心C#.Chapter2
前言 控制流是语言中最基础的部分,我们不谈具体的细节,只讲讲一些关键和有趣的点. 01 流控制 条件语句:if, else if, else if语句的使用非常值得细讲,如何是好的使用习惯.有一点非常 ...
- 解读经典《C#高级编程》第七版 Page32-38.核心C#.Chapter2
前言 接下来讲讲预定义数据类型.关于数据类型,其实是非常值得透彻研究的. 01 预定义数据类型 值类型和引用类型 C#将把数据类型分为两种,值类型和引用类型,值类型存储在堆栈上,引用类型存储在托管堆上 ...
- 解读经典《C#高级编程》第七版 Page20-32.核心C#.Chapter2
前言 讲到核心C#的语法,其实很难讲,因为大部分是基础知识.如果只讲入门的基础知识,那细节又多,意义也不大.我们就不讲一般性的内容,而是找一些有趣的点,展开讲讲. 01 Hello World Hel ...
- 解读经典-《C#高级编程》第七版-Chapter1-.Net体系结构-Page13-20
01 程序集 程序集是包含编译好的.基于.Net Framework的代码逻辑单元.一般来说,在Visual Studio中的一个项目即一个程序集,而一个项目中包含多种不同的代码文件.程序集分为可执行 ...
随机推荐
- Dos操作基础
dos命令大全 使用技巧 dos命令不区分大小写,比如C盘的Program Files,在dos命令中完全可以用"program files"代替,加上英文引号是因为名称的中间有空 ...
- es6之函数扩展与对象扩展
一.函数扩展 1.参数默认值 参数有默认值,后面不可以再加没有默认值的变量.如以下test函数中,不可以加写成 function test(x,y="word",z){ } fun ...
- 前端使用ajax传到后台的实体类的多个属性,直接用Map接收
前端ajax传过来的数据按照以上方法接收Map中 var ip = $("#ip").val(); var port = $("#port").val(); v ...
- 新建oracle实例
1.安装好ORACLE服务端.2.在开始菜单中,点击ORAHOME目录下的"Configuration and Migration Tools"下的"Database C ...
- 用Java+xml配置方式实现Spring数据事务(编程式事务)
一.用Java配置的方式 1.实体类: Role public class Role { private int id; private String roleName; private String ...
- Spring 通过XML配置装配Bean
使用XML装配Bean需要定义对于的XML,需要引入对应的XML模式(XSD)文件,这些文件会定义配置Spring Bean的一些元素,简单的配置如下: <?xml version=" ...
- HDU 2092 (将表达式变成一元二次方程形式)
传送门: http://acm.hdu.edu.cn/showproblem.php?pid=2092 整数解 Time Limit: 1000/1000 MS (Java/Others) Me ...
- 逍遥云天 微信小程序开发之获取用户手机号码——使用简单php接口demo进行加密数据解密
后边要做一个微信小程序,并要能获取用户微信绑定的手机号码.而小程序开发文档上边提供的获取手机号码的接口(getPhoneNumber())返回的是密文,需要服务器端进行解密,但是官方提供的开发文档一如 ...
- jQuery 属性操作 - addClass() 和 removeClass() 方法
实例 向第一个 p 元素添加一个类: $("button").click(function(){ $("p:first").addClass("int ...
- Linux awk命令用法
概述 awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理 awk工作流程是这样的:读入有'\n'换行符分割的一条记录,然后将记录按指定的域分隔符划分域,填充域,$0 ...