将vim打造成IDE(二)

vim打造成IDE(二)

一、多文档编辑

git clone https://github.com/fholgado/minibufexpl.vim

这相当于IDE中的标签,虽然它看起来不好看,但是用起来很方便,尤其看工程文件的时候,结合TlistNERDTree,体验直线上升。

vim 的多文档编辑涉及三个概念:bufferwindowtab,这三个事物与我们常规理解意义大相径庭。vim 把加载进内存的文件叫做 bufferbuffer 不一定可见;若要 buffer 要可见,则必须通过 window 作为载体呈现;同个看面上的多个 window 组合成一个 tab。一句话,vim bufferwindowtab 你可以对应理解成视角、布局、工作区。我所用到的多文档编辑场景几乎不会涉及 tab,重点关注 bufferwindow

vim 中每打开一个文件,vim 就对应创建一个 buffer,多个文件就有多个 buffer,但默认你只看得到最后 buffer 对应的 window,通过插件 MiniBufExplorerhttps://github.com/fholgado/minibufexpl.vim ,原始版本已停止更新且问题较多,该版本是其他人 fork 的新项目)可以把所有 buffer 罗列出来,并且可以显示多个 buffer 对应的 window。如下图所示:

 

图中关于 buffer 列表再说明两点:

* 表示当前有 window buffer,换言之,有 * buffer 是可见的;! 表示当前正在编辑的 window

你注意到 buffer 序号 1 4 不连续的现象么?只要 vim 打开一个 buffer,序号自动增一,中间不连续有几个可能:可能一,打开了 1234 后,用户删除了 23 两个 buffer,剩下 14;可能二,先打开了其他插件的窗口(如,tagbar)后再打开代码文件;

配置:将如下信息加入 .vimrc 中:

" 显示/隐藏 MiniBufExplorer 窗口

map <Leader>bl :MBEToggle<cr>

" buffer 切换快捷键

map <C-Tab> :MBEbn<cr>

map <C-S-Tab> :MBEbp<cr>

操作:一般通过 NERDtree 查看工程文件列表,选择打开多个代码文件后,MiniBufExplorer 在顶部自动创建 buffer 列表子窗口。通过前面配置,ctrl-tab 正向遍历 bufferctrl-shift-tab 逆向遍历(光标必须在 buffer 列表子窗口外);在某个 buffer 上键入 d 删除光标所在的 buffer(光标必须在 buffer 列表子窗口内)

注意:快捷键有可能不适用你的vim,尤其是buffer切换快捷键,我将其换成了Ctrl+kCtrl+j

 

二、Vim自带的配色方案

 

我将喜欢的配色方案全部放到vimrc中,偶尔换一下。

 

三、解决vim中复制黏贴排版混乱或中文乱码的问题

1.复制黏贴排版混乱

主要是Linux下的vim容易出现的问题,这其实主要是paste模式引起的问题,可以在网上查一下paste为你做了什么,然后你就大概了解为什么复制黏贴会出现混乱的原因了,在网上查到一个我感觉比较合适的解决方法,设置paste模式的开关键,我这里设置的是F2vimrc中内容如下:

"解决复制粘帖排版混乱的问题

nnoremap <F2> :set invpaste paste?<CR>

imap <F2> <C-O>:set invpaste paste?<CR>

set pastetoggle=<F2>

2. 解决gVim下中文乱码的问题

"解决gvim下中文乱码

set fileencodings=utf-8,chinese,latin-1

if has("win32")

set fileencoding=chinese

else

set fileencoding=utf-8

endif

四、系统构建

这一步结合下一步的一键编译就可以实现工程文件在vim内部进行编译了,最后再实现在vim内部执行可执行程序,那么我们就实现了将vim变成IDE的伟大目标。

对于只有单个代码文件的项目来说,无非是保存代码文件、shell 中调用 GCC 编译、链接这样的简单方式即可实现;但,对于动辄几十上百个文件的工程项目,采用这种方式只会把自己逼疯,必须借助构建工具管理工程的整个构建过程。

linux 有两类工程构建工具 —— Makefile系 和非 Makefile 系,Makefile 系常见构建工具有 GNU 出品的老牌 autoconf、新生代的 CMake,非 Makefile 系中最著名的要数 SConsKDE 就是通过 CMakehttp://www.cmake.org/cmake/resources/software.html )构建出来的,易用性灵活性兼备,洒泪推荐

ubuntu下可以直接apt-get安装,当然你也可以源码安装,这不仅可以学习下整个编译安装流程,如果你做嵌入式的话,还可以帮助你熟悉交叉编译某些库时的操作。

一般来说,你需要先写个名为 CMakeLists.txt 的构建脚本,然后执行 cmake CMakeLists.txt 命令将生成 Makefile 文件,最后执行 make 命令即可编译生成可执行程序。

第一步,编写 CMakeLists.txt,这又是一门学问了,就和编写makefile脚本一样,你可以套用模板,也可以系统学习一下怎么去写CMakeLists.txt,这些都是你了解Linux系统,增加学习兴趣的基石。

PROJECT(main)

SET(SRC_LIST main.cpp)

SET(CMAKE_CXX_COMPILER "clang++")

