趁着放假,重新配置了一下自己的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字体的安装。
Python
1 2 3 4 5 6 7 8 |
$ 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配置文件。安装如下:
Python
1 2 3 4 5 6 |
// 使用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配置文件中设置默认用户。具体安装配置如下:
Python
1 2 3 4 5 6 7 8 9 10 |
// 修改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,有点蛋疼)
Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 |
" 相关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 <C-J> <C-W>j<C-W>_ " 向下 map <C-K> <C-W>k<C-W>_ " 向右 map <C-L> <C-W>l<C-W>_ " 向左 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 <leader>fc /\v^[<\|=>]{7}( .*\|$)<CR> " ,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 <C-e> :NERDTreeToggle<CR> map <leader>ee :NERDTreeToggle<CR> nmap <leader>nt :NERDTreeFind<CR> 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 "\<tab>" else return "\<c-p>" 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 <silent> <D-t> :CtrlP<CR> nnoremap <silent> <D-r> :CtrlPMRU<CR> 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 <F4> :call TitleDet()<cr>‘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相关插件
Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 |
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‘ " 光标多行编辑 <C-n> <C-x> <C-p> 推荐:**** 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这些很爽的插件。大家有好的配置可以推荐给我。
问啊-一键呼叫程序员答题神器,牛人一对一服务,开发者编程必备官方网站:www.wenaaa.com
QQ群290551701 聚集很多互联网精英,技术总监,架构师,项目经理!开源技术研究,欢迎业内人士,大牛及新手有志于从事IT行业人员进入!