vim
关于vim中字符编码知识(encoding termencoding fileencoding fileencodings),请参考:
http://edyfox.codecarver.org/html/vim_fileencodings_detection.html http://blog.csdn.net/flyqwang/article/details/7107026
如需编辑 fileencodings 之外(其不能自动识别)的文件,则可以使用以下命令 :e ++enc=编码 文件名 查看文件编码 :set fenc? 显示光标下的字符在当前使用的 encoding 下的内码 ga
文件类型
vim发布版中已经包含了针对不同文件类型的相应plugin,可以使用下面的命令开启对它的应用:
:filetype plugin on
查看文件类型
:set filetype
如果结果是"filetype="问题很可能就是vim不知到文件类型,此时可以手工制定该文件的文件类型:
:set filetype=fortan
要知道一共有哪些被支持的文件类型,可以查看目录$VIMRUNTIME/syntax目录下的文件;
此外,可以通过|modeling|设置文件类型,这样文件每次被编辑时都会被语法高亮,比如,下面的这行语句可以放入Makefile文件中(把它放在文件结尾的地方):
# vim: syntax=make
具体内容可以查看|new-filetype|了解vim是如何确定一个文件类型的。
设置选项缩写
set shiftwidth=4 set sw=4 有什么区别?执行下命令即可知道 :help option-list <CR>是什么?执行命令: :help option set有种方式?执行命令: :help options
set选项值
:set 或 :se 会显示所有已被修改的选项,即和预设值不一样的选项 :set all 显示所有选项的设置值 :scriptnames 显示各种设定文档所在路径及其文件名 :set options? 显示option这个设定的当前值 :option 直接线上设定,有些设定需要加=后接设定值 :set nooption 取消该设定,:set后面可以接多重设定,例如: :set autoindent noconfirm autowrite 这样三种设定就会同时被重设
万一把一个选项值改到自己难以收拾残局的地步,可以在该选项的后面放一个&符号使它恢复其默认值,如:
:set iskeyword&
命令的记录与回放,分为三个步骤:
1、使用" q[a-z] "命令开始,后续的动作将被记录进名为[a-z]的寄存器中; 2、执行你要执行的操作; 3、按下" q "以结束对命令的记录; 最后,通过" @[a-z] "命令来执行刚刚记录下来的记录宏。
会话&视图
会话 :mksession path_dir/session_name.vim :source path_dir/session_name.vim 或者 vim -S path_dir/session_name.vim 视图 :mkview path_dir/view_name.vim :source path_dir/view_name.vim
二进制文件
方法一: vim -b filename 二进制文件中很多字符都是不可打印字符。设置下面的选项额可以以十六进制格式显示这些字符: :set display=uhex 方法二: vim -b filename :%!xxd do change %!xxd -r
大小写搜索
\cword 大小写不敏感的单词word
\Cword 大小写敏感,只搜word
查看自己安装的VIM的编译选项和配置文件位置
:version
关于配置文件.vimrc,可以使用下命令查看
:help .vimrc
把vim中显示的彩色文件转换为相应的html文件,在打开的vim文件中键入:
:source $VIMRUNTIME/syntax/2html.vim
窗口宽度/高度改变
增加窗口高度 CTRL-W + 减小窗口高度 CTRL-W - 设置窗口为固定的高度
{height}CTRL-W _
使窗口达到它可能的最大高度
CTRL-W _
增加窗口宽度
CTRL-W >
减小窗口宽度
CTRL-W < 使窗口达到它可能的最大宽度 CTRL-W |
vim中的页标签使用
:tab newfilename
使用gt进行页切换
"-o"选项可以让vim为每一个文件打开一个窗口 vim -o one.txt two.txt three.txt 如果已经进入了vim, ":all"命令会为命令行上指定的所有文件各开一个窗口。":vertical all"则让打开的窗口都是垂直分隔。
help页面占据整个屏幕
:tab help cmdnamd
vim中使用man
在vim中使用man 方法一: 在关键字上键入K 方法二: 键入: :source $VIMRUNTIME/ftplugin/man.vim 然后: :Man bash 或 :Man 3 echo 或者在关键字上键入 \K
去掉所有“ // ”注释:
:%s!\s*//.*!! 这儿分隔符改用了“!”,原因是在模式或字符串部分使用了“/”字符,不换用其他分隔符的话就得在每次使用“/”字符本身时写成“\/”,上面的命令得写成“:%s/\s*\/\/.*//”,可读性较低。
去掉所有 “ /* */ “注释
:%s!\s*/\*\_.\{-}\*/\s*! !g
“\_.”匹配包含换行在内的所有字符;“\{-}”表示前一个字符可出现零次或多次,但在整个正则表达式可以匹配成功的前提下,匹配的字符数越少越好;标志“g”表示一行里可以匹配和替换多次。替换的结果是个空格的目的是保证像“int/* space not necessary around comments */main()”这样的表达式在替换之后仍然是合法的。
自动匹配和路径设置
:help ins-completion
:help include
vim中含有一个特殊的快速修订窗口(quickfix window),直接在vim的命令模式下输入make,即可将命令的执行结果放入该窗口。
:copen 打开快速修订窗口 :close 关闭快速修订窗口 :cn 显示下一个错误 :cp 显示上一个错误 :cl 列出所有的错误及其编号 :cc 跳转到指定的编号的错误
把外部命令执行的结果插入到当前编辑的缓冲区中
:r!ls
要对所有的非空行进行编号,只需
:%!nl
要多包括空行的所有行进行编号
:%!nl -ba
当使用可视模式选中文本行后然后键入“:!”(命令行上将出现“:'<,'>!”,表示命令的范围是选定的文本),或者使用“:%!”(表示 命令的范围是整个缓冲区中的文本),Vim 在执行后面的命令时,将把命令范围里的文本行作为后面执行的命令标准输入,并用命令执行后的标准输出替换当前缓冲区中的这些文本行。
在vim导入某个文件的指定行
0r ! head -n 14 test.c | tail -n 12
shell中使用vim
第一种情形 Ex模式 例:如果将一些文件中的 -persion- 替换成 Jones,并打印这些文件 1、在change.vim中键入 %s/-person-/Jones/g write tempfile quit 2、在shell文件中键入 for file in *.txt do vim -e -s $file < change.vim lpr -r tempfile done -e -s 即告诉vim以Ex模式安静的执行change.vim中的命令 第二中情形 Normal模式 vim -s script_name file.txt -s即将script中的脚本作为normal模式的命令执行 附:vim -w script_name file.txt 将所有对file.txt的操作都记录到script_name文件中
关于映射 help map.txt :map all :nmap normal mode :vmap visual mode :imap insert mode :smap select mode :xmap visual, select mode
系统粘贴复制
vim 在命令模式下输入reg,看是否有“+”寄存器以备系统粘贴赋值使用 如果没用请apt-get install vim-gtk "+p将系统内容粘贴到vim文件内 “+y将vim中的内容赋值到系统粘贴板 Ctrl y将vim 内容从系统粘贴板复制下来
折叠:
:set fmd 查看折叠模式
用shift + v标记起来,再按zf可以将标记的内容折叠起来 10zF 或 10zF+ 创建从当前行起到后10行的代码折叠 10zF- 创建从当前行起到之前10行的代码折叠 zf7G 自游标所在行至全文第7行进行折叠 :3,7fold 将第3行至第7行折叠起来 zf% 创建从当前行起到对应的匹配的括号上去( (), {}, [], <>等) zf 创建折叠 zd 删除光标下的折叠 zD 循环删除光标下的折叠 zE 去除所有折叠 zc 折叠关闭 zC 循环折叠关闭 zo 折叠展开 zO 循环折叠展开 zr 将全文中的所有折叠依次都打开 zR 将全文中的所有折叠循环打开 zm 将全文中的所有折叠依次关闭 zM 将全文中的所有折叠循环关闭 [z 到当前打开折叠的开始处 z] 到当前打开折叠的末尾处 zj 到达下一个折叠的起始处,关闭的折叠也被计入 zk 向上移动到前一个折叠的结束处,关闭的折叠也被计入
“zz‘把当前行视为屏幕正中央 "zt"把当前行至于屏幕顶端 ”zb“把当前行置于屏幕底端
定位功能 { 段首 } 段尾 g, 前一修改处 g; 后一修改处 ( 句首 ) 句尾 w 下一单词头 b 前一单词头 % 跳至匹配括号 [{ 跳至块开始 ]} 跳至块结束 [/ 跳至注释块开始 ]/ 跳至注释块结束 gd (Goto Declaration) 跳至定义处 gD 跳至全局变量定义处 gj 跳至长行下一段 gk 跳至长行上一段 gf (Goto File) 打开文件 ?向前查找 / 向后查找 ?? 重复上一向前查找 // 重复上一向后查找 # 向前查找光标下词(整词匹配) * 向后查找光标下词(整词匹配) g# 向前查找光标下字符串(不必是整词) g* 向后查找光标下字符串(不必是整词) vimgrep /pattern/[j][g] file file2 … fileN 多文件查找 使用标志(mark)定位: 0~9 系统自用 a-z 本文件mark (使用方法: 标志:ma, 调至标志 `a) A-Z 跨文件的mark :marks 查看所有标志 :delmarks 删除标志
[[ 用来跳到光标前面的一个函数开始处。如果光标在函数体内的话,那就是所在函数的开始处。
][ 用来跳到光标后面的一个函数结尾处。如果光标在函数体内的话,那就是所在函数的结尾处。
]] 用来跳到光标后面的一个函数开始处。如果光标在函数体内的话,那就是下一个函数的开始处。
[] 用来跳到光标前面的一个函数结尾处。如果光标在函数体内的话,那就是上一个函数的结尾处
[# 当你在"#if"-"#endif"结构的中间某个地方时,可以使用这个命令跳转到此结构的开始元素
]# 向前跳转到下一个"#else"或"#endif"使用命令
在C代码中代码块以{}括起来。代码块可长可短。要移动到一个代码块的开头,使用"[["命令。"]["可以到它的末尾,这两个命令都假
设"{"和"}"字符位于第一列。"[{"命令跳转到当前代码块的开头,它会跳过与它平级的代码块。相应地"]}"会跳转到当前代码块的末
尾。
写C++或Java的源代码时1 ,外层的{}用于类的定义。下一级的{}才是函数定义。光标在类中时使用"[m"可以找到前一个函数的开始>。"]m"到下一个函数的开始2 。另外,"[]"是查找上一个函数的结尾,"]]"则查找下一个函数的开始,函数的结尾以第一行出现"}"为>标志。
向后移动到注释的开头用使用"[/"。向前移动到其末尾用"]/"。这只对/* - */形式的注释有效。
你 在 写C程 序 时 可 能 经 常 会 想 知 道 一 个 变 量 是 被 声 明 为"int"还是"unsigned"。解决这个问题的快速办法是使
用"[I"命令。
假设你的光标置身于"column"上。键入:
[I
如何找到最进的{,执行下命令,然后ESC
vi{ 选中{}中间的内容,不包括{} va{ 选中{}中间内容,包括{} vi( 选中()中间内容 vi< 选中<>中间内容 vi[ 选中[]中间内容 vit 选中中间的内容 vi” 选中”"中间内容 vi’ 选中”中间的内容 vis 选中一个句子 vib 选中一个block viw 选中一个单词 vip 选中一个段落
ci{ 修改花括号内的内容,同理:ci[ ci( ci' ci" ci< ci/
di{ 删除花括号内的内容,同理:di[ di( di' di" di< di/
当光标在(), [], , {}, “”, ” 内时,可以用ci, di, 或yi,加上(, [, <, {, ", '。这样可以改写/删除/复制()内,[]内,内,{}内,””内,”内的内容
缩进 >% 缩进块中内容 <% 反缩进块中内容 >i{ {内部缩进(不包括{}) >a{ {内容缩进(包括{}) <i{ 反缩进 <a{ 反缩进
为当前行进行适当的缩进 == 为{}中内容设置适当的缩进 =a{ 全文重设缩进 gg=G 为{}内的所有行增加一个缩进单位 >i{
列:将光标移到指定列,输入 数字+| ,例如 77|
1 12345 2 12345 3 4 变成: 5 1 2345 6 1 2345 7 8 使用命令 9 1,2s/\%2c/ /
1 vim编写C程序时,续行符对齐问题(用宏近似实现泛型) 2 3 文件data内容: 4 ggggg 5 bbbbbbb 6 7 我们将1~2行的列均扩充至80列,并在80列后加续行符 8 vim data 9 让后挂起 10 awk 'NR>=1 && NR<=2 {printf("%-80s\\\n", $0)}' data 1<>data 11 恢复fg 12 Load
或者vim data
然后:
:1,2s/\(.*\)/\=printf("%-80s\\", submatch(0))/g
vim 加密: 在编辑的文件里面,按:X回车,然后输入口令,因为是星号展示,所以需要重复输入。 解密: 打开文件,输入密码 最好对打开的需加密文件,加-n选项。如果文件已经打开,可以设置 :setlocal noswapfile 去除密码: 将密码设为空
:w !sudo tee % 在vim中保存一个只有root可以写的文件
vim + scp
netrw路 径 对于多数协议,文件路径通常相对于用户目录。不过,有的协议里路径可以相对于一些相关的目录。 例如: vim scp://user@host/somefile vim scp://user@host/subdir1/subdir2/somefile 其中 "somefile" 在 "user" 的主目录。如果你想要文件相对于根目录的路径,使用完整路径: 例如: vim scp://user@host//somefile 例如: vim scp://user@host//subdir1/subdir2/somefile 当进入vim后再浏览文件时可以使用Nread Nwrite Nsource Nread scp://[user@]machine[[:#]port]/file Nread sftp://[user@]machine/file 或e scp Nwrite scp://[user@]machine[[:#]port]/file Nwirte sftp://[user@]machine/file 或w scp Nsource scp://[user@]machine[[:#]port]/path Nsource sftp://[user@]machine/path
浙公网安备 33010602011771号