標籤:

到底 VIM 能配置到多強大的程度?

一直在使用,從來未精通。一直想把滑鼠扔了。


我認為Vim應該屬於輕量級編輯器,速度一定要快。

樓上有很多大神都把Vim配成了特別炫酷的IDE我認為就太重了。

http://laracasts.com 新出了一個vim教程的系列課程,需要的可以去看一下。

我斷斷續續用了兩年vim,看完視頻以後感覺能作為主力編輯器了。

視頻比較詳細地介紹了各個配置的作用。希望有所幫助


謝喵

雖然我是 SpaceVim/NeoVim 黨。如果你不準備用 SpaceVim 或者直接下載別人的 vimrc,那麼有幾點可以提示一下

首先是 text-object 這塊,除了默認的以外你可以考慮 argtextobj 和 vim-surround 等等增強,但是可惜的一點是,雖然 text-obj 是 Vim 開始的,但是 Emacs/Spacemacs 這方面更會玩。

然後是 vim-slime 這一塊,你可以考慮和一個 quake-like terminal 搭配,這樣你可以很方便的在調試程序是打開,而在不調試程序的時候收起。

vim-sensible 一般是所有識大體的人的選擇

熟悉 ultisnips 的 Vimmer 可能可以獲得「身手不凡,身手不凡吶」的稱號。(不過熟悉 Yas 或者類似的 emacser 也有高概率獲得如此稱號

另外稍微用得多了一點之後千萬不要一個 .vimrc 寫所有設置,最好還是分成幾個然後再 source,否則你的 .vimrc 看起來想死

為了速度,你需要 dein 或者 vim-plug 之類支持 auto-load 的插件管理

另外雖然自己用插件比較多,大部分時候 nyaovim 除了顯示代碼的主窗口只有下面的 status line 和 cmd line,以及上面的 tab line;其他的窗口比如 nerdtree, neomake 之類的都是按需打開,於是你會發現 C-w 系列其實也是很重要的

應評論曬一下自己用了 SpaceVim 之後的 init.vim,其中 layer#lang#org 是自寫的一個關於 vim-orgmode 的 layer

" Dark powered mode of SpaceVim, generated by SpaceVim automatically.
let g:spacevim_enable_debug = 0
let g:spacevim_realtime_leader_guide = 1
let g:spacevim_automatic_update = 1

call SpaceVim#layers#load("incsearch")
call SpaceVim#layers#load("autocomplete")
if has("nvim")
let g:deoplete#enable_at_startup = 1
end
set autochdir
let g:spacevim_filemanager = "nerdtree"
call SpaceVim#layers#load("lang#c")
call SpaceVim#layers#load("lang#elixir")
call SpaceVim#layers#load("lang#go")
call SpaceVim#layers#load("lang#haskell")
call SpaceVim#layers#load("lang#java")
call SpaceVim#layers#load("lang#javascript")
call SpaceVim#layers#load("lang#lua")
call SpaceVim#layers#load("lang#perl")
call SpaceVim#layers#load("lang#edit")
" call SpaceVim#layers#load("lang#php")
call SpaceVim#layers#load("lang#python")
call SpaceVim#layers#load("lang#org")
call SpaceVim#layers#load("lang#rust")
call SpaceVim#layers#load("lang#swig")
call SpaceVim#layers#load("lang#tmux")
call SpaceVim#layers#load("lang#julia")

call SpaceVim#layers#load("lang#vim")
" call SpaceVim#layers#load("lang#latex")
call SpaceVim#layers#load("lang#xml")
call SpaceVim#layers#load("shell")
call SpaceVim#layers#load("tools#screensaver")

let g:spacevim_enable_vimfiler_welcome = 1
let g:spacevim_enable_debug = 1
let g:deoplete#auto_complete_delay = 150
let g:spacevim_enable_tabline_filetype_icon = 1
let g:spacevim_enable_os_fileformat_icon = 1
let g:spacevim_buffer_index_type = 1
let g:neomake_vim_enabled_makers = []
if executable("vimlint")
call add(g:neomake_vim_enabled_makers, "vimlint")
endif
if executable("vint")
call add(g:neomake_vim_enabled_makers, "vint")
endif

let g:neomake_tex_enabled_makers = ["chktex"]

if has("python3")
let g:ctrlp_map = ""
nnoremap & & :Denite file_rec&
endif
let g:clang2_placeholder_next = ""
let g:clang2_placeholder_prev = ""

" set tabstop=2
set shiftw=2
" call dein#check_clean();
let g:spacevim_custom_plugins= [
["tpope/vim-sensible"],
["kana/vim-smartword"],
["vim-scripts/argtextobj.vim"],
["saihoooooooo/vim-textobj-space"],
["zhujinxuan/snippets-tex-equations", {"on_ft" : "tex"}],
]
let g:spacevim_unite_leader = "&"
let g:spacevim_denite_leader = "h"
let g:spacevim_snippet_engine = "ultisnips"

call SpaceVim#custom#SPC("nmap", ["c", "c"], "&

NERDCommenterInvert", "toggle comment lines", 0)
call SpaceVim#custom#SPC("nmap", ["c", "C"], "&

NERDCommenterComment", "comment lines", 0)
call SpaceVim#custom#SPC("nmap", ["c", "l"], "&

NERDCommenterInvert", "toggle comment lines", 0)
call SpaceVim#custom#SPC("nmap", ["c", "L"], "&

NERDCommenterComment", "comment lines", 0)
call SpaceVim#custom#SPC("nmap", ["c", "p"], "vip&NERDCommenterInvert", "toggle comment paragraphs", 0)
call SpaceVim#custom#SPC("nmap", ["c", "P"], "vip&NERDCommenterComment", "comment paragraphs", 0)
call SpaceVim#custom#SPC("nmap", ["b", "#"], ":b #&", "Previously active buffer(:b #)", 0)

call SpaceVim#layers#load("vim#slime")

" let g:spacevim_colorscheme = "molokai"

let g:spacevim_enable_powerline_fonts = 1
let g:spacevim_guifont="DroidSansMonoForPowerline Nerd Font:h11"
let g:spacevim_enable_tabline_filetype_icon=0
let g:spacevim_buffer_index_type = 4


瀉藥,不知道,雖然我一直在用vim但是不幸只是輕度用戶。

這裡只是偏個題,給高票的匿名用戶的回答做個註解。他可能不太了解windows下圖形界面程序的基本操作。他的回答設置了防複製,為了強答本問題只好強行從html里拷了,抱歉,雖然我相信我下面的引用應該算fair use。

比如選定一個詞,vim里 ve, 就選擇了, 用滑鼠你要把手拿到滑鼠上,指向那個詞, 雙擊?還是精確的划過整個詞?

windows的GUI程序通行的做法是ctrl+左移動到詞的開頭,shift+ctrl+方向鍵選定這個詞。

複製一個詞, vim里ye, 就複製了, hjkl ^$到想要去的地方, p 就粘貼了。 要用滑鼠, 得雙擊?ctrl + c? 再用滑鼠點到你想去的地方,ctrl + v? 效率完全不在一個檔次。

複製一個詞的做法見上面的選擇,然後ctrl+c。

hjkl^$對應到左下上右home end鍵,所以你需要一個全鍵盤而不能用HHKB。

粘貼是ctrl+v。

目測除了右手需要右移到游標區以外,沒有什麼區別。

想把一行複製100遍, yy100p.

確實做不到,我的做法是ctrl+v 4次,全選,ctrl+v 4次,全選,ctrl+v 3次。不過話說回來,你什麼時候需要複製100遍來著。

想刪除一個詞, vim里de, 就刪除了, 想刪除2個?2de, 刪除一行 dd, 刪除10行10dd. eclipse快捷鍵我記得也不少,但沒有這麼方便的。

ctrl+delete 刪除一個詞

想刪除兩個,ctrl+delete ctrl+delete

刪除一行:home移動到行首,shift+下,delete。

刪除10行的話,唔……你要是開了相對行數的話確實vim有優勢,否則計算行數的時間還不如滑鼠框,或者d/}一類的

