如何使用Vim编写和调试Python代码

前端之家收集整理的这篇文章主要介绍了如何使用Vim编写和调试Python代码前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

@H_404_3@如何使用Vim编写和调试Python代码

1.部署环境

要想在Ubuntu下使用VIM编写和调试Python代码,请下安装如下的链接进行配置:

http://www.jb51.cc/article/p-afeodlue-b.html

2.问题解决方

在安装过程中,可以遇到如下问题

  • Vim 处理BufRead自动命令时发生错误,E28:没有高亮群组名:BadWhitespace

  • @H_404_97@

    https://www.zhihu.com/question/48957347/answer/113515412

    • Ubuntu 16.04 LTS 下用Vim 打造自己的Python IDE 问题总结

    • @H_404_97@

      http://blog.csdn.net/jeff_liu_sky_/article/details/53955888

      3.使用PDB调试Python

      • Python debug的概念说明

      • @H_404_97@

        http://caimaoy.com/caimaoy_gitbook/python/python_debug.html

        • Python 使用pdb调试的官方文档

        • @H_404_97@

          https://docs.python.org/2/library/pdb.html

          • 使用pdb调试的基本知识

          • @H_404_97@

            方法:运行 python -m pdb myscript.py

            (Pdb) 自动停在第一行,等待调试,这时你可以看看帮助

            (Pdb) h

            说明下这几个关键 命令

            >断点设置

            (Pdb)b 10 #断点设置在本py的第10

            (Pdb)b ots.py:20 #断点设置到 ots.py20

            删除断点(Pdbb #查看断点编号

            (Pdb)d 2 #删除2个断点

            >运行

            (Pdb)n #单步运行

            (Pdb)s #细点运行 也就是会下到,方法

            (Pdb)c #跳到下个断点

            >查看

            (Pdb)p param #查看当前 变量值

            (Pdb)l #查看运行到某处代码

            (Pdb)a #查看全部栈内变量

            >如果是在 命令行里的调试为:

            import pdb

            def tt():

            pdb.set_trace()

            for i in range(1,5):

            print i

            >>> tt()

            #这里支持 n p c 而已

            > <stdin>(3)tt()

            (Pdb) n

            4.知识补充

            • Unix衍生系统配置vim

            • @H_404_97@

              sudo apt-get remove vim-tiny

              sudo apt-get update

              sudo apt-get install vim

              • set nocompatible

              • @H_404_97@

                vim vi 的最流行的加强版。它在 vi 的基础上增加了很多功能,但就不与 vi 完全兼容了。

                set compatible 就是让vim 关闭所有扩展的功能,尽量模拟 vi 的行为。搜索

                但这样就不应用 vim 的很多强大功能,所以一般没有什么特殊需要的话(比如执行很老的 vi 脚本),都要在 vim 的配置开始,写上 set nocompatible关闭兼容模式。由于这个选项是最最基础的选项,会连带很多其它选项发生变动(称作副作用),所以它必需是第一个设定的选项

                set命令作用主要是显示系统中已经存在的shell变量,以及设置shell变量的新变量值。使用set更改shell特性时,符号"+""-"的作用分别是打开和关闭指定的模式。set命令不能够定义新的shell变量。如果要定义新的变量,可以使用declare命令以变量名=值的格式进行定义即可。

                set 命令为 shell 设定参数变量。许多命令的输出是以空格分隔的值,如果要使用其中的某个数据域,使用 set 非常有效。

                #!/bin/sh

                echothe date is $(date)

                set$(date)

                echothe month is $2

                输出

                the date is Wed Apr 23 15:34:16 CST 2014

                the month is Apr

                • :filetype off

                • @H_404_97@

                  关闭文件类型检测

                  • 使用Vundle作为Vim的扩展管理器

                    参考:http://www.jb51.cc/article/p-afeodlue-b.html

                    vim中安装插件:PluginInstall

                  • 使用call调用函数

                  • @H_404_97@

                    • vim的配置信息

                    • @H_404_97@

                      Vim把它所有的配置存在两个相当简单的地方:一个简明的~/.vimrc文件和全是纯文本文件~/.vim目录。

                      到处都可以运行,可以进行diff比较,社区成熟有很多插件。我愿意多花点精力如果它确实能节约我很多时间。

                      • noremap

                      • @H_404_97@

                        noremap是不会递归的映射 (大概是no recursion)

                        例如

                        noremap Y y

                        noremap y Y

                        不会出现问题

                        前缀代表生效范围

                        inoremap就只在插入(insert)模式下生效

                        vnoremap只在visual模式下生效

                        nnoremap就在normal模式下(狂按esc后的模式)生效

                        这样可以减少快捷键所用到的键位组合的个数

                        一个组合可以有多种用途 就不用费劲心思思考 该映射哪个没被绑定过的键了

                        • vim配置文件中的nnoremapinoremap有什么区别

                        • @H_404_97@

                          一个是在普通模式(normal mode)下生效的映射,一个是在插入模式(insert mode)下生效。

                          这样可以在不同模式下使用同一个按键产生不同的效果

                          noremap map 的区别是,被映射的序列不会再被递归映射。

                          nnoremap是什么意思?——简单来说,将一个组合快捷键映射为另一个快捷键。一开始的n,指的是在Vim的正常模式(Normal Mode)下,而不是可视模式下重新映射。基本上,nnoremap <C-J> <C-W><C-j>就是说,当我在正常模式按下<C-J>时,进行<C-W><C-j>操作

                          • 缓冲区(Buffers

                          • @H_404_97@

                            虽然Vim支持tab操作,仍有很多人更喜欢缓冲区和分割布局。你可以把缓冲区想象成最近打开的一个文件Vim提供了方便访问近期缓冲区的方式,只需要输入:b <buffer nameor number>,就可以切换到一个已经开启的缓冲区(此处也可使用自动补全功能)。你还可以通过ls命令查看所有的缓冲区。

                            专业贴士: :ls命令输出的最后,Vim提示敲击Enter继续查看,这时你可以直接输入:b <buffer name>,立即选择缓冲区。这样可以省掉一个按键操作,也不必去记忆缓冲区的名字。

                            • 安装YouCompleteMe

                            • @H_404_97@
                              1. 使用vunble安装YouCompleteMe插件

                              2. 运行install下载并编译生成ycm_core

                                cd ~/.vim/bundle/YouCompleteMe

                                ./install.py --clang-completer # 不需要sudo

                              3. .vimrc中加入

                              " YouCompleteMe

                              set runtimepath+=~/.vim/bundle/YouCompleteMe

                              let g:ycm_collect_identifiers_from_tags_files = 1 " 开启 YCM 基于标签引擎

                              let g:ycm_collect_identifiers_from_comments_and_strings = 1 " 注释与字符串中的内容也用于补全

                              let g:syntastic_ignore_files=[".*\.py$"]

                              let g:ycm_seed_identifiers_with_Syntax = 1 " 语法关键字补全

                              let g:ycm_complete_in_comments = 1

                              let g:ycm_confirm_extra_conf = 0

                              let g:ycm_key_list_select_completion = ['<c-n>','<Down>'] " 映射按键,没有这个会拦截tab,导致其他插件tab不能用.

                              let g:ycm_key_list_prevIoUs_completion = ['<c-p>','<Up>']

                              let g:ycm_complete_in_comments = 1 " 在注释输入中也能补全

                              let g:ycm_complete_in_strings = 1 " 在字符串输入中也能补全

                              let g:ycm_collect_identifiers_from_comments_and_strings = 1 " 注释和字符串中的文字也会被收入补全

                              let g:ycm_global_ycm_extra_conf='~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/.ycm_extra_conf.py'

                              let g:ycm_show_diagnostics_ui = 0 " 禁用语法检查

                              inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<CR>" | " 回车即选中当前项

                              nnoremap <c-j> :YcmCompleter GoToDefinitionElseDeclaration<CR>| " 跳转到定义处

                              "let g:ycm_min_num_of_chars_for_completion=2 " 从第2个键入字符就开始罗列匹配项

                              • 颜色主题

                                输入":colorscheme"即可查看当前的配色方案,默认是default

                                可以通过:colorscheme 主题名字 修改主题

                                主题有:blue darkblue defaultdelek desert elflord evening industry Koehler morning murphy pablo peachpuffron shine slate torte zellner

                              • Python 虚拟环境:Virtualenv

                                用来为一个应用创建一套“隔离”的Python运行环境,确保可以针对不同版本的python库进行编码

                                在写Python的时候,你最喜欢用哪一款IDE

                              • @H_404_97@

                                在本机上正经写代码 PyCharm,社区版免费,专业版 $199 每年。

                                在本机上写几行脚本: ipython 或者 pyipython

                                在服务器调试的时候微调代码vim

                                

猜你在找的Bash相关文章