Neovim 0.4.0 发布了。Neovim 是专注于可扩展性和可用性的新一代
Vim,它的特性包括:

玩游戏也可以学编程,今天这篇译文推荐了12个可以学习编程的游戏平台,支持的程序语言从Java、Python、Vim、JavaScript、PHP等等都有,游戏界面也特别棒!想成为全栈设计师的同学,是时候试一下咯。

最早我也只是在服务器上编辑文件的时候用用vim来改改程序,并没有把vim当做自己的主力编辑器。但是偶然的一次机会需要改一个奇葩的输入文件的格式,用了下Vim的宏录制,尝到了甜头,于是后面就开始用Vim来写程序了,虽然使用初期有些阻力,但时间久了就会发现,双手再也不用离开键盘,即使使用sublime这样的编辑器我也要改成使用Vim模式,Vim真的能让自己一思维的速度编辑文本(对我来说就是写程序了)。

  • 现代化 GUI
  • 支持多种语言 API
    访问,包括:C/C++、C#、Clojure、D、Elixir、Go、Haskell、Java、JavaScript/Node.js、Julia、Lisp、Lua、Perl、Python、Racket、Ruby
    与 Rust
  • 嵌入式,脚本化终端仿真器
  • 异步作业控制
  • 多个编辑器实例之间的共享数据(shada)
  • XDG 基目录支持
  • 兼容大多数 Vim 插件,包括 Ruby 和 Python 插件

1、Code Combat

正好最近换了新的电脑,需要在新电脑上配置一下,就干脆把一些配置相关的东东记录下来吧,相关的配置文件我都放在了github()
上并写了相应的安装和卸载脚本,给有需要的同学做个参考吧。

此版本对文档、内部子系统与 test/CI 基础设施进行了大量改进,并且从 Vim
合并了 700 多个补丁。更新亮点包括新的 API 函数、新的 UI 事件、UI、TUI
与终端改进等,详情查看更新说明:

一个面向学生的通过把玩真正的游戏来学习计算机科学的平台。它是一个由上千玩家共同志愿维护的项目。支持Java,
JavaScript, Python, Lua, CoffeeScript。

本文是有关配置的文章,并不对Vim的核心技巧进行说明,有需要的童鞋可以参考文档和相关书籍。这里主要配合tmux和vim可以更有优雅的帮助我们在终端中进行Python编程。

澳门新葡萄京官网注册 1

先来个大致的效果图吧:

(文/开源中国)    

2、CodinGame

澳门新葡萄京官网注册 2vim-screeshot.png

解决具有挑战性的编码问题,支持所有编程语言。(搭梯子访问)

终端窗口管理工具Tmux

首先还是需要配置下tmux,它除了可以进行多window多panel以外最主要的是他提供了窗口组随时存储和恢复的功能。也可以帮助我们在一个窗口中使用多个panel一边使用vim一边在ipython中进行测试。

tmux的配置文件是当前用户主目录下的.tmux.conf文件,启动tmux时会自动加载,也可以通过在tmux中进行加载例如<prefix> : source ~/.tmux.conf

完整的配置文件参见:

关于tmux的配置比较简单,我先把快捷键的前缀从Ctrl-b换成了Ctrl-l,主要是根据个人喜好,因为这样左手Ctrl右手l个人觉得比较方便。

# Set tmux prefix to <C-a>set -g prefix C-lunbind C-b

tmux的分屏快捷键默认值为:

  • <prefix> + " 水平分屏
  • <prefix> + % 垂直分屏

感觉好奇怪,我就改成了相对直观的方式:

  • <prefix> + |, 类似在屏幕上加一条处置线
  • <prefix> + -, 类似在屏幕上加一条水平线

# Split pane.unbind '"'bind | splitw -hunbind '%'bind - splitw -v

由于使用vim习惯了而且不想在去碰鼠标,tmux也是可以将复制模式修改成同Vim相同的方式,只是操作的前缀不同罢了。

# Copy mode# copy-mode to vi modesetw -g mode-keys vi# enter copy modebind Escape copy-mode# paste bufferbind C-p pasteb# select bind -t vi-copy v begin-selection# copy bind -t vi-copy y copy-selection

这里面板切换上,我将面板的上下左右方向绑定到了kjhl四个同Vim中光标移动一样的四个键上同Vim保持一致,这样就不需要在记住新的方向键了。

