Fork me on GitHub

简述Linux开发工具

linux中vim是一款强大的编辑器,我最近从网上看到了不少如何把它变成一个更加强大的编辑器的文章,所以我也试着配置一下。

Vim的简单配置

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
27
28
29
30
31
32
33
34
set nocompatible " 关闭 vi 兼容模式
syntax on " 自动语法高亮
set number " 显示行号
set cursorline " 突出显示当前行
set ruler " 打开状态栏标尺
set shiftwidth=4 " 设定 << 和 >> 命令移动时的宽度为 4
set softtabstop=4 " 使得按退格键时可以一次删掉 4 个空格
set tabstop=4 " 设定 tab 长度为 4
set nobackup " 覆盖文件时不备份
set autochdir " 自动切换当前目录为当前文件所在的目录
filetype plugin indent on " 开启插件
set backupcopy=yes " 设置备份时的行为为覆盖
set ignorecase smartcase " 搜索时忽略大小写,但在有一个或以上大写字母时仍保持对大小写敏感
set nowrapscan " 禁止在搜索到文件两端时重新搜索
set incsearch " 输入搜索内容时就显示搜索结果
set hlsearch " 搜索时高亮显示被找到的文本
set noerrorbells " 关闭错误信息响铃
set novisualbell " 关闭使用可视响铃代替呼叫
set t_vb= " 置空错误铃声的终端代码
set showmatch " 插入括号时,短暂地跳转到匹配的对应括号
set matchtime=2 " 短暂跳转到匹配括号的时间
set magic " 设置魔术
set hidden " 允许在有未保存的修改时切换缓冲区,此时的修改由 vim 负责保存
set guioptions-=T " 隐藏工具栏
set guioptions-=m " 隐藏菜单栏
set smartindent " 开启新行时使用智能自动缩进
set backspace=indent,eol,start " 不设定在插入状态无法用退格键和 Delete 键删除回车符
set cmdheight=1 " 设定命令行的行数为 1
set laststatus=2 " 显示状态栏 (默认值为 1, 无法显示状态栏)
set statusline=\ %<%F[%1*%M%*%n%R%H]%=\ %y\ %0(%{&fileformat}\ %{&encoding}\ %c:%l/%L%)\ " 设置在状态行显示的信息
set foldenable " 开始折叠
set foldmethod=syntax " 设置语法折叠
set foldcolumn=0 " 设置折叠区域的宽度0
setlocal foldlevel=1 " 设置折叠层数为1

上面的配置让我写起C程序舒服了一些,当然还可以有更加强大的功能,不过这些要看你自己想要什么功能,去网上搜索一下就能轻松找到。

除了Vim还有哪些强大的编辑器

Emacs

Emacs,著名的集成开发环境和文本编辑器。Emacs被公认为是最受专业程序员喜爱的代码编辑器之一,另外一个vim。
EMACS,即Editor MACroS(编辑器宏)的缩写,最初由Richard Stallman(理查德·马修·斯托曼)于1975年在MIT协同Guy Steele共同完成。这一创意的灵感来源于TECMAC和TMACS,它们是由Guy Steele、Dave Moon、Richard Greenblatt、Charles Frankston等人编写的宏文本编辑器。
自诞生以来,Emacs演化出了众多分支,其中使用最广泛的两种是:1984年由Richard Stallman发起并由他维护至今的GNU Emacs,以及1991年发起的XEmacs。XEmacs是GNU Emacs的分支,至今仍保持着相当的兼容性。
Emac使用Emacs Lisp,这种有着极强扩展性的编程语言,从而实现了包括编程、编译乃至网络浏览等等功能的扩展。

Eclipse

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。虽然大多数用户很乐于将 Eclipse 当作 Java 集成开发环境(IDE)来使用,但 Eclipse 的目标却不仅限于此。Eclipse 还包括插件开发环境(Plug-in Development Environment,PDE),这个组件主要针对希望扩展 Eclipse 的软件开发人员,因为它允许他们构建与 Eclipse 环境无缝集成的工具。由于 Eclipse 中的每样东西都是插件,对于给 Eclipse 提供插件,以及给用户提供一致和统一的集成开发环境而言,所有工具开发人员都具有同等的发挥场所。
这种平等和一致性并不仅限于 Java 开发工具。尽管 Eclipse 是使用Java语言开发的,但它的用途并不限于 Java 语言;例如,支持诸如C/C++、COBOL、PHP、Android等编程语言的插件已经可用,或预计将会推出。Eclipse 框架还可用来作为与软件开发无关的其他应用程序类型的基础,比如内容管理系统。
基于 Eclipse 的应用程序的一个突出例子是 IBM Rational Software Architect,它构成了 IBM Java 开发工具系列的基础。

Brackets

Brackets也是一款为Linux开发者设计的开源代码编辑器,使用Brackets写代码,你不会被任何事情所打断。比如在写HTML代码时,即便你没有保存代码也可以及时预览你的Web页面效果。你也可以使用Theseus来检查变量,Brackets默认提供一种主题,当然你也可以在扩展中心获取更多的主题。

Lighttable

LightTable是一个应用ClojureScript写的可扩展的集成编辑环境(IDE)。由ChrisGranger和RobertAttorri开发。具有实时运行反馈,调试和搜索文档的功能。及时反馈功能提供了一个不同寻常的运行环境来让程序员构建抽象。
  开发团队试图创造一个能够让程序员及时获知程序运行状态的软件。该软件一开始只支持Clojure语言,但是现在通过众多扩展,也能够支持Python和JavaScript语言。

Sublime Text

