新聞中心

創(chuàng)新互聯(lián)公司主營(yíng)宣威網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,App定制開(kāi)發(fā),宣威h5微信平臺(tái)小程序開(kāi)發(fā)搭建,宣威網(wǎng)站營(yíng)銷推廣歡迎宣威等地區(qū)企業(yè)咨詢
前言
趁著放假,重新配置了一下自己的Mac的編程環(huán)境,畢竟新年新氣象嘛,主要是iTerm2、Zsh、vim 優(yōu)化、Consolas字體、NoisyTyper,這些的相關(guān)配置。工欲利其事必先利其器,好的編碼環(huán)境可以提升我們的打碼的幸福感。好的編碼環(huán)境包括 美觀(視覺(jué)),聲音(聽(tīng)覺(jué)),流暢度(觸覺(jué)),工作環(huán)境(嗅覺(jué),味覺(jué))等多個(gè)方面。后面有幾張配置后的圖片感受一下,主要看字體和配色(有些人可能覺(jué)得比 較丑,個(gè)人喜歡黑紫,配色和字體有很多選擇,各有所好,求別噴 XD)。
準(zhǔn)備階段:器
iTerm2:是os系統(tǒng)中的一個(gè)替代終端。主要優(yōu)點(diǎn):屏幕分割(可以水平分割和垂直分割),選中即復(fù)制,快速查找(command+f),配色字體自定義化,自定義快捷鍵等。
Consolas:微軟下最好看的字體之一,個(gè)人認(rèn)為很適合程序員,除開(kāi)字體好看外,主要原因是它的數(shù)字“0”字加入了一斜撇,以方便與字母“o”分辨。這也是我和它結(jié)緣的主要緣由,當(dāng)年在某次acm比賽中,就是因?yàn)槿庋蹮o(wú)法分辨是0還是o,遺憾至今。
Zsh:zsh和bash一樣是Shell的一種。相比bash:更高效、更好的自動(dòng)補(bǔ)全、更好的文件名展開(kāi)(通配符展開(kāi))、更好的數(shù)組處理、可定制性高。mac下自帶了zsh,無(wú)需再安裝。
Vim:是一個(gè)類似于Vi的著名的功能強(qiáng)大、高度可定制的文本編輯器,在Vi的基礎(chǔ)上改進(jìn)和增加了很多特性。和Emacs并列成為類Unix系統(tǒng)用戶最喜歡的編輯器。估計(jì)大家都很熟悉,不做累述。
NoisyTyper:一款提升你打字逼格的軟件,可以讓你打字的時(shí)候發(fā)出打字機(jī)的聲音,咔咔咔這樣。
上面幾個(gè)安裝都比較簡(jiǎn)單,教程也比較多。這里主要講一下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了。
打磨階段:利器
上面的工具準(zhǔn)備好了后,就可以開(kāi)始配置這些工具了。
Zsh配置
oh-my-zsh:一套強(qiáng)大的開(kāi)源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有多款配套主題,點(diǎn)擊前面的主題鏈接可以看到所有主題。這里主要介紹下agnoster主題。修改zsh配置文件(~/.zshrc)中的主題屬性為agnoster即可。官方圖如下:
安裝這個(gè)主題需要額外安裝powerline字體,不然會(huì)顯示亂碼。如果你想隱藏自己的用戶名信息,需要在zsh配置文件中設(shè)置默認(rèn)用戶。具體安裝配置如下:
- // 修改zsh配置文件
- $ vim ~/.zshrc
- ZSH_THEME="agnoster" //在.zshrc中修改ZSH_THEME
- DEFAULT_USER=username // 在.zshrc中添加或者修改默認(rèn)用戶為自己,開(kāi)啟終端后就不會(huì)顯示自己的用戶名信息
- $ source ~/.zshrc // 重新載入配置文件
- // poweline font 安裝
- $ git clone https://github.com/powerline/fonts.git
- $ cd powerline
- $ ./install.sh
iTerm2配置
字體:接著要在iterm2的Perferences中Text中選擇常規(guī)字體 為consolas字體或者其他你喜歡的字體,非ASCII碼字體為powerline字體(一定要是名字中帶powerline的字體,不然還是亂碼)。如下:
iTerm2配色:從這里可 以獲取很多別人的配色主題,把整個(gè)項(xiàng)目git clone下來(lái),然后在iterm2的Perferences中的Colors最下面的Load Presets中import git下來(lái)的terminal文件,自己可以根據(jù)自己喜歡調(diào)整自己喜歡的顏色,我選的是Fish Tank,我自己微調(diào)了一些配色。如下:
Vim配置
之前一直用spf13,但是打開(kāi)大文件太卡了,所以自己重新配置了一份。實(shí)測(cè)打開(kāi)8000+行代碼的文件,因?yàn)檎Z(yǔ)法檢測(cè),所以大概延時(shí)1s左右,之 后操作很順暢。在配置過(guò)程中會(huì)遇到很多蛋疼的地方。需要比較系統(tǒng)的學(xué)習(xí)一下vim腳本的語(yǔ)法和相關(guān)配置方法,vim網(wǎng)上很多配置好文,如《像 IDE 一樣使用 vim》,還有《vim 腳本學(xué)習(xí)文檔》,我就不累述了,配置文件的注釋寫的比較詳細(xì)。我的配置主要針對(duì)python開(kāi)發(fā),另外需要額外安裝python包flake8。具體如下:
vimrc文件,主要是vim基礎(chǔ)配置。(highlight.js不支持vim script,有點(diǎn)蛋疼)
- " .vimrc
- " 相關(guān)vim腳本文檔 http://vimdoc.sourceforge.net
- " 相關(guān)好文 https://github.com/yangyangwithgnu/use_vim_as_ide
- " 基本配置
- set nocompatible "不要vim模仿vi模式,建議設(shè)置,否則會(huì)有很多不兼容的問(wèn)題
- set mouse=a " 啟動(dòng)鼠標(biāo)所有模式,但是右鍵功能不可用, 可以保證鼠標(biāo)滾屏在當(dāng)前屏幕內(nèi)
- set mousehide " 輸入文件時(shí)隱藏鼠標(biāo)
- set backspace=indent,eol,start " 退格鍵分別可刪除縮進(jìn),上一行結(jié)束,insert之前的字
- set showmatch " 設(shè)置匹配模式
- set nobackup " 不備份
- set nowritebackup " 不寫入備份文件
- set noswapfile " 關(guān)閉交換文件
- set history=500 " history存儲(chǔ)長(zhǎng)
- set ruler " 顯示標(biāo)尺
- set showcmd " 顯示輸入命令
- set incsearch " 搜索時(shí)自動(dòng)匹配
- set hlsearch " 高亮搜索項(xiàng)
- set ignorecase " 無(wú)視大小寫
- set smartcase " 如果有大寫就區(qū)別大小寫匹配
- set laststatus=2 " 總是顯示狀態(tài)欄
- " set autowrite " 切換文件自動(dòng)保存
- set shortmess=atI" " 關(guān)閉歡迎頁(yè)面
- set viewoptions=folds,options,cursor,unix,slash " Better Unix / Windows compatibility
- set virtualedit=onemore " 光標(biāo)可以移到當(dāng)行最后一個(gè)字符之后
- set hidden " 切換文件不保存,隱藏
- "set confirm " 退出前驗(yàn)證
- " set spell " 拼寫檢查
- set linespace=0 " 行之間沒(méi)有多余的空格
- set wildmenu " 自動(dòng)補(bǔ)全時(shí)的文件菜單
- set wildmode=list:longest,full " 自動(dòng)補(bǔ)全時(shí),匹配最長(zhǎng)子串,列出文件
- set whichwrap=b,s,h,l,<,>,[,] " 行尾可右移到下行,行首左移到上行,b:退格,s:空格,hl:左右,<>:n/v模式下的左右,[]:i/r模式下的左右
- set scrolljump=5 " 光標(biāo)離開(kāi)屏幕范圍
- set scrolloff=3 " 光標(biāo)移動(dòng)至少保留行數(shù)
- " 格式
- set nowrap " 取消自動(dòng)折行
- set autoindent " 自動(dòng)縮進(jìn)
- set shiftwidth=4 " 縮進(jìn)位寬=4個(gè)空格位
- set expandtab " tab由空格表示
- set tabstop=4 " tab=4空格
- set softtabstop=4 " 回退可以刪除縮進(jìn)
- set nojoinspaces " 用J合并兩行用一個(gè)空格隔開(kāi)
- set splitright " 用vsplit新建窗口,讓新的放右邊
- set splitbelow " 用split新建窗口,讓新的放下面
- set pastetoggle=
" 指定F12進(jìn)入黏貼模式,可以正常復(fù)制縮進(jìn) - set iskeyword-=. " 讓'.' 作為單詞分割符
- set iskeyword-=# " 讓'#' 作為單詞分割符
- set iskeyword-=- " 讓'-' 作為單詞分割符
- set listchars=tab:?/ ,trail:?,extends:#,nbsp:. " 空格等無(wú)效字符顯示
- set textwidth=80 " 內(nèi)容寬度
- set fileencodings=utf-8,gb18030,gbk,big5 " 文件編碼
- " 文件保存時(shí)處理首尾空格,^M字符
- let g:keep_trailing_whitespace = 1
- function! StripTrailingWhitespace()
- let _s=@/
- let l = line(".")
- let c = col(".")
- %s//s/+$//e
- let @/=_s
- call cursor(l, c)
- endfunction
- autocmd FileType c,cpp,java,go,php,javascript,python,twig,xml,yml autocmd BufWritePre
if exists('g:keep_trailing_whitespace') | call StripTrailingWhitespace() | endif - " 開(kāi)啟新的buffer時(shí),自動(dòng)轉(zhuǎn)到對(duì)應(yīng)文件目錄
- let g:autochdir = 1
- if exists('g:autochdir')
- autocmd BufEnter * if bufname("") !~ "^/[A-Za-z0-9/]*://" | lcd %:p:h | endif
- endif
- " 恢復(fù)光標(biāo)最后編輯位置
- au BufWinLeave *.py,*.c,*.cpp,*.css,*.html,*.js,*php mkview
- au BufWinEnter *.py,*.c,*.cpp,*.css,*.html,*.js,*php silent loadview
- " 設(shè)置u的返回步數(shù)限制
- if has('persistent_undo')
- set undofile " 開(kāi)啟u回滾文件記錄
- set undolevels=1000 " 最大數(shù)量的改變回滾
- set undoreload=10000 " 最大數(shù)量重載可回滾行數(shù)
- endif
- " 特殊文件打開(kāi)
- 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設(shè)置
- let maplocalleader = '_' " 本地leader設(shè)置
- " 設(shè)置tag和window間快速跳轉(zhuǎn)
- let g:easyWindows = 1
- if exists('g:easyWindows')
- " 向上
- map
j _ - " 向下
- map
k _ - " 向右
- map
l _ - " 向左
- map
h _ - endif
- " 處理折疊行的左右移動(dòng)
- noremap j gj
- noremap k gk
- " 沒(méi)sudo卻想保存
- cmap w!! w !sudo tee % >/dev/null
- " ,fc查找沖突的地方
- map
fc //v^[|=>]{7}( .*/|$) - " ,ff 查找光標(biāo)后的單詞位置,列出選擇項(xiàng)
- nmap
ff [I:let nr = input("Which one: ") exe "normal " . nr ."[/t" - " 屏幕左移和右移
- map zl zL
- map zh zH
- " 映射vsp這些開(kāi)啟新的buffer,默認(rèn)目錄為當(dāng)前目錄
- cnoremap %%
=fnameescape(expand('%:h')).'/' - map
ew :e %% - map
es :sp %% - map
ev :vsp %% - map
et :tabe %% - " 黏貼板
- if has('clipboard')
- if has('unnamedplus')
- set clipboard=unnamedplus
- else
- set clipboard=unnamed
- endif
- endif
- "字體的設(shè)置
- set guifont=Consolas,Bitstream_Vera_Sans_Mono:h9:cANSI " 設(shè)置gui字體
- set gfw=幼圓:h10:cGB2312
- " 語(yǔ)法高亮
- syntax on
- " 導(dǎo)入vim插件管理文件
- if filereadable(expand("~/.vimrc.bundles"))
- source ~/.vimrc.bundles
- endif
- " 縮進(jìn)和md文件
- filetype plugin indent on " 自動(dòng)根據(jù)類型啟動(dòng)對(duì)應(yīng)插件,縮進(jìn)開(kāi)啟
- " 設(shè)置主題,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 " 打開(kāi)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 " 設(shè)置行號(hào)
- hi LineNr ctermbg=black
- " Indent Guides 縮進(jìn)列對(duì)齊線
- let g:indent_guides_start_level = 2
- let g:indent_guides_guide_size = 1
- let g:indent_guides_enable_on_vim_startup = 1
- " airline 就是狀態(tài)欄的箭頭
- 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打開(kāi)當(dāng)前文件目錄樹(shù)
- 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 配置
- " 設(shè)置每次w保存后語(yǔ)法檢查
- 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
- " 自動(dòng)補(bǔ)全tab觸發(fā)
- function! InsertTabWrapper()
- let col = col('.') - 1
- if !col || getline('.')[col - 1] !~ '/k'
- return "/
" - else
- return "/
" - endif
- endfunction
- inoremap
=InsertTabWrapper() - inoremap
- " 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
fu :CtrlPFunky - 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
- "進(jìn)行版權(quán)聲明的設(shè)置
- "添加或更新頭
- map
:call TitleDet() 's - autocmd BufNewFile *.py :call TitleDet()
- 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,"# Last modified: ".strftime("%Y-%m-%d %H:%M:%S"))
- call append(5,"")
- endf
- "更新最近修改時(shí)間和文件名
- function UpdateTitle()
- normal m'
- execute '/# *Last modified:/s@:.*$@/=strftime(":/t%Y-%m-%d %H:%M")@'
- normal ''
- normal mk
- execute '/# *Filename:/s@:.*$@/=":/t/t".expand("%:t")@'
- execute "noh"
- normal 'k
- endfunction
- "判斷前10行代碼里面,是否有Last modified這個(gè)單詞,
- "如果沒(méi)有的話,代表沒(méi)有添加過(guò)作者信息,需要新添加;
- "如果有的話,那么只需要更新即可
- function TitleDet()
- let n=1
- "默認(rèn)為添加
- while n < 10
- let line = getline(n)
- if line =~ '^/#/s*/S*Last/smodified:/S*.*$'
- call UpdateTitle()
- return
- endif
- let n = n + 1
- endwhile
- call AddTitle()
- endfunction
vimrc.bundles文件,主要是vim相關(guān)插件
- " .vimrc.bundles
- if &compatible
- set nocompatible
- end
- filetype off
- set rtp+=~/.vim/bundle/vundle
- call vundle#rc()
- Bundle "gmarik/vundle"
- " 星級(jí)越多越推薦, 5星為必選,4星強(qiáng)烈推薦,3星比較推薦
- " 文件模糊匹配查找 推薦:****
- Bundle "kien/ctrlp.vim"
- " 函數(shù)模糊匹配查找(,fu) 推薦:****
- Bundle 'tacahiroy/ctrlp-funky'
- " 文件索引樹(shù) 推薦:*****
- Bundle "scrooloose/nerdtree"
- " 自動(dòng)注釋 推薦:*****
- Bundle 'scrooloose/nerdcommenter'
- " 語(yǔ)法檢查 推薦:****
- Bundle "scrooloose/syntastic"
- " 括號(hào)自動(dòng)匹配 推薦:****
- Bundle 'jiangmiao/auto-pairs'
- " 光標(biāo)多行編輯
推薦:**** - Bundle 'terryma/vim-multiple-cursors'
- " 配色主題 推薦:****
- Bundle "altercation/vim-colors-solarized"
- " 縮進(jìn)引導(dǎo)線 推薦:****
- Bundle "nathanaelkane/vim-indent-guides"
- " 狀態(tài)欄效果 推薦:***
- Bundle "bling/vim-airline"
- " python 推薦:****
- Bundle 'yssource/python.vim'
- Bundle 'python_match.vim'
- Bundle 'pythoncomplete'
- " 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
總結(jié)
一個(gè)好的程序員必須善用各種工具提升自己的開(kāi)發(fā)效率,和提升自己的幸福指數(shù)。另外,個(gè)人覺(jué)得vim還是值得自己重新一配的,我的配置過(guò)程基本都是在 讀spf13的配置,讀懂,然后選取,可是中間還是出了很多問(wèn)題,比如因?yàn)槲覜](méi)有用pymode插件,所以在用括syntastic的 local_list在退出或者分屏?xí)r的位置,都令我很蛋疼。而且在讀spf13配置時(shí),會(huì)發(fā)現(xiàn)有很多很好的功能都沒(méi)有用上,比如paste模式,查找沖 突快捷鍵,屏幕移動(dòng),還有ctrlp-funky,vim-multiple-cursors這些很爽的插件。大家有好的配置可以推薦給我。
分享題目:打造自己的Python編碼環(huán)境
URL分享:http://www.5511xx.com/article/cdisshs.html


咨詢
建站咨詢
