python vim syntastic

Cambia la versión de Python para Vim y Syntastic



python jedi (8)

¿Es posible cambiar la versión de python utilizada por syntastic para la comprobación de la sintaxis?

Como el Issue https://github.com/scrooloose/syntastic/issues/385 indica que podría usar virtual-env. ¿Pero también es posible con comandos sintácticos o vim?


A pesar de todas las respuestas aquí, todavía encuentro la recomendación de las preguntas frecuentes como la mejor. He agregado esto a mi .vimrc para poder cambiar fácilmente entre las versiones de python.

function Py2() let g:syntastic_python_python_exec = ''/usr/local/bin/python2.7'' endfunction function Py3() let g:syntastic_python_python_exec = ''/usr/local/bin/python3.6'' endfunction call Py3() " default to Py3 because I try to use it when possible

Con esas funciones instaladas, es fácil cambiar la versión de Python dentro de vim con :call Py2() o :call Py3() dependiendo de lo que necesito en este momento. No es necesario salir de vim y activar un virtualenv diferente como lo haría la respuesta popular.


Lo único que hice para arreglar esto fue hacer:

let g:syntastic_python_flake8_exec = ''/path/to/python3''

Para asegurarse de que flake8 esté sincronizado con la sintaxis de Python3. Incluso cuando estoy en un virtualenv funciona.


Lo siguiente ya no es necesario, y podría arruinarlo si se ve obligado a trabajar en un script estrictamente python 2.x.

La mejor opción es dejar los valores predeterminados de Syntastic, y usar conda para administrar entornos separados para python 3 y 2 (cada uno con sus propias instalaciones de flake8, pyflakes, etc.) específicas de la versión, y cambiar al entorno apropiado para editar cada archivo Syntastic llamará a python / flake8 / cualquier otra cosa de acuerdo con las rutas establecidas en el entorno activado.

Desde el repositorio de Syntastic README :

P. El verificador de Python se queja de construcciones sintácticamente válidas de Python 3 ...

A. Configure el verificador de Python para llamar a un intérprete de Python 3 en lugar de Python 2, por ejemplo:

let g:syntastic_python_python_exec = ''/path/to/python3''

Agregue esa línea a su .vimrc - eso debería solucionar su problema.


Logré convencer a Syntastic para manejar la sintaxis de Python 3 con

pip3 install --user flake8

(para hacer que python3 -m flake8 *.py funcione) y luego, en vim:

let g:syntastic_python_flake8_exec = ''python3'' let g:syntastic_python_flake8_args = [''-m'', ''flake8'']


Realmente no, pero puede obtener la advertencia incompatible con python3 instalando este paquete .

Digamos que su actual comprobador de Python de Syntastic es python y desea obtener python3 advertencia incompatible con python3 . En el modo de comando, puede agregar py3kwarn a g:syntastic_python_checkers por

:let g:syntastic_python_checkers=[''python'']

y cambiar a python2.x solamente

let g:syntastic_python_checkers = [''python3'']


Si trabaja bajo virtualenv, puede usar un script que detecte la versión actual de python e invoque flake8 consecuencia. Ponga lo siguiente en algún lugar de su ruta y nombre es flake8.sh :

#!/bin/sh PYMAJOR=$(python --version | awk ''{print $2}''| awk -F. ''{print $1}'') exec /usr/bin/python$PYMAJOR /usr/bin/flake8 $*

Ahora en vimrc agrega:

let g:syntastic_python_flake8_exe=''flake8.sh''

También asegúrese de que tanto python-flake8 como python3-flake8 (en Ubuntu) estén instalados.


Solo para repetir un poco el guión de Zaar Hai , algo como esto debería funcionar y ser un poco más robusto.

#!/usr/bin/env bash _python=$(command -v python) [[ "$(uname -s)" =~ Darwin ]] && IS_OSX=true if [[ "$IS_OSX" ]]; then if command -v ''greadlink'' >/dev/null 2>&1; then greadlink -f "$_python" else echo ''Install coreutils!'' >&2 fi else readlink -f "$_python" fi


Teniendo en cuenta que esta pregunta es el primer resultado que aparece cuando se busca en Google " Syntastic python3 ", tengo la impresión de que la mayoría de las respuestas son demasiado complicadas para alguien con prisa, y me siento obligado a agregar una nueva. La solución sencilla para cambiar a python3 es poner

:let g:syntastic_python_checkers=[''python'', ''py3kwarn'']

en tu .vimrc . Se podría argumentar que esta no es la mejor solución, pero la pregunta es tan vaga que parece necesaria para comenzar con cosas simples.