linux下进修C语言:神器 vim + 指针相关客串
副标题#e#
前篇回首
上篇先容了linux下C编程根基情况设置以及相关东西利用选择。
不外10个大牛9个用vim,那么咱们就来玩vim。linux下玩c就别依靠图形界面。好吧辞别Ide,呼吁行才是c的王道。
本篇文章感激名为孙鹤同学的技能支持 感激有爱的c大牛们
本文中多处利用vim插件(孙鹤提供),这些插件大多是在http://www.vim.org/处下载。
指针客串
因为结业后就没玩过c了,都说指针是c的重点。可是指针作为一种地点变量,为什么不直接操纵变量自己呢。文章末端为各人发表
vim的设置文件
~/.vimrc 用户的默认设置文件
~/.vim/plugin/ 用户的默认剧本文件的存放目次
~/.vim/ftplugin/ 用户的默认文件范例相关剧本文件的存放目次
vim提供的编程支持
文本信息(行号、文件名等)
代码缩进
语法高亮
快速定位
标志位置
全文搜索
补全
多文件编辑
多窗口编辑
函数列表
文件列表
函数跳转
语法错误
字符集的编码
二进制查察
等等…
初试vim
在终端以root启动 输入vim呼吁 显示vim首页
:r filename 读入一个文件内容,并写入到当前编辑器中
#p#副标题#e#
按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通报参数都是值通报的,指针的一个浸染是为了办理实现雷同引用的结果,别的,利用指针可以直接操纵内存!
孙鹤同学的表明:
#p#分页标题#e#
每个线程有牢靠巨细的栈,凡是主线程的栈默认一般是8M,用指针去引用内存,往往是在利用堆内存,栈是有限的,而且受保留期影响,所以用堆的环境要比用栈更多,有些对象保留期很长,高出一个函数的挪用,那么就需要用堆内存。
From:cnblogs 熬夜的虫子