趁着放假,重新配置了一下自己的Mac的编程环境,毕竟新年新气象嘛,主要是iTerm2、Zsh、Vim优化、Consolas字体、NoisyTyper,这些的相关配置。工欲利其事必先利其器,好的编码环境可以提升我们的打码的幸福感。好的编码环境包括美观(视觉),声音(听觉),流畅度(触觉),工作环境(嗅觉,味觉)等多个方面。后面有几张配置后的图片感受一下,主要看字体和配色(有些人可能觉得比较丑,个人喜欢黑紫,配色和字体有很多选择,各有所好,求别喷 XD)。
安装这个主题需要额外安装powerline字体,不然会显示乱码。如果你想隐藏自己的用户名信息,需要在zsh配置文件中设置默认用户。具体安装配置如下:
字体:接着要在iterm2的Perferences中Text中选择常规字体 为consolas字体或者其他你喜欢的字体,非ASCII码字体为powerline字体(一定要是名字中带powerline的字体,不然还是乱码)。如下:
iTerm2配色:从这里可以获取很多别人的配色主题,把整个项目git clone下来,然后在iterm2的Perferences中的Colors最下面的Load Presets中import git下来的schemes文件夹里面itermcolors后缀的文件,自己可以根据自己喜欢调整自己喜欢的颜色,我选的是Fish Tank,我自己微调了一些配色。如下:
之前一直用spf13,但是打开大文件太卡了,所以自己重新配置了一份。实测打开8000+行代码的文件,因为语法检测,所以大概延时1s左右,之后操作很顺畅。在配置过程中会遇到很多蛋疼的地方。需要比较系统的学习一下vim脚本的语法和相关配置方法,vim网上很多配置好文,如《像 IDE 一样使用 vim》,还有《vim 脚本学习文档》,我就不累述了,配置文件的注释写的比较详细。我的配置主要针对python开发,另外需要额外安装python包flake8。具体如下:
" 相关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')