使用vim打造自己的python編輯器

来源:http://www.cnblogs.com/linxiyue/archive/2017/11/16/7834817.html
-Advertisement-
Play Games

基礎配置 vim的配置是在用戶主目錄下的 ~/.vimrc 文件中完成的,如果沒有的話,需要自己新建一下: 首先做些簡單的配置: 為py文件添加下支持pep8風格的配置: 分割視窗 vim在編輯的時候就可以打開多個文件: :vs 或者 :vsplit 將當前視窗豎直分割,併在上面新視窗中顯示當前文件 ...


基礎配置

vim的配置是在用戶主目錄下的 ~/.vimrc 文件中完成的,如果沒有的話,需要自己新建一下:

cd ~
touch .vimrc

首先做些簡單的配置:

set nocompatible "關閉與vi的相容模式
set number "顯示行號
set nowrap    "不自動折行
set showmatch    "顯示匹配的括弧
set scrolloff=3        "距離頂部和底部3行"
set encoding=utf-8  "編碼
set fenc=utf-8      "編碼
set mouse=a        "啟用滑鼠
set hlsearch        "搜索高亮
syntax on    "語法高亮

為py文件添加下支持pep8風格的配置:

au BufNewFile,BufRead *.py
\ set tabstop=4   "tab寬度
\ set softtabstop=4  
\ set shiftwidth=4   
\ set textwidth=79  "行最大寬度
\ set expandtab       "tab替換為空格鍵
\ set autoindent      "自動縮進
\ set fileformat=unix   "保存文件格式

分割視窗

vim在編輯的時候就可以打開多個文件:

:vs  或者 :vsplit  將當前視窗豎直分割,併在上面新視窗中顯示當前文件

:vs filename 將當前視窗豎直分割,新文件在新視窗中顯示

:sp 或者:sv或者:split  將當前視窗水平分割,併在左邊新視窗中顯示當前文件

:sp filename 將當前視窗豎直分割,新文件在左邊新視窗中顯示

:new 新建文件並豎直分割

:vnew 新建文件並水平分割

如果想讓新視窗在右邊或者下方打開,添加配置:

set splitbelow
set splitright

在視窗之間切換可以用滑鼠,如果不想用滑鼠,切換按鍵如下:

  • Ctrl-w-j 切換到下方的分割視窗
  • Ctrl-w-k 切換到上方的分割視窗
  • Ctrl-w-l 切換到右側的分割視窗
  • Ctrl-w-h 切換到左側的分割視窗

覺得三個按鍵多的話可以設置快捷鍵:

nnoremap <C-J> <C-W><C-J>
nnoremap <C-K> <C-W><C-K>
nnoremap <C-L> <C-W><C-L>
nnoremap <C-H> <C-W><C-H>

這樣就不用按w鍵了。

代碼摺疊

當代碼行數很多的時候,代碼摺疊是很必須的:

set foldmethod=indent
set foldlevel=99

使用zc按鍵來創建摺疊,使用za來打開或者關閉摺疊。

za經常會誤輸入,可以用空格鍵來替代za:

nnoremap <space> za

一鍵執行python代碼

