【CNMP系列】VIM編輯器詳解

緣起

大學的時候作過Linux內核驅動程序研發,以前寫C語言就是用的Vim編輯器,當年的Vim還不現在天之強大,當時的插件也沒有如今這麼多,只是以爲這個編輯器能知足我想要的全部,查看Linux內核代碼,調試C程序,調試彙編代碼,寫Shell腳本,跑定時測試任務,等等等,都離不開這個編輯器。可能由於當年的機器爲了節省幾百塊的操做系統費,被迫裝上了Linux系統,後來才明白,這是上天指引着我來到了Linux這條道路,而且越陷越深。linux

之前總有人調侃程序員,說PHP是世界上最好的語言,今天帶給你們的是CNMP系列的一個比較重量級的選手,Linux下的Vim編輯器。git

毋庸置疑,Vim是世界上最棒的編輯器,有編輯器之神的稱號,前身是Vi。功能強大,高度可定製是他的特性。程序員

想要熟練使用Vim其實並不難,難就難在要改變你的一些習慣,比方說以前你用編輯器的時候右手確定是要放在鼠標上面的,只有開始擼代碼的時候纔會將右手拿離鼠標。這不由讓我想到mac是最適合程序員的電腦,不會是由於他的鼠標就在鍵盤下側吧,不過,講真,mac的觸摸板實在是太好用啦!github

記住這句話:【vim設計之初就是整個文本編輯都用鍵盤而非鼠標來完成】,鍵盤上幾乎每一個鍵都有固定的用法,且vim的製做者但願用戶在普通模式(也就是命令模式,只可輸入命令)完成大部分的編輯工做。算法

插入模式與命令模式

Vim相較於其餘編輯器,不一樣的地方在於,他有兩種模式,第一種就是你們常見的,大部分編輯器都有的插入模式,第二種模式就是他區別於其餘編輯器的命令模式。vim

熟練的使用命令模式可以讓你感覺到他不適用鼠標的正確性。編輯器

二者切換方式

進入Vim以後,鍵盤敲擊函數

i:在當前字符的左邊插入
I:在當前行首插入
a:在當前字符的右邊插入
A:在當前行尾插入
o:在當前行下面插入一個新行
O:在當前行上面插入一個新行

這些字符就能夠進入插入模式,在插入模式中按【ESC】便可回到命令模式。工具

二者的切換,我最習慣的就是進入vim,按【a】進入編輯模式,而後狂按【ESC】進入命令模式。學習

屏幕跳轉控制命令

【命令模式】

<Ctrl-f>:向下移動一屏。
<Ctrl-d>:向下移動半屏。
<Ctrl-b>:向上移動一屏。
<Ctrl-u>:向上移動半屏。

跳轉到多少行

【命令模式】

numG:移動光標到指定的行(num)

剪切、拷貝、粘貼

【命令模式】

d:剪貼選擇的內容到剪貼板。
y:拷貝選擇的內容到剪貼板。
dd:剪切當前行。
yy:拷貝當前行。
p:在光標區粘貼剪貼板的內容

撤銷

【命令模式】

u:撤銷剛纔編輯的內容

高能提示!!!高能提示!!!高能提示!!!千萬別在vim中使用<ctrl+z>,沒用的。

經常使用命令

下面介紹一下大家在平常工做中可能會用到的一些命令

查找命令

/text  查找text,按n健查找下一個,按N健查找前一個。

替換命令

s/old/new/ 用old替換new,替換當前行的第一個匹配
s/old/new/g 用old替換new,替換當前行的全部匹配
%s/old/new/ 用old替換new,替換全部行的第一個匹配
%s/old/new/g 用old替換new,替換整個文件的全部匹配
:10,20 s/^/    /g 在第10行知第20行每行前面加四個空格,用於縮進。

退出命令

:wq 保存並退出
:q! 強制退出並忽略全部更改
:e! 放棄全部修改,並打開原來文件。

至此爲止,你能夠編輯你想要編輯的東西了,和通常的編輯器沒多大的區別啦~

Vim插件

下面進入主題,vim的一大特點,他的高可擴展性!插件的安裝與使用

左側爲Vim插件文件管理器【NERDTree】,後面我會給你們詳細解答。

右側爲個人vimrc文件部份內容。

插件管理器

提起插件,你們第一個想到的就是管理器,相似於包管理器,Python的pip,PHP的Composer,CentOS的yum,Ubuntu的apt-get,Mac的brew,是否是很情切,啊。

