當前位置:
首頁 > 知識 > 打造自己的Python編碼環境

打造自己的Python編碼環境

趁著放假,重新配置了一下自己的Mac的編程環境,畢竟新年新氣象嘛,主要是iTerm2、Zsh、Vim優化、Consolas字體、NoisyTyper,這些的相關配置。工欲利其事必先利其器,好的編碼環境可以提升我們的打碼的幸福感。好的編碼環境包括美觀(視覺),聲音(聽覺),流暢度(觸覺),工作環境(嗅覺,味覺)等多個方面。後面有幾張配置後的圖片感受一下,主要看字體和配色(有些人可能覺得比較丑,個人喜歡黑紫,配色和字體有很多選擇,各有所好,求別噴 XD)。


Zsh效果


Vim效果




【準備階段:器】


iTerm2:是os系統中的一個替代終端。主要優點:屏幕分割(可以水平分割和垂直分割),選中即複製,快速查找(command+f),配色字體自定義化,自定義快捷鍵等。



Consolas:微軟下最好看的字體之一,個人認為很適合程序員,除開字體好看外,主要原因是它的數字「0」字加入了一斜撇,以方便與字母「o」分辨。這也是我和它結緣的主要緣由,當年在某次acm比賽中,就是因為肉眼無法分辨是0還是o,遺憾至今。


Zsh:zsh和bash一樣是Shell的一種。相比bash:更高效、更好的自動補全、更好的文件名展開(通配符展開)、更好的數組處理、可定製性高。mac下自帶了zsh,無需再安裝。


Vim:是一個類似於Vi的著名的功能強大、高度可定製的文本編輯器,在Vi的基礎上改進和增加了很多特性。和Emacs並列成為類Unix系統用戶最喜歡的編輯器。估計大家都很熟悉,不做累述。


NoisyTyper:一款提升你打字逼格的軟體,可以讓你打字的時候發出打字機的聲音,咔咔咔這樣。


上面幾個安裝都比較簡單,教程也比較多。這裡主要講一下mac下consolas字體的安裝。



$

brew install

cabextract

$

cd

~/

Downloads

$

mkdir

consolas

$

cd

consolas

$

curl

-

O

http

://

download

.

microsoft

.

com

/

download

/

f

/

5

/

a

/

f5a3df76

-

d856

-

4a61

-

a6bd

-

722f52a5be26

/

PowerPointViewer

.

exe

$

cabextract

PowerPointViewer

.

exe

$

cabextract

ppviewer

.

cab

$

open

CONSOLA

*

.

TTF


最後按下彈出窗口的安裝鍵就ok了。



【打磨階段:利器】

上面的工具準備好了後,就可以開始配置這些工具了。


Zsh配置


oh-my-zsh:一套強大的開源zsh配置文件。安裝如下:



//

使用

curl

安裝

$

sh

-

c

"$(curl -fsSL https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

//

或者使用

wget

安裝

$

sh

-

c

"$(wget https://raw.github.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"

//

安裝後重新載入配置

$

source

.

zshrc



oh-my-zsh主題: oh-my-zsh有多款配套主題,點擊前面的主題鏈接可以看到所有主題。這裡主要介紹下agnoster主題。修改zsh配置文件(~/.zshrc)中的主題屬性為agnoster即可。官方圖如下:



安裝這個主題需要額外安裝powerline字體,不然會顯示亂碼。如果你想隱藏自己的用戶名信息,需要在zsh配置文件中設置默認用戶。具體安裝配置如下:



//

修改

zsh

配置文件

$

vim

~/

.

zshrc

ZSH_THEME

=

"agnoster"

//

.

zshrc

中修改

ZSH_THEME

DEFAULT_USER

=

username

//

.

zshrc

中添加或者修改默認用戶為自己,開啟終端後就不會顯示自己的用戶名信息

$

source

~/

.

zshrc

//

重新載入配置文件

//

poweline

font

安裝

$

git clone

https

://

github

.

com

/

powerline

/

fonts

.

git

$

cd

powerline

$

.

/

install

.

sh



iTerm2配置


字體:接著要在iterm2的Perferences中Text中選擇常規字體 為consolas字體或者其他你喜歡的字體,非ASCII碼字體為powerline字體(一定要是名字中帶powerline的字體,不然還是亂碼)。如下:



iTerm2配色:從這裡可以獲取很多別人的配色主題,把整個項目git clone下來,然後在iterm2的Perferences中的Colors最下面的Load Presets中import git下來的schemes文件夾裡面itermcolors後綴的文件,自己可以根據自己喜歡調整自己喜歡的顏色,我選的是Fish Tank,我自己微調了一些配色。如下:



