专栏名称: 程序员大咖
为程序员提供最优质的博文、最精彩的讨论、最实用的开发资源;提供最新最全的编程学习资料:PHP、Objective-C、Java、Swift、C/C++函数库、.NET Framework类库、J2SE API等等。并不定期奉送各种福利。
目录
相关文章推荐
程序猿  ·  离谱!下载 DeepSeek 将判 20 ... ·  昨天  
码农翻身  ·  “DeepSeek出了一个昏招!” ·  昨天  
程序员的那些事  ·  OpenAI ... ·  3 天前  
程序员的那些事  ·  Rust ... ·  2 天前  
程序猿  ·  松下电器突然官宣解散!曾风靡全球 ·  3 天前  
51好读  ›  专栏  ›  程序员大咖

打造自己的Python编码环境

程序员大咖  · 公众号  · 程序员  · 2017-01-04 19:50

正文

来源:XYM-AC之路

链接:http://xymlife.com/2016/02/07/打造自己的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 /\v^[]{7}( .*\|$)

" , ff 查找光标后的单词位置,列出选择项

nmap Leader > ff [ I : let nr = input ( "Which one: " ) Bar > exe "normal " . nr . "[\t" 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')







请到「今天看啥」查看全文