如果想直接在vim中執行python代碼,可以添加(來自https://www.zhihu.com/question/20271508):

map <F5> :call RunPython()<CR>
func! RunPython()
    exec "W"
    if &filetype == 'python'
        exec "!time python2.7 %"
    endif
endfunc

這樣,按F5鍵python代碼就可以自動執行了

插件

vim插件中最主要的就是vundle了,vundle用來管理vim的其它插件

Vundle

Vundle 是 Vim bundle 的簡稱,使用git來管理vim插件,有了它,安裝其它插件就方便很多。

項目地址https://github.com/VundleVim/Vundle.vim

首先下載源碼:

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

如果~/.vim/bundle目錄不存在,則新建目錄:

cd ~
mkdir .vim
cd .vim
mkdir bundle

然後將下列配置放在.vimrc文件的開頭:

set nocompatible              " be iMproved, required
filetype off                  " required

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

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

" All of your Plugins must be added before the following line
call vundle#end()            " required
filetype plugin indent on    " required

如果想下載某個插件,比如自動縮進indentpython.vim插件,需要將

Plugin 'vim-scripts/indentpython.vim'

置於call vundle#begin()和call vundle#end()之間,保存配置後在vim中執行

:PluginInstall

即可以自動下載indentpython.vim插件了。

bundle可以管理下載幾種不同的插件,方式如下:

github上的插件
Plugin 'tpope/vim-fugitive'
來自於http://vim-scripts.org/vim/scripts.html的插件
Plugin 'L9'
非github上的git插件
Plugin 'git://git.wincent.com/command-t.git'
本地插件
Plugin 'file:///home/gmarik/path/to/plugin'
" The sparkup vim script is in a subdirectory of this repo called vim.
" Pass the path to set the runtimepath properly.
" Plugin 'rstacruz/sparkup', {'rtp': 'vim/'}
有舊插件的情況下,下載新的插件並重命名以避免衝突
Plugin 'ascenator/L9', {'name': 'newL9'}

下載方式除了在vim中運行:PluginInstall外,還可以在命令行中運行:

vim +PluginInstall +qall

其它常用的命令:

:PluginList       - lists configured plugins
:PluginInstall    - installs plugins; append `!` to update or just :PluginUpdate
:PluginSearch foo - searches for foo; append `!` to refresh local cache
:PluginClean      - confirms removal of unused plugins; append `!` to auto-approve removal

YouCompleteMe

非常好用的自動補全插件,就是比較重。

官網地址:http://valloric.github.io/YouCompleteMe/

github地址:https://github.com/Valloric/YouCompleteMe

YouCompleteMe安裝後還需要手動編譯,然後再在.vimrc中配置。

在ubuntu中使用,首先準備一些工具:

sudo apt-get install build-essential cmake
sudo apt-get install python-dev python3-dev

使用vundle安裝:

Plugin 'Valloric/YouCompleteMe'

編譯:

cd ~/.vim/bundle/YouCompleteMe
./install.py --clang-completer

參數 --clang-completer是為了加上C系列語言的自動補全,也可以不加:

cd ~/.vim/bundle/YouCompleteMe
./install.py

耐心等待吧,要花很長時間...

複製一下預設配置文件到用戶主目錄:

cp third_party/ycmd/examples/.ycm_extra_conf.py ~/

YCM常用的一些選項,可根據個人喜好調整:

let g:ycm_min_num_of_chars_for_completion = 2  "開始補全的字元數"
let g:ycm_python_binary_path = 'python'  "jedi模塊所在python解釋器路徑"
let g:ycm_seed_identifiers_with_syntax = 1  "開啟使用語言的一些關鍵字查詢"
let g:ycm_autoclose_preview_window_after_completion=1 "補全後自動關閉預覽視窗"

開關YCM:

let g:ycm_auto_trigger = 0   "turn off
let g:ycm_auto_trigger = 1   "turn on

支持vim8的補全插件

YouCompleteMe實際上是使用jedi-vim來補全python代碼的,如果覺得YCM實在太重,可以使用支持vim8的maralla/completor.vim來補全代碼:

下載:

Plugin 'maralla/completor.vim'

下載jedi:

pip install jedi

配置:

let g:completor_python_binary = '/path/to/python/with/jedi/installed'

設置起來比YCM簡單很多了。

自動縮進插件

寫python代碼,自動縮進是必須的,可以使用indentpython.vim插件:

Plugin 'vim-scripts/indentpython.vim'

語法檢查

安裝syntastic插件,每次保存文件時Vim都會檢查代碼的語法:

Plugin 'vim-syntastic/syntastic'

添加flake8代碼風格檢查:

Plugin 'nvie/vim-flake8'

運行F7就可以進行flake8檢查了。

 配色方案

solarized配色方案已經流行很久了,github地址https://github.com/altercation/vim-colors-solarized

手動下載:

$ cd ~/.vim/bundle
$ git clone git://github.com/altercation/vim-colors-solarized.git
$ mv vim-colors-solarized ~/.vim/bundle/

或者vundle下載:

Plugin 'altercation/vim-colors-solarized'

solarized有dark和light兩種配色,配置:

syntax enable
set background=light or dark
colorscheme solarized

也可以根據gui模式和終端模式進行切換:

if has('gui_running')
    set background=light
else
    set background=dark
endif

另外一種配色Zenburn方案:

Plugin 'jnurmine/Zenburn'

兩種配色切換:

if has('gui_running')
  set background=dark
  colorscheme solarized
else
  colorscheme Zenburn
endif

nerdtree

給vim添加一個樹形目錄,地址https://github.com/scrooloose/nerdtree

下載:

Plugin 'scrooloose/nerdtree'

添加開關樹形目錄的快捷鍵:

map <C-n> :NERDTreeToggle<CR>

Ctrl+n就可以開啟目錄了。

設置忽略.pyc文件:

let NERDTreeIgnore=['\~$', '\.pyc$', '\.swp$']

為nerdtree添加git支持:

Plugin 'Xuyuanp/nerdtree-git-plugin'

如果你想用tab鍵:

Plugin 'jistr/vim-nerdtree-tabs'

vim-powerline

美化狀態欄,可以顯示當前的虛擬環境、Git分支、正在編輯的文件等信息。

Plugin 'Lokaltog/vim-powerline'

indentLine

縮進指示線,地址https://github.com/Yggdroot/indentLine

安裝:

Plugin 'Yggdroot/indentLine'

python是靠代碼縮進來判斷代碼塊的,縮進指示線還是很方便的。

vim-autopep8

自動格式化工具,安裝後運行:Autopep8就可以自動依照pep8的標準自動格式化代碼。

地址https://github.com/Yggdroot/indentLine

首先安裝autopep8:

$ pip install autopep8
Plugin 'tell-k/vim-autopep8'

可以設置快捷鍵F8代替:Autopep8:

autocmd FileType python noremap <buffer> <F8> :call Autopep8()<CR>

auto-pairs

自動補全括弧和引號等,地址https://github.com/jiangmiao/auto-pairs

Plugin 'jiangmiao/auto-pairs'

ctrlp.vim

搜索插件,在vim normal模式下,按下ctrl+p,然後輸入你要尋找的文件就行了。

地址https://github.com/kien/ctrlp.vim

Plugin 'kien/ctrlp.vim'

vim-fugitive

git集成插件,可以在vim中運行git命令,https://github.com/tpope/vim-fugitive

Plugin 'tpope/vim-fugitive'

  


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 一直都以為C/C++中形如 這樣的函數聲明其意義就是一個參數 void(沒有參數)的函數。然而今天在看C++的時候突然看到這麼一句: 這一點老師並沒有講到,學校教科書里也沒有提到,帶著好奇心,我特意試了一下 test.c 這也解釋了為什麼主函數要寫成這樣的原因 ...
  • redis集群的特點: 1.機器多,能夠保證redis伺服器出現問題後,影響較小 2.自備主從結構,自動的根據演算法劃分主從結構.動態的實現 3.能夠根據主從結構自動的實現高可用 4.實現數據文件的備份 3.Redis集群的搭建步驟: 準備9台伺服器 3主6從 一個主機下有2個子節點 7000-700 ...
  • 雖然後臺使用了讀寫分離技術,能夠在一定程度上抗擊高併發,但是如果併發量特別巨大時,主資料庫不能同時處理高併發的請求,這時資料庫容易宕機. 問題: 現在的問題是如何既能保證資料庫正常運行,又能實現用戶數據的入庫操作? 解決方案: 引入rabbitMQ技術: 說明: 當資料庫的訪問壓力過載時,這時會將過 ...
  • 首先在原有的jar包: 需Spring壓縮包中的四個核心JAR包 beans 、context、core 和expression 下載地址: https://pan.baidu.com/s/1qXLHzAW 以及日誌jar包 commons-logging 和log4j 下載地址: https:// ...
  • 註冊、驗證登錄,三次密碼錯誤關進小黑屋 ...
  • 前言 在開發過程中,我們不難發現,客戶的需求以及產品的定位對開發內容的走向有很大的決策作用,而這些往往需要在一開始就儘可能考慮周全和設計完善。為什麼說是儘可能,因為我們都知道,需求這種東西,一言難盡...作為開發者,既然無法掌控需求的變更等因素,那我們就要把握好自身能決定的工具資源等,架構設計、技術 ...
  • 一、封裝的查詢方法 /** * solr查詢方法 * @param client solr客戶端 * @param query solr查詢對象 * @return list集合 * @throws SolrServerException * @throws IOException */ publi ...
  • 最最常用的關鍵詞及音標 數據類型:boolean、byte、short、int、long、double、char、float、double。 包引入和包聲明:import、package。 用於類和介面的聲明:class、extends、implements、interface。 流程式控制制:if、e ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...