那Vim也有本身的插件管理器,那就是大名鼎鼎的【vundle】,最老牌的Vim插件管理器。

按照以下方式下載vundle並安裝

#git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim

該命令將下載Vundle插件管理器,並將它放置在你的Vim編輯器bundles文件夾中。如今,你能夠經過.vimrc配置文件來管理全部擴展了。

vimrc

vim的配置文件,你想要的功能,包括插件的下載安裝,都是配置在這個目錄下的,而後在命令模式下輸入

:PluginInstall

便可完成對插件的安裝,別忘了前面有個【:】哈。

首先,咱們先看下你的home目錄下是否存在vimrc文件,默認是不存在的,若是你以前編輯過的,能夠,不要緊,咱們從頭再來過一遍。

#ls ~/.vimrc

【~】是Linux下對應用戶的home目錄。

沒有的話,那就touch一個吧,或者直接vim一個,直接編輯便可。

#touch ~/.vimrc

編輯上面的.vimrc文件,把下載下來的Vundle配置添加到配置文件的頂部:

set nocompatible              " required
filetype off                  " required

" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')

" let Vundle manage Vundle, required
Plugin 'gmarik/Vundle.vim'

" Add all your plugins here (note older versions of Vundle used Bundle instead of Plugin)

注:" 開頭的是註釋

插件的安裝

先來裝個插件試試吧,就從剛纔的那個文件管理器開始吧。

在上面的vimrc文件中新增一行

Plugin 'scrooloose/nerdtree'

在命令模式下輸入【:PluginInstall】

若是出現以下的界面,就表示安裝成功啦!

最左邊的窗口就是插件安裝的顯示頁面,安裝成功的插件所有會顯示在這邊,怎麼在幾個分割窗口間跳轉呢,按<ctrl+ww>,記住,是兩個w喲。

關閉某個窗口,跳到那個窗口,命令模式輸入【:q】便可關閉。

什麼?打開沒有文件夾目錄?由於你尚未打開NERDTree呢,命令行輸入NERDTree便可打開文件夾管理目錄了,若是想要打開就會顯示當前的文件夾,在vimrc中輸入下面兩行便可

autocmd VimEnter * NERDTree                                                                                                                      
let NERDTreeShowBookmarks=1 

代碼自動補齊

YouCompleteMe - 前Google的C++工程師Valloric (Val Markovic) 開發的一款,專門用於C系(C,C++,C#) 的自動補全工具, 優勢是速度很是快,並且支持變量跳轉,函數關聯跳轉,檢測代碼報錯, 能夠說是最牛逼的補全工具,缺點是太難配置,對於除了C系語言的其餘語言補全支持並很差. 對於剛接觸Vim的同窗來講至關不友好, 不過文檔比較齊全.

Git版本控制

只支持Git 的高亮,速度很是不錯

Plugin 'vim-gitgutter'

更新和安裝插件

編輯好vimrc文件以後,須要在命令模式下輸入下面命令才能更新和安裝插件

:source %
:PlugInstall

更改在git管理下的代碼,新增一行,左側就會出現一個小+號。

經常使用的vimrc配置命令

大多數「現代」集成開發環境(IDE)都提供對方法(methods)或類(classes)進行摺疊的手段,只顯示類或方法的定義部分,而不是所有的代碼。

你能夠在.vimrc中添加下面的代碼開啓該功能:

" Enable folding
set foldmethod=indent
set foldlevel=99

你必須手動輸入za來摺疊(和取消折疊)。

讓Vim中的Tab鍵就至關於4個標準的空格符,確保每行代碼長度不超過80個字符,而且會以unix格式儲存文件,避免在推送到Github或分享給其餘用戶時出現文件轉換問題。

set tabstop=4
set softtabstop=4
set shiftwidth=4
set textwidth=79
set expandtab
set autoindent
set fileformat=unix

支持UTF-8編碼

set encoding=utf-8

開啓顯示行號:

set nu

語法高亮顯示

syntax on

關於vim的全部就講到這裏,vim其實有不少,包括linux,其實有不少可讓咱們去學習的地方,我指的學習不僅僅是指工具的使用,而是代碼層面的學習,尤爲是Linux內核的相關源碼,可讓你學到不少變成思想,也能夠說是算法,真的很精闢,看過的人都知道~~~

相關文章
相關標籤/搜索