vim的配置文件
~/.vimrc 用户的默认配置文件 ~/.vim/plugin/ 用户的默认脚本文件的存放目录 ~/.vim/ftplugin/ 用户的默认文件类型相关脚本文件的存放目录
vim提供的编程支持
文本信息(行号、文件名等) 代码缩进 语法高亮 快速定位 标记位置 全文搜索 补全 多文件编辑 多窗口编辑 函数列表 文件列表 函数跳转 语法错误 字符集的编码 二进制查看
等等...
初试vim
在终端以root启动 输入vim命令 显示vim首页
:r filename 读入一个文件内容,并写入到当前编辑器中
按i进入插入模式
编辑完后:w保存
编辑完后按esc退出插入模式 进入正常模式
然后输入:sh进入shell
编译运行
文本信息配置
set nu(写入配置文件.vimrc中) 显示行号。 ctrl-g(正常模式下使用命令) 显示文件信息和当前行。 statusline.vim(插件) 增加底部状态栏。
代码缩进配置
filetype on(写入配置文件.vimrc中) 使vim对文件类型敏感。 autocmd FileType c,cpp,h :setlocal cindent cinoptions=:0,g0,t0(写入配置文件.vimrc中) 设置c缩进风格,具体详情参见:h cinoptions-values。 autocmd FileType c,cpp,h :setlocal et sta sw=4 sts=4 tabstop=4(写入配置文件.vimrc中) 设置一次缩进的距离是4个空格。 =(正常模式或者可视模式下使用命令) 按照缩进风格排版代码。 <(可视模式下使用命令) 向左缩进一级。 >(可视模式下使用命令) 向右缩进一级。
语法高亮
filetype plugin on(写入配置文件.vimrc中) 通常安装的vim中已经加入了各种语言的语法高亮插件,我们只需要打开文件类型相关的插件就可以了。
快速定位
gd(正常模式下使用命令) 跳转到局部变量定义处。 gD(正常模式下使用命令) 跳转到全局标量定义处。 *(正常模式下使用命令) 搜索并跳到下一个光标所在的单词。 g*(正常模式下使用命令) 功能接近*,但是查找的目标不带\<和\>单词分界符号。 #(正常模式下使用命令) 搜索并跳到上一个光标所在的单词。 g#(正常模式下使用命令) 功能接近#,但是查找的目标不带\<和\>单词分界符号。
标记位置
m{a-zA-Z0-9} (正常模式下使用命令) 在当前位置制作一个标记,标记名字可以使用a-z或者A-Z之间的任意字符,例如输入ma,就是将当前位置标记为a标记。注意a-z为单文件标记,不可跨文件使用,而A-Z0-9为全局标记,可以跨文件使用。 ‘{a-zA-Z0-9} (正常模式下使用命令) 跳转到本文件的标记上。 :marks [{a-zA-z0-9}] (正常模式下使用命令) 查看指定标记的内容,不写标记号则查看所有。 :delm {a-zA-z0-9} (正常模式下使用命令) 删除一个标记。
全文搜索
:vimgrep(正常模式下使用命令) 全文搜索,功能同grep命令,但是支持在vim进行多文件跳转定位。 使用方法:vimgrep 正则表达式 文件。文件支持通配符,例如*.c代表所有的.c文件。如果希望递归搜索,可以使用**/*,表示搜索所有的文件。 :cl 列举结果 :cc(正常模式下使用命令) 当前结果 :cn(正常模式下使用命令) 下一个结果 :cp(正常模式下使用命令) 上一个结果 :cw(正常模式下使用命令) 重新打开搜索结果窗口
多文件编辑
vim f1 f2 …… fn(在shell下使用命令) 打开多个文件。 :e 文件名(正常模式下使用命令) 在vim中打开新文件。 :ls(正常模式下使用命令) 所有打开文件列表。 :bn(正常模式下使用命令) 到下一个文件。 :bp(正常模式下使用命令) 到上一个文件。 :b# 或 ctrl-6(正常模式下使用命令) 到最近的前一个文件。 set autowriteall(写入配置文件.vimrc中) 如果讨厌每次打开新文件,vim喋喋不休的要求你保存,那么可以设置自动保存。
多窗口编辑 :sp 文件名(正常模式下使用命令) 横向拆分窗口(多行窗口)。 :vsp 文件名(正常模式下使用命令) 纵向拆分窗口(多列窗口)。 ctrl-w h(正常模式下使用命令) 将光标移动到左一个窗口。 ctrl-w j(正常模式下使用命令) 将光标移动到下一个窗口。 ctrl-w k(正常模式下使用命令) 将光标移动到上一个窗口。 ctrl-w l(正常模式下使用命令) 将光标移动到右一个窗口。 ctrl-w +(正常模式下使用命令) 当前窗口尺寸变大。 ctrl-w -(正常模式下使用命令) 当前窗口尺寸变小。 ctrl-w o(正常模式下使用命令) 只显示当前窗口。
函数列表 taglist.vim(插件) 列表插件。 let Tlist_Use_Right_Window = 1(写入配置文件.vimrc中) 如果希望列表在右侧显示,则加入这个配置,默认是左侧。 :Tlist(正常模式下使用命令) 显示函数列表。 d(在taglist窗口下使用) 从列表中删除文件。 +(在taglist窗口下使用) 展开文件。 -(在taglist窗口下使用) 折叠文件。 =(在taglist窗口下使用) 折叠所有文件。 x(在taglist窗口下使用) 显示或隐藏正常窗口。
文件列表 NERD_tree.vim(插件) 横向拆分窗口(多行窗口)。 let NERDTreeWinPos = 'right'(写入配置文件.vimrc中) 如果希望文件树在右侧显示,则加入这个配置,默认是左侧。 :NERDTree(正常模式下使用命令) 显示文件列表。
函数跳转 ctags(软件,需要另外安装) 生成多种语言tag文件的软件。 Ctags –R *.c(在shell下使用命令) 生成当前路径所有.c文件的tag,-R代表递归。 :ta 标记 或 [g] ctrl-] 列举标签(多个标签)或者跳转到标签(单个标签)。 ctrl-t 返回上一级。 :tags 列出标签栈。
语法错误 :make(正常模式下使用命令) 执行外部make命令,并且显示所有的编译警告和错误,并且可以在vim中定位。 :cl 列举结果 :cc(正常模式下使用命令) 当前结果 :cn(正常模式下使用命令) 下一个结果 :cp(正常模式下使用命令) 上一个结果 :cw(正常模式下使用命令) 重新打开搜索结果窗口
二进制文件查看 (鉴于有同学理解出现分歧 将二进制查看更新为二进制文件查看)
:范围!xxd(正常模式下使用命令) 把指定范围的部分转化为二进制文件阅读方式。 :范围!xxd -r(正常模式下使用命令) 把指定范围的部分转回字符阅读方式。
字符集的编码 let &termencoding=&encoding set fileencodings=utf-8,gbk,cp936(写入配置文件.vimrc中) 加入多种字符编码支持。 :set fileencoding(正常模式下使用命令) 设定文件字符编码。
补充
ctrl-p(插入模式下使用命令) 跳出补全菜单。 ctrl-n(在跳出补全菜单后) 下一个结果。 ctrl-p(在跳出补全菜单后) 上一个结果。 ctrl-y(在跳出补全菜单后) 选择当前结果。 ctrl-x ctrl-f(插入模式下使用命令) 文件名补全。 ctrl-x ctrl-i(插入模式下使用命令) 包含的头文件。 ctrl-x ctrl-](插入模式下使用命令) ctags(将在下文中介绍)符号补全。 ctrl-x ctrl-o(插入模式下使用命令) omni补全,需要设置omnifunc变量。
vim其他命令 (参考vi(vim)教程)
打开文件、保存、关闭文件:
vi filename //打开filename文件 :w //保存文件 :w vpser.net //保存至vpser.net文件 :q //退出编辑器,如果文件已修改请使用下面的命令 :q! //退出编辑器,且不保存 :wq //退出编辑器,且保存文件
插入文本或行:
a //在当前光标位置的右边添加文本 i //在当前光标位置的左边添加文本 A //在当前行的末尾位置添加文本 I //在当前行的开始处添加文本(非空字符的行首) O //在当前行的上面新建一行 o //在当前行的下面新建一行 R //替换(覆盖)当前光标位置及后面的若干文本 J //合并光标所在行及下一行为一行(依然在命令模式)
移动光标:
使用上下左右方向键
命令模式下:h 向左、j 向下 、k 向上、l 向右。 空格键 向右、Backspace 向左、Enter 移动到下一行首、- 移动到上一行首。
删除:
x //删除当前字符 nx //删除从光标开始的n个字符 dd //删除当前行 ndd //向下删除当前行在内的n行 u //撤销上一步操作 U //撤销对当前行的所有操作
搜索:
/vpser //向光标下搜索vpser字符串 ?vpser //向光标上搜索vpser字符串 n //向下搜索前一个搜素动作 N //向上搜索前一个搜索动作
跳转:
n+ //向下跳n行 n- //向上跳n行 nG //跳到行号为n的行 G //跳至文件的底部
设置行号:
:set nu //显示行号 :set nonu //取消显示行号
复制:
yy //将当前行复制到缓存区,也可以用 "ayy 复制,"a 为缓冲区,a也可以替换为a到z的任意字母,可以完成多个复制任务。 nyy //将当前行向下n行复制到缓冲区,也可以用 "anyy 复制,"a 为缓冲区,a也可以替换为a到z的任意字母,可以完成多个复制任务。 yw //复制从光标开始到词尾的字符。 nyw //复制从光标开始的n个单词。 y^ //复制从光标到行首的内容。
y$ //复制从光标到行尾的内容。 p //粘贴剪切板里的内容在光标后,如果使用了前面的自定义缓冲区,建议使用"ap 进行粘贴。 P //粘贴剪切板里的内容在光标前,如果使用了前面的自定义缓冲区,建议使用"aP 进行粘贴。
替换:
:s/old/new //用new替换行中首次出现的old :s/old/new/g //用new替换行中所有的old :n,m s/old/new/g //用new替换从n到m行里所有的old :%s/old/new/g //用new替换当前文件里所有的old
编辑其他资源:
:e otherfilename //编辑文件名为otherfilename的文件。
修改文件格式:
:set fileformat=unix //将文件修改为unix格式,如win下面的文本文件在linux下会出现^M。
客串答案
c传递参数都是值传递的,指针的一个作用是为了解决实现类似引用的效果,另外,使用指针可以直接操作内存!
孙鹤同学的解释:
每个线程有固定大小的栈,通常主线程的栈默认一般是8M,用指针去引用内存,往往是在使用堆内存,栈是有限的,并且受生存期影响,所以用堆的情况要比用栈更多,有些东西生存期很长,超过一个函数的调用,那么就需要用堆内存。
本篇到此 希望对大家有帮助
下载地址:http://www.vim.org/scripts/script.php?script_id=273 “Tag List" 插件是一个为VIM编写的源代码浏览插件,需要ctags的支撑 ,直接可以在左边列出函数列表,全局参数列表,宏。(可以排序) 1、下载taglist.zip文件,解压到$HOME/.vim目录下,或者$HOME/vimfiles或$VIM/vimfiles目录下,在这一步后,你应该有这两个文件(目录结构应该被保留) plugin/taglist.vim - taglist 插件文件 doc/taglist.txt - 文档(帮助)文件 2. 进入 $HOME/.vim/doc 或者 $HOME/vimfiles/doc 或者 $VIM/vimfiles/doc 目录, 运行Vim,在命令行模式下运行 ":helptags ." 命令处理taglist帮助文件,如果没有这上步,你将不能得到taglist帮助提示 3、如果ctags工具不在你的PATH搜索路径中,你需要在$HOME/.vimrc中设置Tlist_Ctags_Cmd 变量指出ctags的路径。 4、如果你运行的是terminal/console版本的VIM,以及terminal 不支持改变窗口的宽度,你需要在$/HOME/.vimrc设置 'Tlist_Inc_Winwidth' 变量为0, 5、重启vim 6、你可以在vim的命令行模式中使用 ":TlistToggle" 命令打开/关闭taglist窗口,你可以使用 ":help taglist" 命令得到更多的关于使用taglist插件的信息
NERDTree的安装和使用2009-09-03 12:47
NERDTree来自:
http://www.vim.org/scripts/script.php?script_id=1658 A,安装。 1,解压后,拷贝plugin/NERD_tree.vim文件到~/.vim/plugin下。拷贝doc/NERD_tree.txt文件到~/.vim/doc下 2,打开vim,加载文档。 :helptags ~/.vim/doc/NERD_tree.txt 以后查看帮助只要 :h NERD_tree.txt 即可。 B,常用使用。 1,标签。 1 - 1,打开一个目录。 :NERDTree
~/share/abc 1 - 2,标记它。 :Bookmark your_mark_name_of_abc 1 - 3,打开这个标签。 :NERDTree your_mark_name_of_abc 效果同 1 - 1。 2,快速帮助光标在NERDTree的目录工作区时候,按?键。
|
去除高亮
最相近的方法是 :saveas xxx 但是原文件还是存在的
this is the same way to same the file
then you need to delete the original file