想刪除一個方法 {} 里所有的代碼? 我記得用滑鼠得拖好長吧?然後再Backspace? vim里di{ 。想把(String abc, int def) 清空為() 同理, di( 。清空[] di[ 。 要是想連帶著刪除[]和它裡面的所有東西 da[ 。知道上面這些在哪兒非常有用不? 那種超級嵌套200多個if{}的代碼裡面你用滑鼠選定某個{}裡面的內容大概可能花多長時間?10秒選出來不出錯你就是高手了, 但用vim不到1秒搞定。

我覺得超級嵌套200多個if的代碼,我會需要很多閱讀時間才敢修改,這時候追求操作是1秒還是10秒不太影響效率……真的……

不過確實這個用windows GUI通用快捷鍵是做不到的,你需要IDE或者針對編程優化過的編輯器的支持。

後面還有幾個例子,不想再查看源代碼拷過來了,就不寫了。

總之,你舉的例子里有相當比例可以通過Windows GUI的通用快捷鍵來以幾乎相同的擊鍵數來實現,而這些快捷鍵可能從瀏覽器到記事本到word到你的IDE里都能使用,熟練掌握它們是很有好處的。


推薦兩個配置

- spf13/spf13-vim · GitHub 再不用折騰了。。。看 star 數就知道很牛逼了

- humiaozuzu/dot-vimrc · GitHub

下面那個配圖:


在用vim之前我用過:

VC++6.0(學校教材配套,古董級別,非常尷尬)

dev C++(比VC++6.0先進,但是不夠美觀)

Codeblocks (據說是區域賽標配,直到去年北京…各方面都還行,很多ACMer主要寫代碼的地方)

Xcode (換了電腦之後codeblocks解析度不夠,換了對應平台的Xcode,反應速度很慢,手速過快了會有卡頓)

最後實在忍受不了Xcode的卡頓和高耗電,才花了幾天時間學習了編輯器之神vim,然後就回不去了,不想再碰方向鍵…

自己慢慢摸索的vim配置文件,尤其適用於ACMer。

"ACM .vimrc配置文件

"基本配置
set transparency=11 "透明度
"set background=dark "黑色背景
syntax on
syntax enable
set mouse=a
set mousehide
set encoding=utf-8
scriptencoding utf-8
set backup "undo?
"inoremap { {&}&O
"花括弧匹配相關
inoremap { {}&i
inoremap {& {&}&O
set cursorline "高亮當前行
set number "行數
set autoindent "自動縮進
set smartindent "智能縮進
set cindent "C系列縮進
set softtabstop=4 "縮進長度
set shiftw=4 "縮進長度
set tabstop=4 "tab鍵長度
set expandtab "tab設為空格
set softtabstop=4 "縮進長度
colorscheme desert "配色沙漠 還有: torte, solarized, molokai, phd, ron, evening 等經典配色
set showmatch "自動匹配
set ruler "在右下角顯示當前行信息
set incsearch "搜索加強
set hlsearch "搜索高亮
set guioptions-=T "一出工具欄
set showcmd "顯示出輸入的命令
set guifont=Menlo:h15 "字體和大小
set lines=55 "窗口多長,下為多寬
set columns=100
set whichwrap=b,s,&<,&>,[,] " 游標從行首和行末時可以跳到另一行去
set scrolloff=3 "游標移動到上下兩端,保持3行距離
set history=1000 "歷史記錄條數從20到1000
set autowrite "自動保存
set guioptions-=m "隱藏菜單欄
set ignorecase "搜索忽略大小寫
filetype plugin indent on "自動檢測文件類型並啟動相關縮進插件
filetype plugin on "不同文件類型載入相應插件
filetype on "檢查文件類型
set cmdh=2 "命令行高度加1
" 讓配置變更立即生效
autocmd BufWritePost $MYVIMRC source $MYVIMRC
" 關閉兼容模式
"set nocompatible
" vim 自身命令行模式智能補全
set wildmenu

"自定義一些快捷鍵
let mapleader=";" "自定義前綴鍵
" 定義快捷鍵到行首和行尾
nmap LB 0
nmap LE $
" 設置快捷鍵將選中文本塊複製至系統剪貼板
vnoremap &y "+y
" 設置快捷鍵將系統剪貼板內容粘貼至 vim
nmap &p "+p
" 定義快捷鍵關閉當前分割窗口
nmap &q :q&
" 定義快捷鍵保存當前窗口內容
nmap &w :w&
" 定義快捷鍵保存所有窗口內容並退出 vim
nmap &WQ :wa&:q&
" 不做任何保存,直接退出 vim
nmap &Q :qa!&
" 依次遍歷子窗口
nnoremap nw &&
" 跳轉至右方的窗口
nnoremap &lw &l
" 跳轉至左方的窗口
nnoremap &hw &h
" 跳轉至上方的子窗口
nnoremap &kw &k
" 跳轉至下方的子窗口
nnoremap &jw &j
" 定義快捷鍵在結對符之間跳轉
nmap &M %

"按&自動生成代碼設置
if !exists("*SetTitlea")
map & :call SetTitlea()&
func SetTitlea()
let l = 0
let l = l + 1 | call setline(l,"/************************************************")
let l = l + 1 | call setline(l," *Author* :jibancanyang")
let l = l + 1 | call setline(l," *Created Time* : ".strftime("%c"))
let l = l + 1 | call setline(l,"**Problem**:")
let l = l + 1 | call setline(l,"**Analyse**:")
let l = l + 1 | call setline(l,"**Get**:")
let l = l + 1 | call setline(l,"**Code**:")
let l = l + 1 | call setline(l,"*********************************************/")
let l = l + 1 | call setline(l,"")
let l = l + 1 | call setline(l,"#include &")
let l = l + 1 | call setline(l,"#include &")
let l = l + 1 | call setline(l,"#include &")
let l = l + 1 | call setline(l,"#include &")
let l = l + 1 | call setline(l,"#include &")
let l = l + 1 | call setline(l,"#include &")
let l = l + 1 | call setline(l,"#include &")
let l = l + 1 | call setline(l,"#include &")
let l = l + 1 | call setline(l,"#include &")
let l = l + 1 | call setline(l,"#include &")
let l = l + 1 | call setline(l,"#include &")
let l = l + 1 | call setline(l,"#include &")
let l = l + 1 | call setline(l,"#include &")
let l = l + 1 | call setline(l,"using namespace std;")
let l = l + 1 | call setline(l,"typedef pair& pii;")
let l = l + 1 | call setline(l,"typedef long long ll;")
let l = l + 1 | call setline(l,"typedef unsigned long long ull;")
let l = l + 1 | call setline(l,"typedef vector& vi;")
let l = l + 1 | call setline(l,"#define pr(x) cout &<&< #x &<&< ": " &<&< x &<&< " " ") let l = l + 1 | call setline(l,"#define pl(x) cout &<&< #x &<&< ": " &<&< x &<&< endl;") let l = l + 1 | call setline(l,"#define pri(a) printf("%d ",(a))") let l = l + 1 | call setline(l,"#define xx first") let l = l + 1 | call setline(l,"#define yy second") let l = l + 1 | call setline(l,"#define sa(n) scanf("%d", (n))") let l = l + 1 | call setline(l,"#define sal(n) scanf("%lld", (n))") let l = l + 1 | call setline(l,"#define sai(n) scanf("%I64d", (n))") let l = l + 1 | call setline(l,"#define vep(c) for(decltype((c).begin() ) it = (c).begin(); it != (c).end(); it++) ") let l = l + 1 | call setline(l,"const int mod = int(1e9) + 7, INF = 0x3f3f3f3f;") let l = l + 1 | call setline(l,"const int maxn = 1e5 + 13;") let l = l + 1 | call setline(l,"") let l = l + 1 | call setline(l,"") let l = l + 1 | call setline(l,"") let l = l + 1 | call setline(l,"int main(void)") let l = l + 1 | call setline(l,"{") let l = l + 1 | call setline(l,"#ifdef LOCAL") let l = l + 1 | call setline(l," //freopen("in.txt", "r", stdin);") let l = l + 1 | call setline(l," //freopen("out.txt", "w", stdout);") let l = l + 1 | call setline(l,"#endif") " let l = l + 1 | call setline(l," ios_base::sync_with_stdio(false),cin.tie(0),cout.tie(0);") let l = l + 1 | call setline(l," ") let l = l + 1 | call setline(l," return 0;") let l = l + 1 | call setline(l,"}") endfunc endif "按F5一鍵編譯並運行 map & :call CompileRunGcc()&
func! CompileRunGcc()
exec "w"
if filetype == "c"
exec "!g++ % -DLOCAL -o %&<" exec "!time ./%&<" elseif filetype == "cpp" exec "!g++ % -std=c++11 -DLOCAL -Dxiaoai -o %&<" exec "!time ./%&<" elseif filetype == "java" exec "!javac %" exec "!time java %&<" elseif filetype == "sh" :!time bash % elseif filetype == "python" exec "!time python3.5 %" endif endfunc


配置完善的VIM真的非常強大,大概工作效率能達到Visual Studio的三分之一左右,簡直驚人


======================2016 02 15 道歉==============================

不好意思, 我才發現我答非所問了。。。。。。。。。。。以為題目是vim可以強大到什麼程度

vim配置的強大, 主要看你應用場景, 比如我寫golang, 使用

GitHub - fatih/vim-go: Go development plugin for Vim

這個配置, 就可以使用vim完成寫golang 代碼, 編譯, 運行, 跑測試用例等各種東西, 基本上不需要額外再開一個命令行什麼的。對開工程目錄,最近編輯文件,代碼提示等等 ,感覺上都是只有你想不到,沒有你找不到的。

所以能配置到多強大的程度, 就看你首先用它幹什麼, 比如你要寫php, 然後 到google 搜php vim github, 基本上有能讓你爽到不行的vim配置。而且現在根據github上已經有的方案配置vim方便得不要不要的。

======================道歉OVER====================================

最主要要有應用環境。

===============================裝逼預警================================

我一開始寫java的,之前用eclipse,覺得vim沒啥厲害的, 後來到下一個公司,被安排進了一個PHP項目, 旁邊坐了個牛人,教了我一周的vim, 我才明白vim比ide強在哪兒。當然我用也用了那個牛人的vim配置。

當時印象最深的一點就是有一個下午癱在椅子上幾乎沒碰滑鼠狂寫代碼,整個下午姿勢都沒換,寫完一段,快捷鍵切到瀏覽器,F5看效果,有問題切回來直接vim里修改,修改完切到瀏覽器F5,幾乎沒有滑鼠什麼事兒。沒有過這種經歷的人可能不明白,但真的習慣了vim, 感覺寫代碼用滑鼠完全就是浪費生命。

比如選定一個詞,vim里 ve, 就選擇了, 用滑鼠你要把手拿到滑鼠上,指向那個詞, 雙擊?還是精確的划過整個詞?

複製一個詞, vim里ye, 就複製了, hjkl ^$到想要去的地方, p 就粘貼了。 要用滑鼠, 得雙擊?ctrl + c? 再用滑鼠點到你想去的地方,ctrl + v? 效率完全不在一個檔次。

想把一行複製100遍, yy100p.

想刪除一個詞, vim里de, 就刪除了, 想刪除2個?2de, 刪除一行 dd, 刪除10行10dd. eclipse快捷鍵我記得也不少,但沒有這麼方便的。

想刪除一個方法 {} 里所有的代碼? 我記得用滑鼠得拖好長吧?然後再Backspace? vim里di{ 。想把(String abc, int def) 清空為() 同理, di( 。清空[] di[ 。 要是想連帶著刪除[]和它裡面的所有東西 da[ 。知道上面這些在哪兒非常有用不? 那種超級嵌套200多個if{}的代碼裡面你用滑鼠選定某個{}裡面的內容大概可能花多長時間?10秒選出來不出錯你就是高手了, 但用vim不到1秒搞定。

什麼? 你不想刪除{}里的東西 ,你想複製? 把上面所有的d換成y。想選定? 把d換成v。

想要把下面格式的10000行的excel變成sql

小明 男 紅旗小學 一年二班 12歲-----&> insert into xxooxxoo...................

vim只需要錄個名為a的宏(具體怎麼錄宏想學的請google)記錄下來第一行是怎麼變成insert into xxooxxxooxoxox,然後 9999@a, 搞定! 前後時間也就花3分鐘。ide完全辦不了這事兒(列編輯也辦不了這事兒).

你想到文件頭瞧瞧, gg. 想到文件尾瞧瞧, G. 想到220行看看, 220gg. 想到這一行的最開頭, ^, 想到這行的最後邊, $.

用ide的時候有沒有想複製一大段代碼, 但用滑鼠拖著拖著斷線兒了? vim里不會出現這種情況, 直接v, 然後按j到你想到的地方就可以。一直按j很麻煩, 你知道你想從200行選擇到541行? 簡單, 200ggv541gg。v選擇之後,直接y就複製了, 然後jkhl^$到你想要去的地方, p就可以了, 滑鼠加滾輪加 ctrl + c ctrl + v麻煩不麻煩。

想編輯別的文件?安了nerdtree配置好了, 一般,nn就把當前文件所在的項目目錄調出來了,jk選擇想要編輯的, u到上層文件夾, 選擇之後就可以直接編輯。

想編輯最近編輯的文件? 我也忘了配置了什麼插件, 直接,f就可以調出最近編輯的文件列表, jk選擇回車即可。

根據上面說的, 單純的寫代碼,滑鼠基本上沒什麼用了~~ 而且真的熟悉了這些快捷鍵,效率快得一逼。因為你手從鍵盤換到滑鼠其實挺浪費時間和注意力的,再一個用滑鼠來定位選擇代碼,也是挺沒效率的。

=======================================裝逼結束===========================

上面扯了一堆, 反正算裝逼也算科普吧,vim讓人告別了滑鼠,快捷鍵完全滿足了寫代碼的需求,雙手可以一直癱在鍵盤上。告別了各種重複的體力勞動,想重複幾次直接輸入數字加操作即可,如 100yy, 100dd, 100p, 100@a什麼的。代碼提示什麼的基本上用插件不會差太多,反正我寫php和golang的時候,插件提示完全足夠。但學習曲線確實比較陡,而且一開始轉型會超級不習慣,最好旁邊有個熟人帶著會比較好。

現在寫java是用idea + vim, C#還是visualStudio , vs貌似有vim插件但收費然而我太窮(2016 02 16更正:感謝 @馬琛 ,剛才看了下VsVim確實是免費的, 不過我13年看的時候確實好像是收費的。。。年紀大了記性不好了~~)。 其他的什麼golang react-native angularjs ionic一律配置的vim(大概配置直接到github上找個星多的就OK), 爽得一逼。尤其寫angularjs ionic react-native 的時候有live reload, 每次:w 回車之後直接看到效果的感覺不要太爽。


等你真的精通了 Vim,你就會想要造個像 Neovim 這樣的輪子,於是你發現已經有人造出來了。於是你開始想為它實現一個 GUI Client。


請參考 exVim exVim: Home

雖然 star 數不多,但是錯過了也許是你一生的遺憾,這個配置我自己用了8年有餘了,你看那些個 spf13 或者其他的 Vim 配置好像 Github Star 數量很高很耀眼,但是他們都是偏前端或輕量編程的,而且都是給華麗麗的高配置機器使用,機子不好的時候編輯起來感覺有些延遲. 我當時開發 exVim 是用來做 c/c++ 次時代 AAA Console遊戲項目的。結果搞到最後不僅輕巧飛快,而且做前端,後端,腳本,shader,shell都可以迅速使用。


GitHub - DemonCloud/Aix-Vim: YiJun"s Aix-Vim Crazy dotfile ::BOOM!!!

上圖不說話。


是否強大跟你的需求有很大關係,再強大又用不上有什麼意義 :)。而且,到最後你會發現所有的 vim 配置其實都大同小異,不管怎麼包裝,講來講去的都只是那點東西而已,極易學習與模仿。

所以,看臉的時代還是整個自己覺得實在與 「漂亮」 的。畢竟,一個人的品味可不是輕易學得到的~

liuchengxu/space-vim


SpaceVim 中文手冊

項 目 主 頁: spacevim.org

Github 地址 : SpaceVim GitHub, 歡迎Star或fork。

SpaceVim 是一個社區驅動的模塊化 vim/neovim 配置集合,其中包含了多種功能模塊,並且針對 neovim 做了功能優化。spacevim 有多種功能模塊可供選擇,用戶只需要選擇需要的模塊,就可以配置出一個適合自己的開發環境。

使用過程中遇到問題或者有什麼功能需求可以在 github 提交 issue,這將更容易被關注和修復。我們也歡迎喜歡 vim/neovim 的用戶加入我們的 QQ 群,一起討論 vim 相關的技巧,點擊加入Vim/SpaceVim用戶群。

================================== 2017-07-12

全工程代碼實時檢索:


或許你可以參考一下我1000+行的vimrc https://github.com/ppwwyyxx/dotvim

跟IDE比起來的話 補全和重構確實是個問題, 不過近年出現了很多vim下的semantic-based的補全插件, 如clang_complete, jedi. java還可以用eclim..也都不差


一共用了九個插件…

還有自己實現的一些功能…

比如保存自動判斷頁頭裡作者是否是我,如果是更新頁頭版權信息文件名和更新時間,另外可呼叫函數一條命令添加頁頭版權信息。

保證界面不亂就是定製快捷鍵來打開各種功能,並添加相關autocmd來觸發運行界面重畫函數. 以下是我關於界面的快捷鍵…

"******************************************************************************

" Keyboard for Fx

"******************************************************************************

map & :call LocateFile()&

map & :call ResetWorkspace()&

map & :call ResetSimple()&

map & :call HandleOpe("unite","open")&

map & :call HandleOpe("quickfix","open")&

map & :call MakeDebug()&

map & :call MakeBrowser("chrome")&

map & :call MakeBrowser("firefox")&

我用的插件和地址列一下:

"******************************************************************************

" Vundle

" https://github.com/VundleVim/Vundle.vim

"******************************************************************************

" NERDtree

" https://github.com/VundleVim/scrooloose/nerdtree

"******************************************************************************

" MiniBufferExplorer

" fholgado/minibufexpl.vim

"******************************************************************************

" Tagbar

" https://github.com/VundleVim/majutsushi/tagbar

"******************************************************************************

" Unite

" https://github.com/VundleVim/Shougo/unite.vim

"******************************************************************************

" Unite-Neomru

" https://github.com/VundleVim/Shougo/neomru.vim

"******************************************************************************

" FencView

" https://github.com/VundleVim/adah1972/fencview

"******************************************************************************

" CssColor

" https://github.com/VundleVim/ap/vim-css-color

"******************************************************************************

" Emmet

" https://github.com/VundleVim/mattn/emmet-vim

"******************************************************************************

" UltiSnips

" https://github.com/VundleVim/SirVer/ultisnips

"******************************************************************************

" Vim-Snippets

" https://github.com/VundleVim/honza/vim-snippets

"******************************************************************************

" MatchTagAlways (Need Python)

" https://github.com/VundleVim/Valloric/MatchTagAlways

"******************************************************************************

" Neocomplete (Need Lua)

" https://github.com/VundleVim/Shougo/neocomplete.vim

"******************************************************************************

" YouCompleteMe (Need Python)

" https://github.com/VundleVim/Valloric/YouCompleteMe

"******************************************************************************

話說當時配色當時差點搞瘋我,最後把配色改成了我要的風格…

至今任覺得vim撤銷不行,步驟多會亂掉。

有空研究下…


非常棒的vim配置文件,由plurk的大牛寫的

http://amix.dk/vim/vimrc.html

讀懂這個配置文件,加上適合自己習慣的修改更好,我覺得它比eclipse/netbeans還快而且更方便。

在換到vim之前我用過好幾年eclipse和netbeans,自覺得非常熟悉,就差自己寫插件了。除了普通編輯器都有的功能,最喜歡它們自動提示補全,跳轉到定義,文件間來回跳轉,代碼模版,強大的重構等功能。而這些功能,除了重構,其他的vim都有能匹配的替代方式。最重要的是,vim寫程序有「一氣呵成」的感覺,思路連貫,不會被編輯操作打斷。

除了寫java,vim已經是我主要的ide(不過我從來都是幾個ide同時開著,哪個方便用哪個,畢竟vim是為編輯而生,而netbeans查函數定義什麼的很方便,eclipse的重構還有插件很強大)


非編輯器愛好者表示,就算vim的插件這麼多,還是沒有一個人能成功地把gdb好好地集成進去,都只有半成品。clion雖然比vim好用,但是太他媽卡了,在ubuntu下面幹活就是沒辦法省心。


看了題主的題目跟描述貌似問題的目的不一致呀

光從題目來說, vim 確實可以配置到跟 IDE 相似的功能:

  • 語法檢查

  • 自動補全

  • 文件瀏覽

  • 執行命令行命令

  • key mapping
  • 還有各種各樣的插件這裡就不啰嗦了。。。

而看題主的題目描述的意思卻是想要提高自己 vim 的熟練度。

最近工作的原因,從 sublime 跳到 vim 玩了。之前也就會 insert 和 ctrl + c 而已。練了 2、3 天就很熟悉了。主要是強制自己不使用滑鼠,強制自己只使用 vim 來編碼。

可以參考一些童鞋的 vimrc 配置,最主要是看懂,然後根據自己的喜歡來配置。我覺得自己的配置還是比較簡單,適合參考,列出來跟題主參考下(也是從別人那裡學來然後自己配置,現在已經很熟練了):shonenada / dotfiles
/ source / vimrc / vimrc

最後送題主幾句話:

vim 是需要慢慢學習的,不要盲目做「強大」的配置,強大的配置需要更強大的能力來 handle 。:) good luck。


作為vim愛好者,我只想反覆強調:vim不需要插件來表示它的強大。針對很多其他答案中搞得花里胡哨的IDE界面,我就想評論一句:老子用vim就是不想看到那麼多煩心的窗口擋住我的代碼,你們弄這堆東西出來是幾個意思?

我覺得實在點,題主不如直接問在vim中要解決某某問題應該如何做,解決掉這些問題,你就不用糾結用什麼插件了。


他們自稱只用vim,只是想說,雙手打字以證清白而已。

實際上之所以非用vim,只是為了ssh的時候有辦法改東西,僅此而已。世界上最好的編輯器,永遠是你所熟悉的那個,而不是別人熟悉的。

此外不要迷信所謂的效率。軟體開發的效率,取決于思考,而不是打字速度。


自己寫的一個項目,還在修改。方便新手使用。目前只配置了windows下面的。

常見的IDE功能都支持了,下載安裝就可以用。

項目地址:https://github.com/shenghe/EasyVim

下載地址:https://github.com/shenghe/EasyVim/blob/master/zh_CN/package/EasyVim1.0beta_Win_zh_CN.exe


推薦閱讀:

你最愛的一個 Vim 命令是什麼?
為什麼vimrc設置inoremap <c-h> <left>無效?
vim顯示^@是什麼意思啊?
VIM如何永久性顯示行號?

TAG:Vim |