一、autocomplpop代码(普通变量函数)的自动弹出
(1)下载:http://www.vim.org/scripts/script.php?script_id=1879
(2)安装:
先解压:unzip vim-autocomplpop.zip
同其他脚本插件的安装方法一致,将解压后的文件autoload,doc,plugin拷贝到~/.vim/ 下的相应目录里,重新打开vim即可使用。
- 1
- 2
- 3
- 4
此时:
(1)只有输入两个字符,才会提示,并且提示内容没有颜色
(2)只提示之前出现过的字符串,并且不能自动提示结构类。
解决第一个问题:
在vimrc中添加内容:
sudo vim /etc/vim/vimrc
"autocomplpop插件,一个字母即可补全
let g:acp_behaviorKeywordLength = 1
let g:AutoComplPop_MappingDriven = 1
"color
hi Pmenu guibg=#444444
hi PmenuSel ctermfg=7 ctermbg=4 guibg=#555555 guifg=#ffffff
- 1
- 2
- 3
- 4
- 5
- 6
(2)解决第二个问题我们就需要安装ctags工具和OmniCppComplete插件。 ctags是用来对文件做标记的工具,OmniCppComplete是在c和c++语言范畴内,对上述智能补全的增强版。
二、 ctags
1、安装ctags
1) sudo apt-get install ctags 或者
2) 在http://ctags.sourceforge.net/ 下载源代码包之后,解压缩生成源代码目录
进入源代码目录执行./configure & make & make install
2、vim中ctags简单使用
1)生成tags文件
在源码根目录下执行ctags -R命令来为程序源代码生成标签文件,其-R选项表示递归操作,同时为子目录也生成标签文件,vim利用生成的标签文件,可以进行检索,并在不同的文件、元素之间来回切换。
也可以用ctags file_name1.c filename2.c filename3.h来产生ctags文件或者ctags .c .h
2)字段补全(比如可以提示结构成员,前提还要安装OmniCppComplete)
为了使得字段补全有效,在生成tags时需要一些额外的参数,推荐的c++参数主要是:
ctags -R --c++-kinds=+px --fields=+iaS --extra=+q
其中:
选项c++-kinds 用于指定C++语言的 tags记录类型, --c-kinds用于指定c语言的, 通用格式是 --{language}-kinds
选项 fileds 用于指定每条标记的扩展字段域
extra 选项用于增加额外的条目: f表示为每个文件增加一个条目, q为每个类增加一个条目
- 1
- 2
- 3
- 4
- 5
3)指定tags文件位置
在vim命令行中输入或者修改.vimrc文件 set tags=./tags(当前路径下的tags文件)
4)跳转到指定函数
在变量或函数处 ctrl+] 来跳转到变量或者函数定义的地方。ctrl+t返回到跳转前的位置。
或者使用命令:tag func_name 来跳转到变量或者函数定义的地方。
ctags不会生成局部变量的索引。
:tags会列出查找/跳转过程
3、ctags的局限性
tags文件只能查看函数,类或变量的定义,而没有被调用信息。
如果要知道一个函数在什么地方被使用,需要使用cscope工具。
添加的tags最好是source code的索引,对于include头文件索引没有效果
三、c/c++代码(类的 . , ->, :: 操作符)的自动补全 OmniCppComplete
配合ctags即可提示类成员:ctags -R –c++-kinds=+px –fields=+iaS –extra=+q
下载:http://www.vim.org/scripts/script.php?script_id=1520
安装:
先解压:unzip omnicppcomplete-0.41.zip
同其他脚本插件的安装方法一致,将解压后的文件autoload,doc,after拷贝到~/.vim/ 下的相应目录里:
- 1
- 2
- 3
- 4
四、taglist
taglist插件是以vim脚本的形式存在,因此只需要将其下载下来放到相应的目录即可。taglist基于ctags才能发挥作用,因此要确保安装了ctags。
1、安装taglist
1)从http://vim-taglist.sourceforge.net/index.html 下载taglist安装包。
2)进入~/.vim目录,将taglist安装包解压,将解压后的/doc和/plugin目录复制到.vim目录下
3)打开配置文件~/.vimrc,加入以下两行:
let Tlist_Show_One_File=1
let Tlist_Exit_OnlyWindow=1
到此安装已经完成。
在vim命令行下运行:Tlist打开Taglist窗口,
运行:Tlist或者q关闭Taglist窗口,
我们可以通过ctrl+w快捷键或者鼠标点击在Taglist窗口和编辑区之间切换焦点,在Taglist窗口选选择某个符号并回车,就可以跳转到该符号定义的位置。
2、其他一些选项可在~/.vimrc脚本中添加。
如:
“设置ctags路径
let Tlist_Ctags_Cmd = ‘/usr/bin/ctags’
“启动vim后自动打开taglist窗口
let Tlist_Auto_Open = 1
“不同时显示多个文件的tag,仅显示一个
let Tlist_Show_One_File = 1
“taglist为最后一个窗口时,退出vim
let Tlist_Exit_OnlyWindow = 1
“taglist窗口显示在右侧,缺省为左侧
let Tlist_Use_Right_Window =1
“设置taglist窗口大小
“let Tlist_WinHeight = 100
let Tlist_WinWidth = 40
“设置taglist打开关闭的快捷键F8
noremap :TlistToggle
“更新ctags标签文件快捷键设置
noremap :!ctags -R
Linux的文本编辑命令除了vi(vim),还有哪些?
文本编辑器有很多,比如图形模式的gedit、kwrite、OpenOffice ... ... ,文本模式下的编辑器有vi、vim(vi的增强版本)和nano,ed,ex。vi和vim是我们在Linux中最常用的编辑器。
Linux nano命令
nano是一个字符终端的文本编辑器,有点像DOS下的editor程序。它比vi/vim要简单得多,比较适合Linux初学者使用。某些Linux发行版的默认编辑器就是nano。 nano命令可以打开指定文件进行编辑,默认情况下它会自动断行,即在一行中输入过长的内容时自动拆分成几行,但用这种方式来处理某些文件可能会带来问题,比如Linux系统的配置文件,自动断行就会使本来只能写在一行上的内容折断成多行了,有可能造成系统不灵了。因此,如果你想避免这种情况出现,就加上-w选项吧。
参考: http://man.linuxde.net/nano
Linux ed命令是文本编辑器,用于文本编辑。
ed是Linux中功能最简单的文本编辑程序,一次仅能编辑一行而非全屏幕方式的操作。
ed命令并不是一个常用的命令,一般使用比较多的是vi 指令。但ed文本编辑器对于编辑大文件或对于在shell脚本程序中进行文本编辑很有用。
参考:http://www.runoob.com/linux/linux-comm-ed.html
Linux ex命令用于在Ex模式下启动vim文本编辑器。
ex执行效果如同vi -E,使用语法及参数可参照vi指令,如要从Ex模式回到普通模式,则在vim中输入":vi"或":visual"指令即可。
参考:http://www.runoob.com/linux/linux-comm-ex.html
windows常用的都是vs 、vs,OSX用clang,clang的错误提示比其他要好很多语言支持比较好,但是编出来的程序性能比gcc差很多,很多细粒度的优化没有人做。
用gdb进行调试纠错前必须要在编译选项中添加“-g”,“-g”标志是对程序进行调试性编译时常用的选项。我们需要给每一个需要调试的源文件都加上这个选项。它将使用特殊版本的C语言标准库完成编译和链接操作,给库函数加上程序调试方面的支持。编译器会把这些标志自动传给链接器。
readelf命令用来显示一个或者多个elf格式的目标文件的信息,可以通过它的选项来控制显示哪些信息。这里的elf-file(s)就表示哪些被检查的文件。可以支持32位,64位的elf格式文件,也支持包含elf文件的文档(这里一般指的是使用ar命令将一些elf文件打包之后生成的例如lib*.a之类的“静态库”文件)。这个程序和objdump提供的功能相似,但是它显示的信息更为具体,并且它不依赖BFD库(BFD是一个GNU项目,它的目标就是希望通过一种统一的接口来处理不同的目标文件),所以即使BFD库有什么bug存在的话也不会影响到readelf程序。运行readelf时,除了-v和-H之外,其他的选项必须有一个被指定。
命令参数:<1>-h或者--file-header。显示在elf文件头里包含的所有信息。
<2>-l 显示程序头表信息, 包括有几个段,每个段的属性,以及每个段中包含有哪几个节
<3>-S 显示节区表内所有的信息,包括每个节的属性
<4>-h 显示所有头的信息,包括elf文件头,程序头和节头,即“-l,-h,-S”的组合。
<5>-s 显示符号表的信息,包含静态符号表和动态符号表。如果指关心动态符号表,可以直接用“-d”。
<6>-r 显示所有定位入口的信息。
首先建立一个新的文件,touch progress_bar.c 执行该vim progress_bar.c命令,写进度条的程序。写进一个进度条程序:
#include<stdio.h>
#include<unistd.h>
#include<string.h>
void progress()
{
int i = 0;
char bar[102];
memset(bar,0,102*sizeof(char));
const char* lable="|/-\\";
while(i <= 100)
{
bar[i] = '#';
printf("[%-101s] [%d%%] [%c]",bar,i,lable[i%4]);
fflush(stdout);
usleep(100000);
i++;
}
printf("\n");
}
int main()
{
progress();
return 0;
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
如图:
该代码中需要注意的小细节:
1. const char* lable=”|/-\\”; 直接输入一个\会被系统认为是转义,所以要输入\\
2. printf(“[%-101s] [%d%%] [%c]”,bar,i,lable[i%4]);这里的%%同上,防止转义。i%4防止溢出
3. fflush(stdout); 参数为标准输出流
4. 因为sleep默认单位为秒,不便于测试,usleep默认单位为微秒
最后,进行调试,建立一个mymakefile文件,touch mymakefile对该文件进行编辑vim mymakefile。
myprogress_bar:progress_bar.c
g++ -o myprogress_bar progress_bar.c
:PHONY clean
clean:
rm -f myprogress_bar
- 1
- 2
- 3
- 4
- 5
如图所示:
然后执行make命令,对progress_bar.c文件进行编译,make -f mymakefile,即生成myprogress_bar文件,用./myprogress_bar对他进行执行。若想重新进行编译,则需要make -f mymakefile clean指令,先对文件progress_bar进行清除,再用make进行编译。
如图: