【CNMP系列】VIM編輯器詳解


緣起

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

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

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

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

記住這句話:【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內核的相關源碼,可以讓你學到很多變成思想,也可以說是算法,真的很精辟,看過的人都知道~~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM