![](http://static.blog.csdn.net/images/category_icon.jpg)
1. 如果偶尔进的话可用tab键加速目录输入速度。
2. 如果经常进某个目录可设置环境变量例如$DIRPATH=/usr/bin,通过cd $DIRPATH的方式进入。
3. 更简单可以通过alias 命令注册一个快捷命令如alias uu='cd /usr/lib/uu' ,直接执行uu就可以进入目录。
将上述设置写到家目录的.bashrc文件中(~/.bashrc),每次进入后就可以执行了。
保存文件后,关掉当前终端并重新打开一个新的终端,从而使上面的配置生效
或者运行:
source ~/.bashrc
(不然不生效)
就可以了。
详细参考:http://blog.csdn.net/jianglei421/article/details/8510723
今天才发现Linux下的终端有这么多好用的快捷键。
Shift+Ctrl+T:新建标签页
Shift+Ctrl+W:关闭标签页
Ctrl+PageUp:前一标签页
Ctrl+PageDown:后一标签页
Shift+Ctrl+PageUp:标签页左移
Shift+Ctrl+PageDown:标签页右移
Alt+1:切换到标签页1
Alt+2:切换到标签页2
Alt+3:切换到标签页3
Shift+Ctrl+N:新建窗口
Shift+Ctrl+Q:关闭终端
终端中的复制/粘贴:
Shift+Ctrl+C:复制
Shift+Ctrl+V:粘贴
终端改变大小:
F11:全屏
Ctrl+plus:放大
Ctrl+minus:减小
Ctrl+0:原始大小
建立打开终端的快捷键
一、设置快捷键
首选项 --> 屏幕快捷键,然后添加一个命令,并添加一个你的快捷键,如果你用的是gnome桌面建议用
gnome-terminal命令添加快捷键,也可以用xterm,还可以用shell脚本,比如我用的是调用下面我贴的一个脚本
命令(脚本见文代码):
二、设置右键快捷键(打开时为当前目录)
方法一:
执行命令:
此方法是安装一个小软件,但是我安装后和conky冲突了,所以没有用。
方法二:
用脚本,把下面的脚本保存成任意名(我的是:打开终端),然后放在主目录的.gnome2/nautilus-scripts目录下,当然你可以放一些其他常见的脚本,都可以在右键找到。比如发送到邮件/修改文件权限等等实用的功能。
脚本:
#
# This script opens a gnome-terminal in the directory you select.
#
# Distributed under the terms of GNU GPL version 2 or later
#
# Install in ~/.gnome2/nautilus-scripts or ~/Nautilus/scripts
# You need to be running Nautilus 1.0.3+ to use scripts.
# When a directory is selected, go there. Otherwise go to current
# directory. If more than one directory is selected, show error.
if [ -n "$NAUTILUS_SCRIPT_SELECTED_FILE_PATHS" ]; then
set $NAUTILUS_SCRIPT_SELECTED_FILE_PATHS
if [ $# -eq 1 ]; then
destination="$1"
# Go to file's directory if it's a file
if [ ! -d "$destination" ]; then
destination="`dirname "$destination"`"
fi
else
zenity --error --title="Error - Open terminal here" \
--text="You can only select one directory."
exit 1
fi
else
destination="`echo "$NAUTILUS_SCRIPT_CURRENT_URI" | sed 's/^file:\/\///'`"
fi
# It's only possible to go to local directories
if [ -n "`echo "$destination" | grep '^[a-zA-Z0-9]\+:'`" ]; then
zenity --error --title="Error - Open terminal here" \
--text="Only local directories can be used."
exit 1
fi
cd "$destination"
exec x-terminal-emulator
说明:最近安装了个CentOS6.0,(个性化地)设置了终端的快捷键如下:
1.打开终端:alt + s
2.关闭终端:alt + q
操作如下
1.打开终端:
2.关闭终端:
![](http://static.blog.csdn.net/images/category_icon.jpg)
版权声明:本文为博主原创文章,未经博主允许不得转载。
在我们平时写程序的过程中,用单个源文件把程序写出来的时候较少,一般都是分成多个头文件和源文件来完成的。这个时候如果我们仍想就通过vim工具来完成 我们的编译工作,那就要用到make。这里用个最简单的例子最简单地介绍写一个最简单的makefile的方法,在我们写一些很小的程序的时候可以就这 样。
这里就以两个文件的程序为例,把规则看明白后多的文件类推就可以了。
我们先用vim写好要写好的hello.h和hello.cpp:
//hello.h
#include
using namespace std;
int ABC(int m,int n)
{
int i=m+n;
cout<<i<<endl;
}
//hello.cpp
#include
#include "hello.h"
using namespace std;
int main()
{
int a,b;
cin>>a>>b;
ABC(a,b);
}
然后写一个文件命名为Makefile或makefile,内容如下:
a:hello.o
g++ -o a hello.o
hello.o:hello.cpp hello.h
g++ -c hello.cpp
.PHONY:clean
clean:
rm a hello.o
其意思如下:
a:hello.o // 我们的目标文件是a,但a的生成依赖于hello.o
g++ -o a hello.o // 从hello.o生成a所要进行的动作
hello.o:hello.cpp hello.h // hello.o依赖于hello.cpp和hello.h
g++ -c hello.cpp // 生成hello.o所要进行的动作
.PHONY:clean // 伪目标clean
clean:
rm a hello.o // clean的动作
也就是说,我们的关键是要把目标文件、中间文件与源文件之间的依赖关系和要进行的动作写清楚。
把这几个文件在某目录下保存好以后,在这个目录下打开终端,
执行make
可以看到编译的步骤,
然后ls
如果没错误的话就可以看到目录下多了个a文件,
./a
输入两个整数,就会看到输出他们的和。
运行make clean可以清除a和hello.o
这只是最简单的例子,make是很强大很好用的工具,我们大家都相当有必要把它学好,详细的学习资料请见http://www.chinaunix.net/jh/23/408225.html。
https://www.zhihu.com/question/22096642
这里需要澄清的一点是,即使你再怎么去调节你的Vim,或为他书写插件,Vim始终是一个静态文本编辑器,他在增量解析上因为访问编辑器内存的局限性和其设计原则,使得他效率上有所缺失,并且不支持 shell-window (关于为什么不支持 shell-window, 请阅读 :help shell-window 更详细地了解)。由于这些问题的存在,Vim 并不能像 IDE 一样成为一个强大的,动态的编程环境。但是,这并不能妨碍我们使用Vim编程,当我们认可了Vim是一个静态文本编辑环境后,我们所要做的事情,就是尽可能地利用静态分析工具打造一个适合静态文本编辑的编程环境。
对于喜欢使用Vim并且掌握Vim的人们,都有一套自己的配置来让他们处理IDE 相关的操作。以下我就说一说我自己是如何来打造这样一个环境:
我们假设你要编辑的项目为: ~/foo/bar/foobar/ 这个project
1. 定义,声明的跳转
在编程中,最常使用的是定义跳转 ( define, declaration jumping ),这方面需要你借助一个Vim中常用的外部工具叫做 cTags 来实现。很少有人会告诉你 cTags 怎么使用。但是当你开启一个项目后,一般你会通过:
~/foo/bar/foobar/: ctags -R .
let tags+=./tags
2. 文件浏览
相信喜欢 Vim 的朋友都有自己的文件浏览插件。最常被大家使用的是 NERDTree: https://github.com/scrooloose/nerdtree 。这个插件可以帮助你列出你当前项目下的文件。并且他提供了 file filter pattern。这样你可以通过设置 g:NERDTreeIgnore 这个变量来忽略那些你不想要的文件。
但是,我个人喜欢使用的是我自己开发的一个插件叫做 ex-project: https://github.com/exvim/ex-project 。这个插件和NERDTree 的功能类似,不过他是专门为单独 Project 设计的,有更好的 folder, file filter 选项。同时他也是 exVim 插件体系的一部分。
如果说 Vim 的文件浏览有什么比 IDE 有优势的地方,莫过于因为Vim是一个静态文本编辑器,所以他的所有东西皆文本,所以你可以用任何文本操作的方式来游走于文件浏览插件中,比如 search /,比如单词跳转等等。对了,你还可以用 regular expression。是不是很cool呢。
3. 全局搜索
我相信不少人为此困扰过。Vim 社区里确实太缺少这个东西了。你说 grep? NO,NO,NO!对于大型项目,grep 的recursively搜索即使配合file filter pattern也是慢如狗。为此我个人特地开发了一个专门为 global search 做优化的插件 ex-gsearch: https://github.com/exvim/ex-gsearch 。同样的,ex-gsearch 也是 exVim 插件体系的一部分。
ex-gsearch 实际上是一个引用外部搜索引擎的搜索结构到 Vim 插件窗口中的插件。他能够很好的引用 grep, id-utils 的搜索结构。而我这里要重点介绍的就是除了 grep 外更适合作为项目内全局搜索的工具 id-utils。和 ctags 一样,id-utils 也是一个预先帮助你解析项目文件,然后生成索引列表文件提供给Vim使用的外部工具。他的使用方法:
~/foo/bar/foobar:mkid
然后你会生成一份 ID 文件。在项目中,通过:
~/foo/bar/foobar:lid --result=grep -f"ID" your_search_word
4. 文件快速跳转
相信不少朋友都被 sublime text 的 ctrl+p 文件快速搜索功能给深深地吸引。其实 Vim 中也有一个类似的插件做相同的事情,他就是 ctrlp: https://github.com/kien/ctrlp.vim。这里我就不多说了。同类的Vim插件还有 lookupfile, unite 等等。他们做的同样出色。
5. 代码补齐
这类型的 Vim插件也是非常的多的,我按照我目前喜欢的按排名列举:
我喜欢 autocomplpop 是因为他纯 Vim 脚本编写,速度上是测试的几个纯 Vim 编写的插件中最快的。如果你不拘泥于纯粹Vim脚本这件事情, neocomplete, YouCompleteMe 会是更好的选择。
总结,关于 exVim
以上几点已经可以将Vim打造成不错的IDE了。说了那么多,其实只是想告诉题主,Vim只是一个静态文本编辑工具,他不是IDE,但是借助外部工具可以做很多类似IDE的事情,甚至有些时候做的更好。
不过耐心看到这里的朋友应该发现了,我上面的列举有个很大的问题,这些外部工具在项目里运行,需要一些精心的调配,比如 file filter, folder filter。不同的插件语法不同,总不能我每次开个项目,都要设置这些东西吧,很烦。
所以,我写这篇文章的目的,并不是让你们用上面的方法来使用Vim编程IDE,而是推荐大家使用 exVim 这个我精心配置过的 Vim 编程环境。exVim 将项目中用到的 file filter, folder filter, 插件配置,外部工具等等东西都通过 .exvim 这个文件进行统一配置,当你开始一个项目的时候,你只需要在项目工程下创建 foobar.exvim 这个文件,并且用 Vim 编辑他,他就会自动的将配置信息转化到 Vim 中,并且帮你启动你需要的插件和脚本。也就是说,他做了上面的我说的那些操作,让你不用去二次学习那些外部工具的命令语法和其他一些选配功能。
exVim 项目首页: exVim: Home
exVim 项目地址: https://github.com/exvim/main
此外,我上面也提到了 Vim 中形成 IDE 的部分插件,更多更详细的插件内容,大家可以阅读一下我写的这篇文章: exVim: Plugins
以及我的另外一篇教大家如何在 Vim 社区中选插件的文章: exVim: Select Your Plugin
希望以上信息能够帮助你学好Vim,并打造成自己真正有用的编程环境。
最后还是要强调,Vim 是一个静态文本编辑器,所以请以静态文本的编辑的观点来看待他,这样你也就能够最大化地使用Vim和他的插件体系,也能够明白自己是否需要增量辅助的IDE编程环境,还是觉得静态环境就合适了。
版权声明:本文为博主原创文章,转载请附上原文链接。
我是坚定的Vim党,因为和命令行的集成如此之好,Vim可以解决任何问题。 然而在这个世界上,即便是最好用的工具也是需要配置的。本文就来打造一个适合写C++的Vim编辑器!
基础设置
稍微熟悉Vim的小伙伴都会知道这个文件~/.vimrc
,如同绝大多数的Unix软件,Vim也是用基于文本的配置文件。 当前用户的Vim配置便存储在这个文件当中,该文件的每一行便是一个配置项(function
除外)。
配置文件中的所有语句都会在打开Vim时,在Ex模式下执行。例如,我们在Vim中打开行号:
:set number
我们便可以在配置文件中加入:
" ~/.vim
set number
同样重要的配置还有:
- 打开语法高亮:
syntax on
- Tab大小:
set tabstop=4
- 缩进大小:
set shiftwidth=4
Vim是一个典型的Unix程序,上述命令都有缩写啦:number(nu), tabstop(ts), shiftwidth(sw), etc.
更多关于基础配置项的信息,请参考我的另一篇博客: vim 的配置与使用
自动补全
自动补全恐怕是代码编辑器最重要的特性了,我们暂且不提它毁了多少人的面试之路。
由于Vim插件的风格、使用方式太过多样化,多语言的自动补全一直存在各种冲突,需要大量精力才能调通。 然而Github的出现给Vim插件带来了新的活力,现在我们通过基于Github的Vundle来安装插件,而不需要手动去vim.ort上找插件了。
废话少说,我推荐的插件叫做YouCompleteMe,看图!
YouCompleteMe功能很全:
- 自动补全,在你写一个名称的过程中,会出现提示列表,同时给出每一项的函数签名(函数形参列表)。
- 语法错误、警告的提示。比如变量未使用、函数未定义等等,很多编译warning都会直接提示出来,特别神奇。
配置很容易,但需要先安装Vundlevundle(如果你没有的话)。另外,如果你是MacOS用户,确保你的Vim升级到了7.4. 如何使用HomeBrew本文就不唠叨了。
括号/引号匹配
括号和引号的自动补全和智能匹配。例如:
- 输入前大括号补全后大括号
- 在一对括号之间回车,自动分为3行并调整缩进
- 输入前引号自动补全后引号
凡此种种。。。我觉的第二条是最实用的功能,尤其是写函数和类的时候。
上述的各种括号、引号匹配都可以用delimitMate来解决,官网:
https://github.com/Raimondi/delimitMate
下载后把autoload
, plugin
, doc
都拷贝到~/.vim/
下即可。
Formatter
格式化程序对于我们懒人和强迫症用户来讲是非常需要的。Vim的默认配置中提供了格式化功能, 但显然我们要的更多!比如我希望:
- 前大括号不换行,而后大括号换行
- 所有运算符两边都有空格
- 一键格式化当前文件
- 保存时自动格式化
- ...
这里推荐的插件叫做vim-autoformat,上述的需求都能完美地解决。参照文档安装就好了。
需要注意的是,vim-autoformat只是格式化程序框架,它依赖于代码风格检查工具来进行格式化。 我们需要单独安装这些工具:astyle、js-beautify等。这里有完整的列表:https://github.com/Chiel92/vim-autoformat#default-formatprograms。
如果你希望自定义代码风格,可以在.vimrc
中添加个性化的formatter:
let g:formatdef_harttle = '"astyle --style=attach --pad-oper"'
let g:formatters_cpp = ['harttle']
let g:formatters_java = ['harttle']
比如我安装了astyle,这里定义一个formatter叫做harttle。然后,把它设置成cpp和java的formatter。 至于astyle --style=attach --pad-oper
为什么这样写,这是一个Bash命令,这些参数你可以去查看Astyle 的文档。 来一个快捷键F3格式化当前文件:
" file: ~/.vimrc
noremap <F3> :Autoformat<CR>
看图!
注释
注释、反注释是代码编辑器的常用操作,我们也可以方便地在Vim中设置快捷键。 然而因为不同语言的注释风格不同,我们可能需要在ftplugin
下写多个配置文件,总之很烦人。 可以引入一个称为NERD Commenter的插件:
https://github.com/scrooloose/nerdcommenter
这是一个在社区很火的插件,O(∩_∩)O~。下载后直接复制到~/.vim
下面即可。 如果你希望看到它的文档,只需要更新VIM DOC:
:helptags ~/.vim/doc
此后,按下\cc
即可注释,\cu
反注释。前面可以加一个行数~
编译/运行
如果你已经能熟练地定义Vim快捷键,就不必往下看了。
下面三行分别设置了运行、编译、调试的快捷键,n
表示该快捷键在normal模式下起作用; nore
表示该定义不会递归地传递;<CR>
是回车(carriage return),!
表示执行Shell命令。
nnoremap <F5> <Esc>:w<CR>:!g++ -std=C++11 % -o /tmp/a.out && /tmp/a.out<CR>
nnoremap <F7> <Esc>:w<CR>:!g++ -std=C++11 %<CR>
nnoremap <C-F5> <Esc>:w<CR>:!g++ -std=C++11 -g % -o /tmp/a.out && gdb /tmp/a.out<CR>
当然,如果你把上述代码直接添加到~/.vimrc
中,所有类型的文件都会拥有上述三个快捷键。 这可能是我们不希望的结果,我们希望每种文件类型的<F5>
执行自己的运行命令。
这需要进行文件类型识别和定义文件类型插件,请参考我的另一篇文章:感受Vim的强大:进阶技巧
除非注明,本博客文章均为原创,转载请以链接形式标明本文地址: http://harttle.com/2015/07/18/vim-cpp.html