# Map panel switch.# Upbind-key k select-pane -U# Downbind-key j select-pane -D# leftbind-key h select-pane -L# rightbind-key l select-pane -R

这里为了能够将大小更灵活的移动,我将鼠标控制打开,这样就能通过鼠标进行方便精准的面板大小调整了。

# Resize panel size.bind < resize-pane -L 10bind > resize-pane -R 10bind _ resize-pane -D 10bind + resize-pane -U 10# Use mouse to resize panel.set -g mouse-utf8 on

配置当然要根据自己的使用习惯来设置,这里仅仅给出参考。这样我们将多窗口终端的控制玩弄于手掌之中啦。

澳门新葡萄京官网注册 3tmux_panels.png

澳门新葡萄京官网注册 4

Vim配置

解决了终端窗口问题,我们开始大刀阔斧的捣鼓编辑器啦,这里我对我使用的几个Vim插件进行整理,以及几个基本配置进行下说明。

完整的vim配置文件参见:

这里主要说一下在Mac上的Vim安装,Vim的官网以及YouCompleteMe的README都有推荐使用MacVim,
但是如果我们并不想在使用Vim的时候还打开新的窗口而是直接在终端使用Vim的话需要在安装MacVim后做一点小处理。

  1. 安装MacVim

brew cask install macvim
  1. 使用MacVim的mvim脚本覆盖掉系统自带的vim

alias vim='/usr/local/bin/mvim -v'alias vi='vim'

例如我们编写Python脚本的时候经常会在文件开头添加执行文件的Python路径以及文件的编码方式,我们可以通过在Vim的配置文件中添加一个函数,并让他在打开一个新的缓冲区的时候自动添加到头部。

" Auto add head info" .py file into add headerfunction HeaderPython() call setline(1, "#!/usr/bin/env python") call append(1, "# -*- coding: utf-8 -*-") normal G normal oendfautocmd bufnewfile *.py call HeaderPython()

这样当我们使用

vi new.py

的时候便会匹配到文件后缀并执行头部添加函数进行内容添加,
其他语言的脚本例如bash、perl等都是类似的方式。

如果要安装插件,必须要有个方便的插件管理器,Vim的插件管理器有很多,这里我使用了Vundle,它的全称是Vim
Bundle,可以让我们轻松的安装、更新、搜索和清理Vim插件。Vundle本身是一个Vim插件,所以使我们安装所有插件中最早需要安装的插件。

Vundle的安装方式这里就不详细介绍了,可以参见:

安装好后我们需要修改下.vimrc文件:

set nocompatiblefiletype offset rtp+=~/.vim/bundle/Vundle.vimcall vundle#begin()" 在这里添加你想安装的Vim插件call vundle#end() " requiredfiletype plugin indent on " required

这样如果我们想安装插件的话我们只需要在call vundle#begin()
call vundle#end()之间直接写入就好了,非常方便,写好后我们直接运行

vim +PluginInstall +qall

vundle便会自动下载并安装好插件,我们直接作为伸手党使用就好啦.

澳门新葡萄京官网注册 5vim_plugin_install.png

YouCompleteMe是一个非常强大的Vim自动补全插件,他的特别之处就在于他并不是像vim自带的Ctrl-xCtrl-n那样基于文本进行补全,而是基于语义,通过分析源文件进行语法分析,这得益于强大的clang/llvm。同时YCM也整合了多种插件,其中也包含语法纠错,类似Syntastic的功能,但是只能进行C/C++/Objective-C的语法检测,对于Python的话我们后面需要安装Syntastic插件。

YCM虽然强大,但是安装却稍微麻烦些,首先他文件比较大,另外需要自己进行编译(NeoVundle插件管理器貌似可以直接帮你自动编译),
不过无论我之前在ubuntu还是现在的mac上,至少我还是没有遇到什么很大的问题的。

具体的安装请参考YCM的安装说明:

YCM的相关设置:

" Plugin YCM settings.set completeopt=longest,menulet g:ycm_min_num_of_chars_for_completion=2let g:ycm_cache_omnifunc=0let g:ycm_seed_identifiers_with_syntax=1let g:ycm_complete_in_comments = 1let g:ycm_complete_in_strings = 1let g:ycm_collect_identifiers_from_comments_and_strings = 0let g:ycm_global_ycm_extra_conf = '~/.ycm_extra_conf.py'let g:syntastic_check_on_open=1let g:syntastic_enable_signs=1let g:syntastic_cpp_check_header = 1let g:syntastic_cpp_remove_include_errors = 1

