Ubuntu折腾史:编译器的选择与vim的脚本配置

前言

学到现在大概用了半年多的Linux了,总算不止是个只会nano的小小白玩家了,还是个会用vim的小白玩家!最近开始正式装上了双系统并打算长期学习并使用Linux,此前零零碎碎地也是折腾了好几次vim,也算是了解得很全面了,因此这次打算好好来写一下介绍。

What’s vim?

我们引用一下维基百科上的介绍:

Vim是从vi发展出来的一个文本编辑器。其代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。和Emacs并列成为类Unix系统用户最喜欢的编辑器。

划重点,祖籍是文本编辑器,玩骚了被广泛拿来码程序。vi和vim的关系就像是Windows下的notepad和notepad++一样,前者只是个普通的字编辑器,而后者则提供了很大的自由度,用户可以自行配置成使用于各类程序设计语言的IDE。

我们也可以访问一下vim的官网,官网介绍:Vim是一个高度可配置的文本编辑器,可以创建和更改任何类型的文本,效率非常高。可以看到vim自身的定位:程序开发工具而不是文字处理工具。

而vim之所以强大,其实就是依靠广泛的插件系统。依靠这些强大的插件,用户可以自己选择IDE的配置,是否加入某些功能,是否支持某种语法。通过vim的学习和使用,也可以学习到类似Windows下的IDE软件(例如Devc++等)的具体实现,而不再是拿来就用。

gcc、llvm和clang

今天我们主要将vim配置成C/C++的IDE,所以必然要谈到这两个编译器。一直以来用的编译器都是GCC,最近了解到了Clang/Clang++,便花了一个周末的时间从头到尾仔细研究了一遍,总算把网上那一堆专业术语看懂了个大概。

什么是编译器

首先需要知道什么是编译器?

编译器的日常工作: 源代码 (source code) → 预处理器 (preprocessor) → 编译器 (compiler) → 汇编程序 (assembler) → 目标代码 (object code) → 链接器 (Linker) → 可执行文件 (executables)。也就是把你看得懂的翻译成机器看得懂的0101。传统编译器事实上分前端、优化器和后端,这也是理解接下来内容的关键。

  • 前端主要负责解析输入的源代码,由词法分析器和语法分析器完成。也就是说,前端接受你的源代码并根据约定好的语法解释“读”懂你的数据变量和函数语法,同时也会检查程序的语法错误。
  • 优化器负责分析、优化中间代码,而后端主要进行的工作是生成机器代码。有时也将这两者统称后端。这一步的优化做得好,占用内存自然就少,但代价就是需要更长的编译时间。

用这种模式设计的编译器有很大的方便,当你需要给编辑器添加其他语言支持的时候,你只要换掉前端;当你需要移植到其他架构的机器上时,你只要换掉后端。

什么是gcc、llvm和clang

首先我们分个类,gcc和clang是编译器,llvm是构架编译器的框架系统。
然后我们来站个队,现在llvm和clang是一队,挑战业界大佬gcc。

llvm是什么东东####

那么先来说明llvm是哪一类东西,llvm本身就不是一个编译器,如果你拿llvm跟上面两者对比是要遭笑话的。llvm的优势在于,它是在GCC的架构问题日益突出的情况下,针对GCC缺点提出的一个新的编译器框架,也是一套用于开发编译器、解释器等程序语言相关工具的库,主要聚焦于编译器后端功能。

对比gcc和clang####

首先gcc算是业界年长的老大了,而clang 是后起之秀,配合 llvm,以优秀的前端闻名于世,现在已经是Mac的默认编译器,微软等大公司都在往上靠,前景一片光明。

#我们先安装一下这两个编译器
$ sudo apt-get install llvm
$ sudo apt-get install clang
#Gcc一般是ubuntu默认安装
$ sudo apt-get install gcc

然后简单写个语法错误的代码,我们来对比一下前端:

很显然,clang的提示非常友好,不止找出了错误的地方,还给出了修改建议。

其实,clang是基于llvm的一个新事物,它肯定在原有产品GCC的不足之处下足了功夫。另外,在后端层面上,目前clang在Mac平台表现优秀,而其他平台仍待考察,而GCC在Linux平台也还行。这是因为llvm本身就是Apple投资,为的就是开发Mac平台上GCC的替换品clang。——因为GCC没有及时回应Apple的需求。反正就是神仙打架,我等旁观吃瓜就行。

Vim的一些配置

好吧,扯了那么多,来点实用的。首先用sudo apt-get install vim安装一下vim。打开的界面是这样的:


因为vim支持自己配置很多插件,所以我们可以自行在vim的官网上选择。我个人还是喜欢轻便,所以主要推荐以下几个插件。

Pathogen

主要用于管理你的插件,将插件相关文件统一管理,方便添加和移除。

$ sudo apt install curl
$ mkdir -p ~/.vim/autoload ~/.vim/bundle && curl -LSso ~/.vim/autoload/pathogen.vim https://tpo.pe/pathogen.vim
$ sudo vim /ect/vim/vimrc
#在打开的文档中加入以下内容
"自定义内容
execute pathogen#infect()

其实有一定的编程基础的可以轻松看出,这个vimrc文件也是一个程序,也有一些固定的语法,只要仿造其它语句就可以自己写了。

Auto Pairs

自动删除或插入成对的括号、引号,这个功能对我这种以来IDE久了的肯定是需要的。

#先安装一下git这个工具
$ sudo apt-get install git
$ git clone git://github.com/jiangmiao/auto-pairs.git ~/.vim/bundle/auto-pairs

NERDTree

用于查看文件系统,快捷方便。

$ git clone https://github.com/scrooloose/nerdtree.git ~/.vim/bundle/nerdtree
#同理在vimrc文件中加入以下内容。设置快捷键
map <C-n> :NERDTree<CR>


上图就是刚才拿来对比clang的程序

Taglist

列出文件的函数等,一般IDE常见功能。

$ sudo apt-get install ctag
#在官网下载taglist插件 https://www.vim.org/scripts/script.php?script_id=273
$ mv ~/下载/taglist_46.zip ~/.vim/bundle
$ unzip taglist_46.zip
$ rm taglist_46.zip
#同样,可以设置快捷键
map <C-t> :TlistToggle<CR>

SuperTab

Tab补全功能不言而喻了吧。

$ git clone https://github.com/ervandew/supertab.git ~/.vim/bundle/supertab

像这些小插件vim有很多,用得好真的很方便,这个看个人喜好了,我就觉得以上几个够用了,比较轻便。

F5运行

F5一键运行这个功能就不需要插件了,我们只要在vimrc中加入几行代码

" C/C++/shell/python一键运行
map <F5> :call CompileRunGcc()<CR>
func! CompileRunGcc()
	exec "w"
	if &filetype == 'c'
		exec '!clang % -o %<'
		exec '!time ./%<'
	elseif &filetype == 'cpp'
		exec '!clang++ % -o %<'
		exec '!time ./%<'
	elseif &filetype == 'sh'
		:!time bash %
	elseif &filetype == 'py'
		exec '!python %'
	endif
endfunc

模板生成

如果想要在新建文件的时候默认填充代码头文件以及备注,则可以在.vim中新建一个文件夹template并预先写入几个模板文件c.tlp、cpp.tlp、py.tlp

autocmd BufNewFile *.c 0r /home/lst/.vim/template/c.tlp
autocmd BufNewFile *.cpp 0r /home/lst/.vim/template/cpp.tlp
autocmd BufNewFile *.py 0r /home/lst/.vim/template/py.tlp

总结

多上官网看技术文档,很重要!

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值