vim8python
1. 为啥vim和gvim对python的支持不一样
有人在realpython.com宣扬Sublime Text 3。作为公司的资深开发人员(呃,也就是老古董),我觉得有义务介绍一个真正的Python开发环境给大家——我要推荐的当然就是Vim了。不错,Vim编辑器无处不在,速度快,从来不会崩溃。并且,它能做任何事情!
不过,不利之处也有,就是Vim配置起来很让人头疼。但是,别担心,本文将告诉你如何配置一个强大的Vim环境,专门用于天天捣鼓Python开发。
下面是最终效果预览。
如果想充分地利用好本文,你应该对如何使用Vim和它的命令模式至少有一个基本的了解。如果你是初学者,你可以通过vim-adventure或者openvim网站学习。在继续阅读本文之前,请花点时间浏览那两个网站的内容。
安装
因为许多Unix衍生系统已经预装了Vim,我们首先要确认编辑器是否成功安装:
vim --version
如果已经安装了,你应该看到类似下面的文字:
VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Nov 5 2014 21:00:28)
Compiled by [email protected]
Normal version without GUI. Features included (+) or not (-):
-arabic +autocmd -balloon_eval -browse +builtin_terms +byte_offset +cindent
-clientserver -clipboard +cmdline_compl +cmdline_hist +cmdline_info +comments
-conceal +cryptv +cscope +cursorbind +cursorshape +dialog_con +diff +digraphs
-dnd -ebcdic -emacs_tags +eval +ex_extra +extra_search -farsi +file_in_path
+find_in_path +float +folding -footer +fork() -gettext -hangul_input +iconv
+insert_expand +jumplist -keymap -langmap +libcall +linebreak +lispindent
+listcmds +localmap -lua +menu +mksession +modify_fname +mouse -mouseshape
-mouse_dec -mouse_gpm -mouse_jsbterm -mouse_netterm -mouse_sysmouse
+mouse_xterm +multi_byte +multi_lang -mzscheme +netbeans_intg -osfiletype
+path_extra -perl +persistent_undo +postscript +printer -profile +python/dyn
-python3 +quickfix +reltime -rightleft +ruby/dyn +scrollbind +signs
+smartindent -sniff +startuptime +statusline -sun_workshop +syntax +tag_binary
+tag_old_static -tag_any_white -tcl +terminfo +termresponse +textobjects +title
-toolbar +user_commands +vertsplit +virtualedit +visual +visualextra +viminfo
+vreplace +wildignore +wildmenu +windows +writebackup -X11 -xfontset -xim -xsmp
-xterm_clipboard -xterm_save
system vimrc file: "$VIM/vimrc"
user vimrc file: "$HOME/.vimrc"
user exrc file: "$HOME/.exrc"
fall-back for $VIM: "/usr/share/vim"
Compilation: gcc -c -I. -D_FORTIFY_SOURCE=0 -Iproto -DHAVE_CONFIG_H -arch i386 -arch x86_64 -g -Os -pipe
Linking: gcc -arch i386 -arch x86_64 -o vim -lncurses
在这一步,你要确保已经满足以下两点要求:
Vim编辑版本应该大于7.3。
支持Python语言。在所选编辑器的功能中,确保你看到了+python。
如果满足上述要求,接下来可以安装Vim扩展了。如果不满足,则需要安装/升级。
Unix衍生系统
Debian或Ubuntu系统,可以使用下面的代码:
sudo apt-get remove vim-tiny
apt-get update
apt-get install vim
如果是其他版本的Linux系统,请查阅相应版本包管理器的文档。不清楚的话,可以先阅读这篇文章:安装Vim
验证安装
确保你已经安装了7.3版本以上、支持Python的Vim编辑器。你可以再次运行vim --version进行确认。如果你想知道Vim中使用的Python版本,你可以在编辑器中运行:python import sys; print(sys.version)。
2.7.6 (default, Sep 9 2014, 15:04:36)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.39)]
这行命令会输出你的编辑器当前的Python版本。如果报错,那么你的编辑器就不支持Python语言,需要重装或重新编译。
Vim编辑器安装完成后,我们来看看如何将其设置为Python开发的强大环境。
Vim扩展
Vim本身能够满足开发人员的很多需求,但是它的可扩展性也极强,并且已经有一些杀手级的扩展,可以让Vim拥有“现代”集成开发环境的特性。所以,你所需要的第一件东西就是一个好用的扩展管理器。
Vim的扩展通常也被成为bundle或插件。
Vundle
Vim有多个扩展管理器,但是我们强烈推荐Vundle。你可以把它想象成Vim的pip。有了Vundle,安装和更新包这种事情不费吹灰之力。
我们现在来安装Vundle:
git clone https://github.com/gmarik/Vundle.vim.git ~/.vim/bundle/Vundle.vim
该命令将下载Vundle插件管理器,并将它放置在你的Vim编辑器bundles文件夹中。现在,你可以通过.vimrc配置文件来管理所有扩展了。
将配置文件添加到你的用户的home文件夹中:
touch ~/.vimrc
接下来,把下来的Vundle配置添加到配置文件的顶部:
set nocompatible " required
filetype off " required
" set the runtime path to include Vundle and initialize
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()
" alternatively, pass a path where Vundle should install plugins
"call vundle#begin('~/some/path/here')
" let Vundle manage Vundle, required
Plugin 'gmarik/Vundle.vim'
" Add all your plugins here (note older versions of Vundle used Bundle instead of Plugin)
" All of your Plugins must be added before the following line
call vundle#end() " required
filetype plugin indent on " required
这样,你就完成了使用Vundle前的设置。之后,你就可以在配置文件中添加希望安装的插件,然后打开Vim编辑器,运行下面的命令:
:PluginInstall
这个命令告诉Vundle施展它的魔法——自动下载所有的插件,并为你进行安装和更新。
开始打造IDE吧
本文不可能列举Vim的全部功能,只能快速介绍一些Vim自带的强大功能,它们对于Python开发来说是非常有用的。
扔掉鼠标
或许,Vim编辑器最重要的功能就是它不要求使用鼠标(除了GUI版本外)。一开始,你可能会觉得这是个非常糟糕的做法,但是只要你投入时间——是的,这很花时间——学习快捷组合键,就可以大幅提升工作流的速度。
分割布局(Split Layouts)
使用:sv <filename>命令打开一个文件,你可以纵向分割布局(新文件会在当前文件下方界面打开),使用相反的命令:vs <filename>, 你可以得到横向分割布局(新文件会在当前文件右侧界面打开)。
你还可以嵌套分割布局,所以你可以在分割布局内容再进行分割,纵向或横向都可以,直到你满意为止。众所周知,我们开发时经常需要同时查看多个文件。
专业贴士:记得在输入完:sv后,利用tab补全功能,快速查找文件。
专业贴士:你还可以指定屏幕上可以进行分割布局的区域,只要在.vimrc文件中添加下面的代码即可:
set splitbelow
set splitright
专业贴士:想要不使用鼠标就切换分割布局吗?只要将下面的代码添加到.vimrc文件中,你就可以通过快捷组合键进行切换。
"split navigations
nnoremap <C-J> <C-W><C-J>
nnoremap <C-K> <C-W><C-K>
nnoremap <C-L> <C-W><C-L>
nnoremap <C-H> <C-W><C-H>
组合快捷键:
Ctrl-j 切换到下方的分割窗口
Ctrl-k 切换到上方的分割窗口
Ctrl-l 切换到右侧的分割窗口
Ctrl-h 切换到左侧的分割窗口
换句话说, 按Ctrl+Vim的标准移动键,就可以切换到指定窗口。
等等,nnoremap是什么意思?——简单来说,nnoremap将一个组合快捷键映射为另一个快捷键。一开始的n,指的是在Vim的正常模式(Normal Mode)下,而不是可视模式下重新映射。基本上,nnoremap <C-J> <C-W><C-j>就是说,当我在正常模式按下<C-J>时,进行<C-W><C-j>操作。更多信息请看这里。
缓冲区(Buffers)
虽然Vim支持tab操作,仍有很多人更喜欢缓冲区和分割布局。你可以把缓冲区想象成最近打开的一个文件。Vim提供了方便访问近期缓冲区的方式,只需要输入:b <buffer name or number>,就可以切换到一个已经开启的缓冲区(此处也可使用自动补全功能)。你还可以通过ls命令查看所有的缓冲区。
专业贴士: 在:ls命令输出的最后,Vim会提示“敲击Enter继续查看”,这时你可以直接输入:b <buffer name>,立即选择缓冲区。这样可以省掉一个按键操作,也不必去记忆缓冲区的名字。
代码折叠(Code Folding)
大多数“现代”集成开发环境(IDE)都提供对方法(methods)或类(classes)进行折叠的手段,只显示类或方法的定义部分,而不是全部的代码。
你可以在.vimrc中添加下面的代码开启该功能:
" Enable folding
set foldmethod=indent
set foldlevel=99
这样就可以实现,但是你必须手动输入za来折叠(和取消折叠)。使用空格键会是更好的选择。所以在你的配置文件中加上这一行命令吧:
" Enable folding with the spacebar
nnoremap <space> za
现在你可以轻松地隐藏掉那些当前工作时不需要关注的代码了。
第一个命令,set foldmethod=ident会根据每行的缩进开启折叠。但是这样做会出现超过你所希望的折叠数目。但是别怕,有几个扩展就是专门解决这个问题的。在这里,我们推荐SimplyFold。在.vimrc中加入下面这行代码,通过Vundle进行安装:
Plugin 'tmhedberg/SimpylFold'
不要忘记执行安装命令::PluginInstall
专业贴士: 希望看到折叠代码的文档字符串?
let g:SimpylFold_docstring_preview=1
Python代码缩进
当然,想要代码折叠功能根据缩进情况正常工作,那么你就会希望自己的缩进是正确的。这里,Vim的自带功能无法满足,因为它实现不了定义函数之后的自动缩进。我们希望Vim中的缩进能做到以下两点:
首先,缩进要符合PEP8标准。
其次,更好地处理自动缩进。
PEP8
要支持PEP8风格的缩进,请在.vimrc文件中添加下面的代码:
au BufNewFile,BufRead *.py
\ set tabstop=4
\ set softtabstop=4
\ set shiftwidth=4
\ set textwidth=79
\ set expandtab
\ set autoindent
\ set fileformat=unix
这些设置将让Vim中的Tab键就相当于4个标准的空格符,确保每行代码长度不超过80个字符,并且会以unix格式储存文件,避免在推送到Github或分享给其他用户时出现文件转换问题。
另外,对于全栈开发,你可以设置针对每种文件类型设置au命令:
au BufNewFile,BufRead *.js, *.html, *.css
\ set tabstop=2
\ set softtabstop=2
\ set shiftwidth=2
自动缩进
自动缩进有用,但是在某些情况下(比如函数定义有多行的时候),并不总是会达到你想要的效果,尤其是在符合PEP8标准方面。我们可以利用indentpython.vim插件,来解决这个问题:
Plugin 'vim-scripts/indentpython.vim'
标示不必要的空白字符
我们希望避免出现多余的空白字符。可以让Vim帮我们标示出来,使其很容易发现并删除。
au BufRead,BufNewFile *.py,*.pyw,*.c,*.h match BadWhitespace /\s\+$/
这会将多余的空白字符标示出来,很可能会将它们变成红色突出。
支持UTF-8编码
大部分情况下,进行Python开发时你应该使用UTF-8编码,尤其是使用Python 3的时候。确保Vim设置文件中有下面的命令:
set encoding=utf-8
自动补全
支持Python自动补全的最好插件是YouCompleteMe。我们再次使用Vundle安装:
Bundle 'Valloric/YouCompleteMe'
YouCompleteMe插件其实底层使用了一些不同的自动补全组件(包括针对Python开发的Jedi),另外要安装一些C库才能正常工作。插件官方文档提供了很好的安装指南,我就不在这里重复了。切记跟随文档的步骤进行安装。
安装完成后,插件自带的设置效果就很好,但是我们还可以进行一些小的调整:
let g:ycm_autoclose_preview_window_after_completion=1
map <leader>g :YcmCompleter GoToDefinitionElseDeclaration<CR>
上面的第一行确保了在你完成操作之后,自动补全窗口不会消失,第二行则定义了“转到定义”的快捷方式。
支持Virtualenv虚拟环境
上面“转到定义”功能的一个问题,就是默认情况下Vim不知道virtualenv虚拟环境的情况,所以你必须在配置文件中添加下面的代码,使得Vim和YouCompleteMe能够发现你的虚拟环境:
"python with virtualenv support
py << EOF
import os
import sys
if 'VIRTUAL_ENV' in os.environ:
project_base_dir = os.environ['VIRTUAL_ENV']
activate_this = os.path.join(project_base_dir, 'bin/activate_this.py')
execfile(activate_this, dict(__file__=activate_this))
EOF
这段代码会判断你目前是否在虚拟环境中编辑,然后切换到相应的虚拟环境,并设置好你的系统路径,确保YouCompleteMe能够找到相应的site packages文件夹。
语法检查/高亮
通过安装syntastic插件,每次保存文件时Vim都会检查代码的语法:
Plugin 'scrooloose/syntastic'
还可以通过这个小巧的插件,添加PEP8代码风格检查:
Plugin 'nvie/vim-flake8'
最后,让你的代码变得更漂亮:
let python_highlight_all=1
syntax on
配色方案
配色方案可以和你正在使用的基础配色共同使用。GUI模式可以尝试solarized方案, 终端模式可以尝试Zenburn方案:
Plugin 'jnurmine/Zenburn'
Plugin 'altercation/vim-colors-solarized'
接下来,只需要添加一点逻辑判断,确定什么模式下使用何种方案就可以了:
if has('gui_running')
set background=dark
colorscheme solarized
else
colorscheme Zenburn
endif
Solarized方案同时提供了暗色调和轻色调两种主题。要支持切换主题功能(按F5)也非常简单,只需添加:
call togglebg#map("<F5>")
文件浏览
如果你想要一个不错的文件树形结构,那么NERDTree是不二之选。
Plugin 'scrooloose/nerdtree'
如果你想用tab键,可以利用vim-nerdtree-tabs插件实现:
Plugin 'jistr/vim-nerdtree-tabs'
还想隐藏.pyc文件?那么再添加下面这行代码吧:
let NERDTreeIgnore=['\.pyc$', '\~$'] "ignore files in NERDTree
超级搜索
想要在Vim中搜索任何文件?试试ctrlP插件吧:
Plugin 'kien/ctrlp.vim'
正如插件名,按Ctrl+P就可以进行搜索。如果你的检索词与想要查找的文件相匹配的话,这个插件就会帮你找到它。哦,对了——它不仅仅可以搜索文件,还能检索标签!更多信息,可以观看这个Youtube视频.
显示行号
开启显示行号:
set nu
Git集成
想要在Vim中执行基本的Git命令?vim-fugitive插件则是不二之选。
Plugin 'tpope/vim-fugitive'
请看Vimcasts的这部视频,了解更多情况。
Powerline状态栏
Powerline是一个状态栏插件,可以显示当前的虚拟环境、Git分支、正在编辑的文件等信息。
这个插件是用Python编写的,支持诸如zsh、bash、tmux和IPython等多种环境。
Plugin 'Lokaltog/powerline', {'rtp': 'powerline/bindings/vim/'}
请查阅插件的官方文档,了解配置选项。
系统剪贴板
通常Vim会忽视系统剪贴板,而使用自带的剪贴板。但是有时候你想从Vim之外的程序中剪切、复制、粘贴文本。在OS X平台上,你可以通过这行代码访问你的系统剪贴板:
set clipboard=unnamed
Shell开启Vim编辑模式
最后,当你熟练掌握了Vim和它的键盘快捷方式之后,你会发现自己经常因为shell中缺乏相同的快捷键而懊恼。没关系,大部分的shell程序都有Vi模式。在当前shell中开启Vi模式,你只需要在~/.inputrc文件中添加这行代码:
set editing-mode vi
现在,你不仅可以在shell中使用Vim组合快捷键,还可以在Python解释器以及任何利用GNU Readline程序的工具(例如,大多数的数据库shell)中使用。现在,你在什么地方都可以使用Vim啦!
结语
Vim的设置到这里就差不多了(至少对于Python开发来说是这样的)。当然,开源世界里还有大量你可以使用的其他扩展,以及本文中所提到插件的替代品。你最喜爱的扩展是什么?你又是如何将Vim设置符合你喜好的?
这是我本人的Vim配置文件链接。你有没有自己的设置代码?请与我们分享!
谢谢!
资源
Vim Tutor是Vim自带的程序,安装结束之后,只要在命令行输入vimtutor即可,程序将会用Vim编辑器教你如何使用Vim。
Vimcasts是一系列的高阶视频教程,内容涉及许多Vim的功能。
Vim官方文档
Open Vim
笨办法学Vimscript是学习vimscript的极好材料。
2. 写python程序什么编辑器最好用
一、Vim
作为文本编辑器来说,Vim最大的优势,就是速度和效率,是其他编辑器无法媲美的,这要归功于Vim的模式设计、高度可扩展性和高度可定制等特性,它的自由度很高,使用起来也很方便。
二、Visual Studio Code
是一款兼容Linux、Mac OS
X和Windows平台的全功能代码编辑器,自由度极高,几乎可以对所有任务进行配置,同样也可以安装外部插件,最重要的是,它是免费的。
三、Sublime Text
相信不少同学在刚接触代码时,不少人都会给你推荐这个编辑器,它不仅支持代码编辑,还兼容所有平台,该有的插件扩展一个都不少。
四、GNU Emacs
兼容任何平台,终身免费,相信这两点,就已经吸引不少程序员了,不过它和其他编辑器不一样的是,需要用Lips编程语言进行定制,并为Python开发提供各种定制脚本。
五、Atom
兼容所有平台,其界面也十分美观,拥有丰富的扩展插件及文件系统浏览器,它的核心优势,在于能够兼容Vim模式,这也吸引了大批Vim的忠实用户。
六、PyCharm
是一款专门面向Python的全功能集成开发环境,同样拥有付费版和免费开源版,支持多平台使用,不想要花钱的话,可以找到PyCharm的教育版,新手用它就完全足够了,用起来也十分方便,打开一个新的文件然后就可以直接开始编写代码了,也可以在PyCharm中直接运行和调试Python程序,还支持源码管理和项目,且拥有众多便利和支持社区。
3. 在vim中怎样自动生成#/usr/bin/env python
在用户家目录下创建vimrc文件,然后将如下内容添加进来:
function HeaderPython()
call setline(1, "#!/usr/bin/env python")
call append(1, "#-*- coding:utf8 -*-")
normal G
normal o
normal o
endf
autocmd bufnewfile *.py call HeaderPython()
保存退出即可
比如我用的是root用户,那么我创建过程如下:
vim ~/.vimrc
function HeaderPython()
call setline(1, "#!/usr/bin/env python")
call append(1, "#-*- coding:utf8 -*-")
normal G
normal o
normal o
endf
autocmd bufnewfile *.py call HeaderPython()
保存后退出
然后在任何目录下直接vim 文件名即可
4. VIM 中写python,写完elif 这句后不能自动缩进,跪求大神解答
(1)Command Line,中文翻译为命令行,简单解释为 你最长看到的那个黑色背景的,类似于DOS界面的窗口,用于输入命令的。
(2)不过Python的Command Line和Windows的cmd,不是一回事。详情参考帖子:
Windows的cmd下运行Python脚本,不是在Python的Command Line工具下运行Python脚本
其中,关于Windows的cmd,参见这个帖子:2.2.2.1. cmd简介
(3)import sys
是导入sys模块的。
关于什么是模块,可参考帖子:
【教程】Python中的内置的模块 和第三方的模块
(4)sys.agv[1:]
sys模块有获得执行python脚本时所传递的参数的功能,
此处就是利用这点,通过sys.agv获得对应的参数,
然后再用sys.agv[1:]获得从起始位置索引号为1到最后的那段字符的
(5)所谓字典类型变量
就是 一个 key(键),对应一个value(值)
比如
{"yourName":"hihihi789123"}
其中yourName就是key,键
hihihi789123就是value,值
(6)ditionary,list,set,key等等,
都是属于Python中自带的变量类型
平时使用过程中,需要根据自己的所要实现的功能,定义合适的类型的变量
然后写python代码,去实现对应的功能的。
(7)ditionary,list,set,key 他们和sys,简单说,没关系
因为前者,是变量类型
后者sys,是一个模块
(8)hash在python里面到底是什么意思
我写了很多代码了,貌似暂时还没用到hash。
所以,估计你在今后很长时间内,都很可能暂时用不到hash,可以暂时不用学习。等需要的时候再学。
(9)set((2,3,5))可以loop每一个,但是set([2,3,5]) 不能通过每一个值,为什么
没看懂你要表达啥意思。
(10)argument 在python 里面到底是什么意思,运用起来和以上的有什么关联么
参见(8)的解释,暂时你可以不用关心。
(11)你的代码,就不解释了。因为太乱了。没有缩进。
Python代码是必须有对应的缩进的,表示对应的代码间的逻辑关系的。
关于以上所有的内容,建议你去看:
【整理】如何学习Python + 如何有效利用Python有关的网络资源 + 如何利用Python自带手册(Python Manual)
然后还有什么不懂。
再一点一点问。
不要想一口吃个胖子,否则被撑死了,还都木有消化。
(此处不给贴地址,以上所有帖子,都请自己搜标题,即可找到)
5. 用vim写python时,用中文注释后不能运行!
ubuntu好像是utf-8编码的,第一行用下面shenwei5566说的# -*- coding:utf-8 -*-就可以了。在windows下就要注意文件字符编码是utf-8格式了。
6. 如何配置个性化vim
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"一般设定
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"设定默认解码
setfenc=utf-8
setfencs=utf-8,usc-bom,euc-jp,gb18030,gbk,gb2312,cp936
"设置颜色
colorschemedesert
"setguifont=NimbusMonoL12
"setguifont=WenQuanYiBitmapSong12
"setguifont=Verdana10
"setguifont=Courier11
setguifont=BitstreamVeraSansMono10
"不要使用vi的键盘模式,而是vim自己的
setnocompatible
"history文件中需要记录的行数
sethistory=100
"在处理未保存或只读文件的时候,弹出确认
setconfirm
"与windows共享剪贴板
setclipboard+=unnamed
"侦测文件类型
filetypeon
"载入文件类型插件
filetypepluginon
"为特定文件类型载入相关缩进文件
filetypeindenton
"保存全局变量
setviminfo+=!
"带有如下符号的单词不要被换行分割
setiskeyword+=_,$,@,%,#,-
"语法高亮
syntaxon
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
""""""高亮显示gtk关键字""""""
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
argbooleangpointer
highlightlinkgtkTypeType"高亮字符,让其不受100列限制
highlightOverLengthctermbg=redctermfg=whiteguibg=redguifg=white
matchOverLength'\%101v.*'
"状态行颜色
highlightStatusLineguifg=SlateBlueguibg=Yellow
highlightStatusLineNCguifg=Grayguibg=White
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"文件设置
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"不要备份文件(根据自己需要取舍)
setnobackup
"不要生成swap文件,当buffer被丢弃的时候隐藏它
setlocalnoswapfile
setbufhidden=hide
"字符间插入的像素行数目
setlinespace=0
"增强模式中的命令行自动完成操作
setwildmenu
"在状态行上显示光标所在位置的行号和列号
setruler
setrulerformat=%20(%2*%<%f%=\%m%r\%3l\%c\%p%%%)
"命令行(在状态行下)的高度,默认为1,这里是2
setcmdheight=2
"使回格键(backspace)正常处理indent,eol,start等
setbackspace=2
"允许backspace和光标键跨越行边界
setwhichwrap+=<,>,h,l
"可以在buffer的任何地方使用鼠标(类似office中在工作区双击鼠标定位)
setmouse=a
setselection=exclusive
setselectmode=mouse,key
"启动的时候不显示那个援助索马里儿童的提示
setshortmess=atI
"通过使用:commands命令,告诉我们文件的哪一行被改变过
setreport=0
"不让vim发出讨厌的滴滴声
setnoerrorbells
"在被分割的窗口间显示空白,便于阅读
setfillchars=vert:,stl:,stlnc:
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"搜索和匹配
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"高亮显示匹配的括号
setshowmatch
"匹配括号高亮的时间(单位是十分之一秒)
setmatchtime=5
"在搜索的时候忽略大小写
setignorecase
"不要高亮被搜索的句子(phrases)
setnohlsearch
"在搜索时,输入的词句的逐字符高亮(类似firefox的搜索)
setincsearch
"输入:setlist命令是应该显示些啥?
setlistchars=tab:|,trail:.,extends:>,precedes:<,eol:$
"光标移动到buffer的顶部和底部时保持3行距离
setscrolloff=3
"不要闪烁
setnovisualbell
"我的状态行显示的内容(包括文件类型和解码)
setstatusline=%F%m%r%h%w[FORMAT=%{&ff}][TYPE=%Y][POS=%l,%v][%p%%]\%{strftime("%d/%m/%y-\%H:%M")}
"总是显示状态行
setlaststatus=2
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"文本格式和排版
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"自动格式化
setformatoptions=tcrqn
"继承前一行的缩进方式,特别适用于多行注释
setautoindent
"为C程序提供自动缩进
setsmartindent
"使用C样式的缩进
setcindent
"制表符为4
settabstop=4
"统一缩进为4
setsofttabstop=4
setshiftwidth=4
"不要用空格代替制表符
setnoexpandtab
"不要换行
setnowrap
"在行和段开始处使用制表符
setsmarttab
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"CTags的设定
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"按照名称排序
letTlist_Sort_Type="name"
"在右侧显示窗口
letTlist_Use_Right_Window=1
"压缩方式
letTlist_Compart_Format=1
"如果只有一个buffer,kill窗口也kill掉buffer
letTlist_Exist_OnlyWindow=1
"不要关闭其他文件的tags
letTlist_File_Fold_Auto_Close=0
"不要显示折叠树
letTlist_Enable_Fold_Column=0
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"Autocommands
"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
"只在下列文件类型被侦测到的时候显示行号,普通文本文件不显示
ifhas("autocmd")
autocmdFileTypexml,html,c,cs,java,perl,shell,bash,cpp,python,vim,php,rubysetnumber
autocmdFileTypexml,htmlvmap<C-o><ESC>'<i<!--<ESC>o<ESC>'>o-->
autocmdFileTypejava,c,cpp,csvmap<C-o><ESC>'<o/*<ESC>'>o*/
autocmdFileTypehtml,text,php,vim,c,java,xml,bash,shell,perl,pythonsetlocaltextwidth=100
autocmdFiletypehtml,xml,xslsource$VIMRUNTIME/plugin/closetag.vim
ifline("'"")>0&&line("'"")<=line("{1}quot;)|
exe"normalg`""|
endif
endif"has("autocmd")
"F5编译和运行C程序,F6编译和运行C++程序
"请注意,下述代码在windows下使用会报错
"需要去掉./这两个字符
"C的编译和运行
map<F5>:callCompileRunGcc()<CR>
func!CompileRunGcc()
exec"w"
exec"!gcc%-o%<"
exec"!./%<"
endfunc
"C++的编译和运行
map<F6>:callCompileRunGpp()<CR>
func!CompileRunGpp()
exec"w"
exec"!g++%-o%<"
exec"!./%<"
endfunc
"能够漂亮地显示.NFO文件
setencoding=utf-8
function!SetFileEncodings(encodings)
letb:myfileencodingsbak=&fileencodings
let&fileencodings=a:encodings
endfunction
function!RestoreFileEncodings()
let&fileencodings=b:myfileencodingsbak
unletb:myfileencodingsbak
endfunction
auBufReadPre*.nfocallSetFileEncodings('cp437')|setambiwidth=single
auBufReadPost*.nfocallRestoreFileEncodings()
"高亮显示普通txt文件(需要txt.vim脚本)
auBufRead,BufNewFile*setfiletypetxt
"用空格键来开关折叠
setfoldenable
"setfoldmethod=manual
setfoldmethod=syntax
setfoldlevel=100
nnoremap<space>@=((foldclosed(line('.'))<0)?'zc':'zo')<CR>
"minibufexpl插件的一般设置
letg:miniBufExplMapWindowNavVim=1
letg:miniBufExplMapWindowNavArrows=1
letg:miniBufExplMapCTabSwitchBufs=1
letg:miniBufExplModSelTarget=1
"设置快捷方式Setmapleader
letmapleader=","
"快捷加载,当输入",ss"时,加载.vimrc文件
map<silent><leader>ss:source~/.vimrc<cr>
"快速打开编辑.vimrc配置文件--->",ee"
map<silent><leader>ee:e~/.vimrc<cr>
"快速保存文件--->",w"
map<silent><leader>w:w<cr>
"快速保存并退出文件--->",w"
map<silent><leader>wq:wq<cr>
"自动命令,每次写入.vimrc后,都会执行这个自动命令,source一次~/.vimrc
autocmd!bufwritepost.vimrcsource~/.vimrc
7. 谁知道Vim如何配置Python的缩进
类似C语言风格的缩进
set cindent
智能缩进:每一行都和前一行有相同的缩进量,
同时这种缩进形式能正确的识别出花括号,当遇到右花括号(}),
则取消缩进形式。此外还增加了识别C语言关键字的功能。
如果一行是以#开头的(比如宏),那么这种格式将会被特殊对待而不采用缩进格式
set smartindent
For Python Programmers
autocmd FileType python set textwidth=79 PEP-8 Friendly
把输入的tab自动转换成空格,Python用户必用~
set expandtab
一个tab键占据4个空格
set tabstop=4
一开始,插入的就是4个空格,此时一旦你再按下一次tab,这次的四个空格就会和上次的四个空格组合起来变成一个制表符
set softtabstop=4
每一级自动缩进的空格数
set shiftwidth=4
根据文件类型设定缩进,覆盖掉默认的~
autocmd FileType python setlocal tabstop=4 shiftwidth=4 softtabstop=4 textwidth=79
另外即使配置如此 ,Python的缩进也并不是很理想。
比较好的选择是再使用一个插件 hynek/vim-python-pep8-indent
8. vim 编辑 python代码 为什么会回到开头
vim/etc/vimrc
不要去看有没有这个文件
在里面写:
functionHeaderPython()
callsetline(1,"#!/usr/bin/envpython")
callappend(1,"#-*-coding:utf8-*-")
normalG
normalo
normalo
endf
autocmdbufnewfile*.pycallHeaderPython()
9. vim与jupyter哪个好用
python2的编译器本身处理中文就不太好,有些不同组合你可以试下,解码用gbk,编码用utf8,解码用utf8,编码用gbk,实在不行就在cmd里运行这个程序。
10. 用vim写python脚本的时候能自动缩进么
我的vimrc有这样的:
au BufRead,BufNewFile *.py,*.pyw,*.c,*.h set shiftwidth=4
au BufRead,BufNewFile *.py,*.pyw,*.c,*.h set softtabstop=4
au BufRead,BufNewFile *.py,*.pyw,*.c,*.h set tabstop=4
au BufRead,BufNewFile *.py,*.pyw set expandtab
au BufRead,BufNewFile *.c,*.h set noexpandtab
au BufRead,BufNewFile Makefile* set noexpandtab
highlight BadWhitespace ctermbg=red guibg=red
au BufRead,BufNewFile *.py,*.pyw match BadWhitespace /^\t\+/
au BufRead,BufNewFile *.py,*.pyw,*.c,*.h set textwidth=79
au BufNewFile *.py,*.pyw,*.c,*.h set fileformat=unix
autocmd bufnewfile *.py call setline(1,'#! /usr/bin/env python') |
\ call setline(2,'# -*- coding: utf-8 -*-') |
\ call setline(3,'') |
\ call setline(4,'# Author: N23 <[email protected]>') |
\ call setline(5,'') |
\ call setline(6,'') |
\ exe "normal G"
"Python iMaps
au FileType python set cindent
au FileType python inoremap <buffer> $r return
au FileType python inoremap <buffer> $s self
au FileType python inoremap <buffer> $c ##<cr>#<space><cr>#<esc>kla
au FileType python inoremap <buffer> $f from
au FileType python inoremap <buffer> $i import
au FileType python inoremap <buffer> $p print
au FileType python inoremap <buffer> $d """<cr>"""<esc>O