YCM除了在.vimrc中进行配置外,还有一个Python的配置文件.ycm_extra_conf.py,在里面我们可以设置相应的编译选项,比如编译参数,头文件和库文件的地址等等,这样我们在编写C/C++等的时候ycm会找到相应的头文件和库文件进行编译并给出相应的提示。这个文件需要根据自己的项目根据自己的文件位置进行自定义。

我的.ycm_extra_conf.py的完整版:

澳门新葡萄京官网注册 6ycm_complete.png

写Python的时候你一定需要一款帮助你显示缩进的插件,indentLine就是一款提供缩指示线的插件,有纯文字实现,有了他在判断Python代码块的时候就方便了许多。

插件地址:

我相应的配置:

" Plugin indentLine settings.let g:indentLine_char = "┆"let g:indentLine_enabled = 1let g:autopep8_disable_show_diff=1

效果:

澳门新葡萄京官网注册 7indent_line.png

当我们写代码的时候不可能每次只打开一个文件,而是打开很多个,而且要经常在这之间来回切换。vim提供了自己的buffer管理工具,但是并不直观,这时可以使用minibufexplorer插件,这样便可以像切换tab一样在Vim中进行buffer的切换来同时编辑多个文件。

效果如下图:

澳门新葡萄京官网注册 8bufexplorer.png

我们可以通过根据前面的buffer序号来使用Ctrl+w :b buffer-number来快速切换。

首先Pylint是一个代码分析工具,它能够分析Python中的代码错误,查找不符合风格标准和有潜在问题的代码,如果单独使用的话,他还可以为我们的Python代码进行检测并生成一份报告,并为你的代码进行评分,像这样:

pylint incar.py --output-format=html > score.html

澳门新葡萄京官网注册 9pylint_score.png

我们可以利用syntastic插件来使用pylint帮助我们进行语法检查。

syntastic的安装可以直接通过Vundle来进行方便的安装,安装后我们需要进行下配置:

" Plugin syntastic settings.set statusline+=%#warningmsg#set statusline+=%{SyntasticStatuslineFlag()}set statusline+=%*let g:syntastic_always_populate_loc_list = 1let g:syntastic_auto_loc_list = 1let g:syntastic_check_on_open = 0let g:syntastic_check_on_wq = 0let g:syntastic_mode_map = {'mode': 'passive', 'active_filetypes': [], 'passive_filetypes': []}" Use pylint to check python files.let g:syntastic_python_checkers = ['pylint']map <F5> :SyntasticToggleMode<CR> :SyntasticCheck<CR>" Ignore warnings about newlines trailing.let g:syntastic_quiet_messages = { 'regex': ['trailing-newlines', 'invalid-name', 'too-many-lines', 'too-many-instance-attributes', 'too-many-public-methods', 'too-many-locals', 'too-many-branches'] }

这里主要涉及两个部分的配置,

  1. 一个是将检测模式改成被动,由于Syntastic检测并不是异步进行的,如果每次保存的时候都进行检测,都会卡在那里等一会,如果我的代码比较大的话会更久,所以我们在想要检测的时候在检测。
  2. 忽略掉一些我们不想看到的warnign,pylint完全按照PEP8来的话,我的代码经常会各种提示的warning,比如我喜欢在代码最后一行留个空行也会有提示,因此我就通过正则表达式将次信息过滤掉,这时候就需要设置syntastic_quiet_message变量了。

澳门新葡萄京官网注册 10syntastic_warning.png

像其他IDE一样,左边有树形目录的话,所有文件夹和文件都一目了然那一定是极好的,所以NERDTree插件就是这么一款工具,他可以直接通过Vundle进行安装,然后在配置文件中设置启动的快捷键以及窗口大小和忽略显示的文件等等。

" Plugin nerdtree settings.map <F2> :NERDTreeToggle<CR>let NERDTreeChDirMode=1let NERDTreeShowBookmarks=1let NERDTreeWinSize=25let NERDTreeShowHidden=1let NERDTreeIgnore=['~$', '.pyc$', '.swp$', '.git$']

