打造自己的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
"
向下
map
<
C
-
K
> <
C
-
W
>
k
<
C
-
W
>
_
" 向右
map
"
向左
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
"
,
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
map
nmap
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
nnoremap
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
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培訓:一分耕耘,一分收穫——廣州兄弟連
※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編碼來著?