zl程序教程

您现在的位置是:首页 >  后端

当前栏目

打造自己的 Python 编码环境

Python编码 环境 自己 打造
2023-09-11 14:16:12 时间

趁着放假,重新配置了一下自己的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下来的terminal文件,自己可以根据自己喜欢调整自己喜欢的颜色,我选的是Fish Tank,我自己微调了一些配色。如下:

Vim配置

之前一直用spf13,但是打开大文件太卡了,所以自己重新配置了一份。实测打开8000+行代码的文件,因为语法检测,所以大概延时1s左右,之后操作很顺畅。在配置过程中会遇到很多蛋疼的地方。需要比较系统的学习一下vim脚本的语法和相关配置方法,vim网上很多配置好文,如《像 IDE 一样使用 vim》,还有《vim 脚本学习文档》,我就不累述了,配置文件的注释写的比较详细。我的配置主要针对python开发,另外需要额外安装python包flake8。具体如下:

vimrc文件,主要是vim基础配置。(highlight.js不支持vim script,有点蛋疼)


" .vimrc " 相关vim脚本文档 http://vimdoc.sourceforge.net " 相关好文 https://github.com/yangyangwithgnu/use_vim_as_ide " 基本配置 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 " 切换文件自动保存 set shortmess=atI" " 关闭欢迎页面 set viewoptions=folds,options,cursor,unix,slash " Better Unix / Windows compatibility 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 autoindent " 自动缩进 set shiftwidth=4 " 缩进位宽=4个空格位 set expandtab " tab由空格表示 set tabstop=4 " tab=4空格 set softtabstop=4 " 回退可以删除缩进 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 " 文件编码 " 文件保存时处理首尾空格,^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 buffer if exists(g:keep_trailing_whitespace) | call StripTrailingWhitespace() | endif " 开启新的buffer时,自动转到对应文件目录 let g:autochdir = 1 if exists(g:autochdir) autocmd BufEnter * if bufname("") !~ "^\[A-Za-z0-9\]*://" | lcd %:p:h | endif endif " 恢复光标最后编辑位置 au BufWinLeave *.py,*.c,*.cpp,*.css,*.html,*.js,*php mkview au BufWinEnter *.py,*.c,*.cpp,*.css,*.html,*.js,*php silent loadview " 设置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 " 导入vim插件管理文件 if filereadable(expand("~/.vimrc.bundles")) source ~/.vimrc.bundles endif " 缩进和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
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 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,"") "更新最近修改时间和文件名 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这个单词, "如果没有的话,代表没有添加过作者信息,需要新添加; "如果有的话,那么只需要更新即可 function TitleDet() let n=1 "默认为添加 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相关插件


" .vimrc.bundles if compatible set nocompatible 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 " 光标多行编辑 C-n C-x C-p 推荐:**** Bundle terryma/vim-multiple-cursors " 配色主题 推荐:**** Bundle "altercation/vim-colors-solarized" " 缩进引导线 推荐:**** Bundle "nathanaelkane/vim-indent-guides" " 状态栏效果 推荐:*** 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

一个好的程序员必须善用各种工具提升自己的开发效率,和提升自己的幸福指数。另外,个人觉得vim还是值得自己重新一配的,我的配置过程基本都是在读spf13的配置,读懂,然后选取,可是中间还是出了很多问题,比如因为我没有用pymode插件,所以在用括syntastic的local_list在退出或者分屏时的位置,都令我很蛋疼。而且在读spf13配置时,会发现有很多很好的功能都没有用上,比如paste模式,查找冲突快捷键,屏幕移动,还有ctrlp-funky,vim-multiple-cursors这些很爽的插件。大家有好的配置可以推荐给我。





本文来自云栖社区合作伙伴“Linux中国”

原文发布时间为:2013-04-02.