Sublime Text 是一个代码编辑器(Sublime Text 2是收费软件,但可以无限期试用),也是HTML和散文先进的文本编辑器。Sublime Text是由程序员Jon Skinner于2008年1月份所开发出来,它最初被设计为一个具有丰富扩展功能的Vim。
Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。Sublime Text 的主要功能包括:拼写检查,书签,完整的 Python API , Goto 功能,即时项目切换,多选择,多窗口等等。Sublime Text 是一个跨平台的编辑器,同时支持Windows、Linux、Mac OS X等操作系统。

  • 注*:以上内容来自网络搜索。

除了gcc, 还有哪些常用的编译器

EGCS(Experimental/Enhanced GNU Compiler System) 一个编译系统,包括了C/C++/Obj-C/Fortran等编译器
eclipse 也同样支持很多语言的开发,最厉害的当然还是对Java的开发。

为什么调试的时候需要编译选项中添加 -g.

调试的时候需要编译选项中添加 -g. 加选项-g是为了能够调试。不加可以运行,但不能调试

readelf用来显示一个或者多个elf格式的目标文件的信息,可以通过它的选项来控制显示哪些信息。这里的elf-file(s)就表示那些被检查的文件。可以支持32位,64位的elf格式文件,也支持包含elf文件的文档(这里一般指的是使用ar命令将一些elf文件打包之后生成的例如lib*.a之类的“静态库”文件)。

这个程序和objdump提供的功能类似,但是它显示的信息更为具体,并且它不依赖BFD库(BFD库是一个GNU项目,它的目标就是希望通过一种统一的接口来处理不同的目标文件),所以即使BFD库有什么bug存在的话也不会影响到readelf程序。

运行readelf的时候,除了-v和-H之外,其它的选项必须有一个被指定。

ELF文件类型:

a)可重定位文件:用户和其他目标文件一起创建可执行文件或者共享目标文件,例如lib*.a文件。

b)可执行文件:用于生成进程映像,载入内存执行,例如编译好的可执行文件a.out。

c)共享目标文件:用于和其他共享目标文件或者可重定位文件一起生成elf目标文件或者和执行文件一起创建进程映像,例如lib*.so文件。

在Linux下完成一个彩色的进度条.

首先我们编写Makefile:

1
2
3
4
5
bar:bar.c
gcc bar.c -o bar
.PHONY:clean
clean:
rm bar

写好之后我们就要开始编写进度条程序bar.c了,但是在开始之前,我们需要了解一下怎么在Linux里打印出彩色字体
格式如下:

1
2
3
4
\033[显示方式;前景色;背景色m
\033[0m 默认
\033[1;32;40m 绿色
\033[1;31;40m 红色

显示方式:

1
0(默认值)、1(高亮)、22(非粗体)、4(下划线)、24(非下划线)、5(闪烁)、25(非闪烁)、7(反显)、27(非反显)

前景色:

1
30(黑色)、31(红色)、32(绿色)、 33(黄色)、34(蓝色)、35(洋红)、36(青色)、37(白色)

背景色:

1
40(黑色)、41(红色)、42(绿色)、 43(黄色)、44(蓝色)、45(洋红)、46(青色)、47(白色)

示例代码:

1
printf( "\033[1;31;40m 红色 \033[0m" );//后面带上\033[0m恢复默认不然之后的所有字符都会变红色

在了解了怎么弄好颜色之后写出彩色进度条就简单多了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include<stdio.h>
#include<unistd.h>
int main()
{
char buf[100] = { 0 };
const char*label = "-\\/|";//模拟转圈
size_t i = 0;
for (; i <= 50; ++i)
{
buf[i] = '*';
if (i <= 20)
printf("\e[32m[%lu%%]\e[0m\e[33m[%c]\e[0m\e[34m[%-50s]\e[0m\r", i * 2, label[i % 4], buf);
else
printf("\e[32m[%lu%%]\e[0m\e[33m[%c]\e[0m\e[35m[%-50s]\e[0m\r", i * 2, label[i % 4], buf);
fflush(stdout);
usleep(100000);
}
printf("\n");
return 0;
}

但是这个的彩色看起来还是太单调了,我们不禁想到Linux开机时的那个彩色渐变的进度条,这个能不能简单实现呢?答案是可以:
bar.c

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
27
28
29
30
31
32
33
34
35
36
#include<stdio.h>
#include<unistd.h>
#include<math.h>
#define Black 40
#define White 47
#define Blue 44
#define Green 42
void printbp(int color,size_t n)
{
char p[100] = {0};
sprintf(p,"\e[0;30;%dm \e[0m",color);
while(n--)
printf(p);
return;
}
int main()
{
char*label = "-\\|/";
size_t i = 1,j = 0,k = 0;
for (; i <= 100; ++i)
{
int G,B,W;
G = i*i/100;
B = i-G;
W = 10*sqrt(i)-B-G;
printbp(Green,G);
printbp(Blue,B);
printbp(White,W);
printbp(Black,100-G-B-W);
printf("[%d%%][%c]\r",i,label[i%4]);
fflush(stdout);
usleep(100000);
}
printf("\n");
return 0;
}

但是注意这个彩色的进度条对应的Makefile有些差异,主要是因为sqrt函数的特殊性,所以这个Makefile我们这样写:

1
2
3
4
5
bar:bar.c
gcc -o bar bar.c -lm
.PHONY:clean
clean:
rm bar

  • -lm是为了表示使用了Math库的函数

    rpm安装和yum安装的区别.

rpm安装和yum安装的区别

  • 安装包都是以rpm结尾的。
  • yum是从网络安装源(例如网易镜像,可以自己配置)上下载rpm,如果存在依赖关系会把依赖的rpm同时下载安装。
  • rpm是安装本地存在的rpm包,如果存在依赖也需要安装上,如果某个rpm是自己修改编译的,那么只能用rpm安装了
-------------本文结束感谢您的阅读-------------
坚持原创技术分享,您的支持将鼓励我继续创作!