Vim配置


之前一直用spf13,但是打開大文件太卡了,所以自己重新配置了一份。實測打開8000+行代碼的文件,因為語法檢測,所以大概延時1s左右,之後操作很順暢。在配置過程中會遇到很多蛋疼的地方。需要比較系統的學習一下vim腳本的語法和相關配置方法,vim網上很多配置好文,如《像 IDE 一樣使用 vim》,還有《vim 腳本學習文檔》,我就不累述了,配置文件的注釋寫的比較詳細。我的配置主要針對python開發,另外需要額外安裝python包flake8。具體如下:


vimrc文件,主要是vim基礎配置。(highlight.js不支持vim script,有點蛋疼)



" 相關vim腳本文檔 http://vimdoc.sourceforge.net

"

相關好文

https

://

github

.

com

/

yangyangwithgnu

/

use_vim_as

_

ide

" 導入vim插件管理文件

if filereadable(expand("

~/

.

vimrc

.

bundles

"))

source ~/.vimrc.bundles

endif

"

基本配置

set

nocompatible

"不要vim模仿vi模式,建議設置,否則會有很多不兼容的問題

set mouse=a "

啟動滑鼠所有模式,但是右鍵功能不可用

,

可以保證滑鼠滾屏在當前屏幕內

set

mousehide

" 輸入文件時隱藏滑鼠

set backspace=indent,eol,start "

退格鍵分別可刪除縮進,上一行結束,

insert

之前的字

set

showmatch

" 設置匹配模式

set nobackup "

不備份

set

nowritebackup

" 不寫入備份文件

set noswapfile "

關閉交換文件

set

history

=

500

" history存儲長

set ruler "

顯示標尺

set

showcmd

" 顯示輸入命令

set incsearch "

搜索時自動匹配

set

hlsearch

" 高亮搜索項

set ignorecase "

無視大小寫

set

smartcase

" 如果有大寫就區別大小寫匹配

set laststatus=2 "

總是顯示狀態欄

" set autowrite "

切換文件自動保存

https

://

github

.

com

/

terryma

/

vim

-

multiple

-

cursors

/

raw

/

master

/

assets

/

example1

.

gif

?

raw

=

true

set

shortmess

=

atI

" "

關閉歡迎頁面

set

viewoptions

=

cursor

,

folds

,

slash

,

unix

" viminfo 記錄的內容

set virtualedit=onemore "

游標可以移到當行最後一個字元之後

set

hidden

" 切換文件不保存,隱藏

"

set

confirm

" 退出前驗證

"

set

spell

" 拼寫檢查

set linespace=0 "

行之間沒有多餘的空格

set

wildmenu

" 自動補全時的文件菜單

set wildmode=list:longest,full "

自動補全時,匹配最長子串,列出文件

set

whichwrap

=

b

,

s

,

h

,

l

,

<

,

>

,[,]

" 行尾可右移到下行,行首左移到上行,b:退格,s:空格,hl:左右,<>:n/v模式下的左右,[]:i/r模式下的左右

set scrolljump=5 "

游標離開屏幕範圍

set

scrolloff

=

3

" 游標移動至少保留行數

"

格式

set

nowrap

" 取消自動折行

"

set

smarttab

set

tabstop

=

4

" tab=4空格

set softtabstop=4 "

回退可以刪除縮進

set

shiftwidth

=

4

" 縮進位寬=4個空格位

set autoindent "

自動縮進

set

expandtab

" tab由空格表示

set nojoinspaces "

J

合并兩行用一個空格隔開

set

splitright

" 用vsplit新建窗口,讓新的放右邊

set splitbelow "

split

新建窗口,讓新的放下面

set

pastetoggle

=<

F12

>

" 指定F12進入黏貼模式,可以正常複製縮進

set iskeyword-=. "

"."

作為單詞分割符

set

iskeyword

-=

# " 讓"#" 作為單詞分割符

set

iskeyword

-=-

" 讓"-" 作為單詞分割符

set listchars=tab:? ,trail:?,extends:#,nbsp:. "

空格等無效字元顯示

set

textwidth

=

80

" 內容寬度

set fileencodings=utf-8,gb18030,gbk,big5 "

文件編碼

" 開啟新的buffer時,自動轉到對應文件目錄

let g:autochdir = 1

if exists("g:autochdir")

autocmd BufEnter * if bufname("") !~ "

^

[

A

-

Za

-

z0

-

9

]

*://

" | lcd %:p:h | endif

endif

"

設置

u

的返回步數限制

if

has

(

"persistent_undo"

)

set

undofile

" 開啟u回滾文件記錄

set undolevels=1000 "

最大數量的改變回滾

set

undoreload

=

10000

" 最大數量重載可回滾行數

endif

"

特殊文件打開

autocmd

BufNewFile

,

BufRead

*

.

py

,

*

.

pyw set

filetype

=

python

autocmd

BufNewFile

,

BufRead

*

.

html

.

twig set

filetype

=

html

.

twig

autocmd FileType haskell setlocal expandtab

shiftwidth

=

2

softtabstop

=

2

autocmd

BufNewFile

,

BufRead

*

.

coffee set

filetype

=

coffee

autocmd FileType haskell setlocal

commentstring

=--

%

s

autocmd FileType haskell setlocal

nospell

" key 映射

let mapleader = "," "

全局

leader

設置

let

maplocalleader

=

"_"

" 本地leader設置

"

設置

tag

window

間快速跳轉

let

g

:

easyWindows

=

1

if

exists

(

"g:easyWindows"

)

" 向上

map j_

"

向下

map

<

C

-

K

> <

C

-

W

>

k

<

C

-

W

>

_

" 向右

map l_

"

向左

map

<

C

-

H

> <

C

-

W

>

h

<

C

-

W

>

_

endif

" 處理摺疊行的左右移動

noremap j gj

noremap k gk

"

sudo

卻想保存

cmap

w

!!

w

!

sudo

tee

% >/

dev

/

null

" ,fc查找衝突的地方

map fc /^[<|=>]{7}( .*|$)

"

,

ff

查找游標後的單詞位置,列出選擇項

nmap

<

Leader

>

ff

[

I

:

let

nr

=

input

(

"Which one: "

)

<

Bar

>

exe

"normal "

.

nr

.

"[ "

<

CR

>

" 屏幕左移和右移

map zl zL

map zh zH

"

映射

vsp

這些開啟新的

buffer

,

默認目錄為當前目錄

cnoremap

%% <

C

-

R

>=

fnameescape

(

expand

(

"%:h"

)).

"/"

<

cr

>

map

<

leader

>

ew

:

e

%%

map

<

leader

>

es

:

sp

%%

map

<

leader

>

ev

:

vsp

%%

map

<

leader

>

et

:

tabe

%%

" 黏貼板

if has("clipboard")

if has("unnamedplus")

set clipboard=unnamedplus

else

set clipboard=unnamed

endif

endif

"

字體的設置

set

guifont

=

Consolas

,

Bitstream_Vera_Sans_Mono

:

h9

:

cANSI

"設置gui下的字體

set gfw=幼圓:h10:cGB2312

"

語法高亮

syntax

on

" 縮進和md文件

filetype plugin indent on "

自動根據類型啟動對應插件,縮進開啟

" 設置主題,UI

"

solarized

主題

set

background

=

dark

if

filereadable

(

expand

(

"~/.vim/bundle/vim-colors-solarized/colors/solarized.vim"

))

let

g

:

solarized_termcolors

=

256

let

g

:

solarized_termtrans

=

1

let

g

:

solarized_contrast

=

"normal"

let

g

:

solarized_visibility

=

"normal"

color

solarized

" Load a colorscheme

endif

set cursorline "

選中行高亮

autocmd

BufEnter

*

.

py set

cc

=

81

" 打開py文件81行高亮

"

之前的高亮線太難看,重新制定顏色,這裡的

black

iterm2

顏色配置中的

black

一樣

hi CursorLine

cterm

=

NONE

ctermbg

=

black

guibg

=

black

hi CursorColumn

cterm

=

NONE

ctermbg

=

black

guibg

=

black

"

highlight ColorColumn ctermbg=black guibg=black

set number "

設置行號

hi LineNr

ctermbg

=

black

" Indent Guides 縮進列對齊線

let g:indent_guides_start_level = 2

let g:indent_guides_guide_size = 1

let g:indent_guides_enable_on_vim_startup = 1

"

airline

就是狀態欄的箭頭

let

g

:

airline_theme

=

"dark"

let

g

:

airline_powerline_fonts

=

1

let

g

:

airline

#extensions#tabline#enabled = 1

let

g

:

airline

#extensions#tabline#buffer_nr_show = 1

" NerdTree配置 control+e打開當前文件目錄樹

map :NERDTreeToggle

map ee :NERDTreeToggle

nmap nt :NERDTreeFind

let NERDTreeShowBookmarks=1

let NERDTreeIgnore=[".pyc", "~$", ".swo$", ".swp$", ".git", ".hg", ".svn", ".bzr"]

let NERDTreeChDirMode=0

let NERDTreeQuitOnOpen=1

let NERDTreeMouseMode=2

let NERDTreeShowHidden=1

let NERDTreeKeepTreeInNewTab=1

let g:nerdtree_tabs_open_on_gui_startup=0

"

syntastic

配置

" 設置每次w保存後語法檢查

function! ToggleErrors()

Errors

endfunction

let g:syntastic_check_on_open=1

let g:syntastic_always_populate_loc_list = 1

let g:syntastic_auto_loc_list = 1

let g:syntastic_check_on_wq = 0

let syntastic_loc_list_height = 5

let g:syntastic_html_tidy_ignore_errors=["

proprietary

attribute

"

ng

-

"]

autocmd WinEnter * if &buftype ==#"quickfix" && winnr("$") == 1 | quit |endif

autocmd WinLeave * lclose

"

自動補全

tab

觸發

function

!

InsertTabWrapper

()

let

col

=

col

(

"."

)

-

1

if

!

col

||

getline

(

"."

)[

col

-

1

]

!~

"k"

return

""

else

return

""

endif

endfunction

inoremap

<

Tab

> <

c

-

r

>=

InsertTabWrapper

()

<

cr

>

inoremap

<

S

-

Tab

> <

c

-

n

>

" Ctrlp 和 Ctrlp-funky(,fu)

if isdirectory(expand("

~/

.

vim

/

bundle

/

ctrlp

.

vim

/

"))

let g:ctrlp_working_path_mode = "ra"

nnoremap :CtrlP

nnoremap :CtrlPMRU

let g:ctrlp_custom_ignore = {

"dir": ".git$|.hg$|.svn$",

"file": ".exe$|.so$|.dll$|.pyc$" }

if executable("ag")

let s:ctrlp_fallback = "ag %s --nocolor -l -g """

elseif executable("ack-grep")

let s:ctrlp_fallback = "ack-grep %s --nocolor -f"

elseif executable("ack")

let s:ctrlp_fallback = "ack %s --nocolor -f"

"

On Windows

use

"dir"

as

fallback

command

.

else

let

s

:

ctrlp_fallback

=

"find %s -type f"

endif

if

exists

(

"g:ctrlp_user_command"

)

unlet

g

:

ctrlp_user_command

endif

let

g

:

ctrlp_user_command

=

{

"types"

:

{

1

:

[

".git"

,

"cd %s && git ls-files . --cached --exclude-standard --others"

],

2

:

[

".hg"

,

"hg --cwd %s locate -I ."

],

},

"fallback"

:

s

:

ctrlp

_

fallback

}

if

isdirectory

(

expand

(

"~/.vim/bundle/ctrlp-funky/"

))

" CtrlP extensions

let g:ctrlp_extensions = ["funky"]

"

funky

nnoremap

<

Leader

>

fu

:

CtrlPFunky

<

Cr

>

endif

endif

" complete

autocmd Filetype * if &omnifunc == "" | setlocal omnifunc=syntaxcomplete#Complete | endif

autocmd FileType css setlocal omnifunc=csscomplete#CompleteCSS

autocmd FileType html,markdown setlocal omnifunc=htmlcomplete#CompleteTags

autocmd FileType javascript setlocal omnifunc=javascriptcomplete#CompleteJS

autocmd FileType python setlocal omnifunc=pythoncomplete#Complete

"

進行版權聲明的設置

"添加或更新頭

map :call TitleDet()"s

autocmd BufNewFile *.py :call AddTitle()

function AddTitle()

call append(0,"

#! /usr/bin/env python")

call append

(

1

,

"# -*- coding: utf-8 -*-"

)

call append

(

2

,

"# vim:fenc=utf-8"

)

call append

(

3

,

"# Copyright ? XYM"

)

call append

(

4

,

"# CreateTime: "

.

strftime

(

"%Y-%m-%d %H:%M:%S"

))

call append

(

5

,

""

)

endf

let

python_highlight_all

=

1

vimrc.bundles文件,主要是vim相關插件



if

&

compatible

set

nocompatible

end

filetype off

set

rtp

+=~/

.

vim

/

bundle

/

vundle

call

vundle

#rc()

Bundle

"gmarik/vundle"

" 星級越多越推薦, 5星為必選,4星強烈推薦,3星比較推薦

"

文件模糊匹配查找

推薦:

****

Bundle

"kien/ctrlp.vim"

" 函數模糊匹配查找(,fu) 推薦:****

Bundle "tacahiroy/ctrlp-funky"

"

文件索引樹

推薦:

*****

Bundle

"scrooloose/nerdtree"

" 自動注釋 推薦:*****

Bundle "scrooloose/nerdcommenter"

"

語法檢查

推薦:

****

Bundle

"scrooloose/syntastic"

" 括弧自動匹配 推薦:****

Bundle "jiangmiao/auto-pairs"

"

引號處理

推薦:

****

Bundle

"tpope/vim-surround"

" 游標多行編輯 推薦:****

Bundle "terryma/vim-multiple-cursors"

"

配色主題

推薦:

****

Bundle

"altercation/vim-colors-solarized"

" 縮進引導線 推薦:****

Bundle "

nathanaelkane

/

vim

-

indent

-

guides

"

"

文本同級文字選取,和文本處理

推薦:

****

Bundle

"kana/vim-textobj-indent"

Bundle

"kana/vim-textobj-user"

" 保存vim編輯信息,比如最後的位置 推薦:****

Bundle "

vim

-

scripts

/

restore_view

.

vim

"

"

狀態欄效果

推薦:

***

Bundle

"bling/vim-airline"

" python 推薦:****

Bundle "yssource/python.vim"

Bundle "python_match.vim"

Bundle "pythoncomplete"

Bundle "hdima/python-syntax"

Bundle "hynek/vim-python-pep8-indent"

"

js

推薦:

****

Bundle

"elzr/vim-json"

Bundle

"groenewege/vim-less"

Bundle

"pangloss/vim-javascript"

Bundle

"briancollins/vim-jst"

Bundle

"kchmck/vim-coffee-script"

" html 推薦:****

Bundle "amirh/HTML-AutoCloseTag"

Bundle "hail2u/vim-css3-syntax"

Bundle "gorodinskiy/vim-coloresque"

Bundle "tpope/vim-haml"

Bundle "mattn/emmet-vim"

if filereadable(expand("

~/

.

vimrc

.

bundles

.

local

"

))

source

~/

.

vimrc

.

bundles

.

local

endif

filetype

on



【總結】


一個好的程序員必須善用各種工具提升自己的開發效率,和提升自己的幸福指數。另外,個人覺得vim還是值得自己重新一配的,我的配置過程基本都是在讀spf13的配置,讀懂,然後選取,可是中間還是出了很多問題,比如因為我沒有用pymode插件,所以在用括syntastic的local_list在退出或者分屏時的位置,都令我很蛋疼。而且在讀spf13配置時,會發現有很多很好的功能都沒有用上,比如paste模式,查找衝突快捷鍵,屏幕移動,還有ctrlp-funky,vim-multiple-cursors這些很爽的插件。大家有好的配置可以推薦給我。




  • 來源:XYM-AC之路


  • 鏈接:http://xymlife.com/2016/02/07/打造自己的Python編碼環境



  • 程序員大咖整理髮布,轉載請聯繫作者獲得授權。


↙點擊「

閱讀原文

」,加入


『程序員大咖』

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 Python 的精彩文章:

Python 解惑:整數比較
兄弟連Python培訓:一分耕耘,一分收穫——廣州兄弟連
2分鐘理清計算機、Python和Pip的三角關係
iOS程序員如何使用Python寫網路爬蟲
【Python爬蟲實戰】爬取糗事百科段子

TAG:Python |

您可能感興趣

淺談Python編碼
Python Unicode編碼混亂:來自大洋彼岸的怨念
Python Unicode編碼混亂 :來自大洋彼岸的怨念
黑客將Python作為攻擊編碼語言的首選,人生苦短,我用Python
Python 編碼規範(Google)
Python最簡編碼規範
short數組保存unicode編碼和unicode編碼轉換成shrot數組
Python判斷網頁編碼
TensorFlow 支持 Unicode 編碼
淺談Python之PEP8編碼風格
也談 Python 的中文編碼問題
基於TensorFlow的變分自編碼器實現
python編碼最佳實踐之總結
完美自動化測試方案!DevPartner助您跳出編碼怪圈!
【視頻編碼】Content Aware ABR技術
Oculus大更新包含5K視頻編碼支持和Oculus Home新功能
零基礎學習 Python 之字元編碼
Science immunology:編碼基孔肯亞病毒中和抗體的mRNA 為免疫治療帶來新策略
谷歌大腦Wasserstein自編碼器:新一代生成模型演算法
誰說Win平台Pr用戶不能輸出Prores編碼來著?