SET(CMAKE_CXX_FLAGS "-std=c++11 -stdlib=libc++ -Werror -Weverything -Wno-deprecated-declarations -Wno-disabled-macro-expansion -Wno-float-equal -Wno-c++98-compat -Wno-c++98-compat-pedantic -Wno-global-constructors -Wno-exit-time-destructors -Wno-missing-prototypes -Wno-padded -Wno-old-style-cast")

SET(CMAKE_EXE_LINKER_FLAGS "-lc++ -lc++abi")

SET(CMAKE_BUILD_TYPE Debug)

ADD_EXECUTABLE(main ${SRC_LIST})

其中,PROJECT 指定工程名、SET cmake 变量赋值命令、ADD_EXECUTABLE 指定生成可执行程序的名字。括号内的大写字符串是 cmake 内部预定义变量,这是 CMakeLists.txt 脚本的重点,下面详细讲述:

· SRC_LIST 指定参与编译的源码文件列表,如果有多个文件请用空格隔开,如,你工程有 main.cpplib/MyClass.cpplib/MyClass.h 三个文件,那么可以指定为:

· SET(SRC_LIST main.cpp lib/MyClass.cpp)

· CMAKE_CXX_COMPILER 指定选用何种编译器;

· CMAKE_CXX_FLAGS 设定编译选项;

· CMAKE_EXE_LINKER_FLAGS 设定链接选项。一定要将 -lc++ -lc++abi 独立设定到 CMAKE_EXE_LINKER_FLAGS 变量中而不能放在 CMAKE_CXX_FLAGS,否则无法通过链接;

· CMAKE_BUILD_TYPE 设定生成的可执行程序中是否包含调试信息。

第二步,基于 CMakeLists.txt 生成 Makefile

第三步,基于 Makefile 生成可执行程序。

五、一键编译

工程项目的构建过程游离于 vim 之外终究不那么方便,前面章节介绍的构建过程是在 shell 中执行的,全在 vim 中执行又是如何操作。第一步的创建 CMakeLists.txt 没问题,vim 这么优秀的编辑器编辑个普通文本文件易如反掌;第二步的生成 Makefile 也没问题,在 vim 内部通过 ! 前缀可以执行 shell 命令,:!cmake CMakeLists.txt 即可;第三步的编译过程更没问题,因为 vim 自身支持 make 命令,直接在 vim 中输入 :make 命令它会调用外部 make 程序读取当前目录中的 Makefile 文件,完成编译、链接操作。当然,一次性编译通过的可能性很小,难免有些语法错误(语义错误只能靠调试器了),vim 将编译器抛出的错误和警告信息输出到 quickfix 中,执行 :cw 命令即可显示 quickfix。说了这么多,概要之,先通过构建工具(CMake 可通过 CMakeLists.txt 文件,autotools 可通过 configure 文件)生成整个工程的 Makefile,再在 vim 中执行 :make,最后显示 quickfix

要实现一键编译,无非是把这几步映射为 vim 的快捷键,即:

nmap <Leader>m :wa<CR>:make<CR><CR>:cw<CR>

分解说明下,m 为设定的一键编译快捷键,:wa 保存所有调整文档内容,:make 调用 make 命令,后面的 消除执行完 make 命令屏幕上“Press ENTER or type command to continue”的输入等待提示,:cw 显示 quickfix(仅当有编译错误或警告时)。

六、让vim识别markdown文本,实时预览README.md文件

1.Linux

新版vim自动识别markdown文件并语法高亮,所以仅需要安装实时预览插件,实时预览插件采用vim-instant-markdown插件,安装之前需要安装node.jsnpm

git clone https://github.com/suan/vim-instant-markdown

(1).安装新版的node.js

sudo add-apt-repository ppa:chris-lea/node.js

sudo apt-get update

sudo apt-get install nodejs

(2)安装npm

sudo apt-get install npm

(3)安装instant-markdown-d

sudo npm -g install instant-markdown-d

(4)安装vim-instant-markdown

~/.vim/bundle/目录下(我使用的是bundle管理插件,直接将插件克隆到bundle目录下即可)

2. Windows

Windows下使用火狐浏览器,安装火狐浏览器插件,然后使vim调用火狐浏览器实时浏览markdown文件。

安装火狐浏览器,Windows用户在安装完Firefox以后需要将它添加到环境变量中,如下:

 

 

在火狐浏览器中安装Markdown ViewerAuto Reload这两个插件并重启Firefox,然后在vimrc中添加如下内容:

"<F4>使用Firefox预览文件

nmap <F4> :call Preview()<CR>

func! Preview()

if &filetype == 'markdown' || $filetype == 'md'

exec "!firefox %"

endif

Endfunc

这样,当你在Vim中打开Markdown文件并按一次以后就会自动打开Firefox预览窗口,每次保存文件时,Firefox就会自动更新预览页面的内容。

七、Vim透明化

1.Windows

在网上下载vimtweak.dll,并且将dll文件放到gvim.exe所在的目录,然后在vimrc中加入如下内容,透明度更改最后的数值即可,感觉200左右较好。

if executable("vimtweak.dll") 
autocmd guienter * call libcallnr("vimtweak","SetAlpha",180
endif 

2. Linux

暂无

猜你喜欢

转载自blog.csdn.net/weixin_39510813/article/details/78366177