澳门新葡萄京官网注册 11nerdtree.png

ctrlp.vim
顾名思义,就是提供了同Sublime的Ctrl+p的功能,可以直接通过Vundle安装,在配置文件中将其映射到功能键上便可以快速启动搜索,支持模糊匹配。

map <F3> :CtrlP<CR>

澳门新葡萄京官网注册 12ctrlp.png

tagbar插件可以帮助我们显示当前文件中的类、函数、变量等,方便我们阅读代码,它是基于ctags的,支持很多语言,具体详见:

安装好ctags之后可以直接从Vundle中进行安装。

在配置文件中可以将其绑定到快捷键上方便快速启动。

map <F2> :TagbarToggle<CR>

效果如下:

澳门新葡萄京官网注册 13tagbar.png

Vim
的插件很丰富,这里我就不再一一赘述了,希望这些强大的工具能让我们在终端中更优雅的编写Python(不限于Python啦),有关我使用的vim插件都在我的.vimrc中,有兴趣的童鞋可以搜索相应的插件名称进行查看。

" Plugins.Plugin 'VundleVim/Vundle.vim'Plugin 'Valloric/YouCompleteMe'Plugin 'nathanaelkane/vim-indent-guides'Plugin 'fholgado/minibufexpl.vim'Plugin 'Yggdroot/indentLine'Plugin 'scrooloose/nerdtree'Plugin 'ctrlpvim/ctrlp.vim'Plugin 'majutsushi/tagbar'Plugin 'dyng/ctrlsf.vim'Plugin 'vim-airline/vim-airline'Plugin 'vim-airline/vim-airline-themes'Plugin 'MattesGroeger/vim-bookmarks'Plugin 'vim-syntastic/syntastic'

同时为了方便自己我也写了相应的安装和卸载脚本,方便大家参考,github地址:

3、Screeps

总结

本文主要简单介绍下本人平时编程中使用tmux,vim等工具的配置,希望能借此帮助大家能更好的在终端中进行程序编写提高工作效率。

最后还是建议配置文件中不要盲目复制粘贴别人的配置,最好保证里面的配置自己都知道是做什么的,而且是对自己需要的。

本文作者:PytLab,Python
中文社区专栏作者。主要从事科学计算与高性能计算领域的应用,主要语言为Python,C,C++。熟悉数值算法(最优化方法,蒙特卡洛算法等)与并行化
算法(MPI,OpenMP等多线程以及多进程并行化)以及python优化方法,经常使用C++给python写扩展。blog:

通过玩游戏来学习JavaScript。据称是全球第一个面向程序员的大型多人在线沙盒游戏。

澳门新葡萄京官网注册 14

4、Check iO

一款需要你使用Python来推进的页游(需要登录)。

(搭梯子访问)

澳门新葡萄京官网注册 15

5、Vim Adventures

游戏中学习Vim。

澳门新葡萄京官网注册 16

6、Cyber DoJo

程序员练习编程的一个地方,支持JavaScript, Java, Python, PHP,
Ruby等。(搭梯子访问)

开源代码在这里

澳门新葡萄京官网注册 17

7、Code Monkey

通过编写代码来抓住香蕉。主要用于教师教学生们学习编程。(付费的)

澳门新葡萄京官网注册 18

8、Elevator Saga

一款电梯升降式游戏,一步步解决问题,如在第一关中,你要在最多60秒内运输15人。

开源代码在这里

澳门新葡萄京官网注册 19

9、Codewars

通过跟他人的实际挑战赛达到逐步掌握编程语言的目的。支持 JavaScript,
Python, C#, Java, Python等。

澳门新葡萄京官网注册 20

10、Ruby Quiz

面向Ruby编程者,每周一次挑战赛。现在已经收录了156场数据。

澳门新葡萄京官网注册 21

11、Git Games

一款基于终端的游戏,教会大家使用git的一些特性。其本身是一款解密游戏,要求你使用git命令找到线索进而实现解谜的目的。

澳门新葡萄京官网注册 22

12、Hacker Org

包括一些列的谜题、测试和智力题去探索你的黑客技能。为了解决一系列问题,你需要解开密码,写出轻巧的代码,突破一切障碍。

(搭梯子访问)

澳门新葡萄京官网注册 23