Blog di Un Utente Linux

Vim: python ide

Installazione di Vim

Per installare vim:

` pacman -S gvim python cmake`

Requisiti per questo uso:

queste due condizioni possono essere verificate usando il comando:

VIM - Vi IMproved 8.2 (2019 Dec 12, compiled Jun 21 2020 16:11:23)
Included patches: 1-814
Compiled by Arch Linux
Huge version with GTK3 GUI. Features included (+) or not (-):
+acl -farsi +mouse_sgr +tag_binary
+arabic +file_in_path -mouse_sysmouse -tag_old_static
+autocmd +find_in_path +mouse_urxvt -tag_any_white
+autochdir +float +mouse_xterm +tcl/dyn
-autoservername +folding +multi_byte +termguicolors
+balloon_eval -footer +multi_lang +terminal
+balloon_eval_term +fork() -mzscheme +terminfo
+browse +gettext +netbeans_intg +termresponse
++builtin_terms -hangul_input +num64 +textobjects
+byte_offset +iconv +packages +textprop
+channel +insert_expand +path_extra +timers
+cindent +ipv6 +perl/dyn +title
+clientserver +job +persistent_undo +toolbar
+clipboard +jumplist +popupwin +user_commands
+cmdline_compl +keymap +postscript +vartabs
+cmdline_hist +lambda +printer +vertsplit
+cmdline_info +langmap +profile +virtualedit
+comments +libcall +python/dyn +visual
+conceal +linebreak +python3/dyn +visualextra
+cryptv +lispindent +quickfix +viminfo
+cscope +listcmds +reltime +vreplace
+cursorbind +localmap +rightleft +wildignore
+cursorshape +lua/dyn +ruby/dyn +wildmenu
+dialog_con_gui +menu +scrollbind +windows
+diff +mksession +signs +writebackup
+digraphs +modify_fname +smartindent +X11
+dnd +mouse +sound -xfontset
-ebcdic +mouseshape +spell +xim
+emacs_tags +mouse_dec +startuptime -xpm
+eval +mouse_gpm +statusline +xsmp_interact
+ex_extra -mouse_jsbterm -sun_workshop +xterm_clipboard
+extra_search +mouse_netterm +syntax -xterm_save
   system vimrc file: "/etc/vimrc"
     user vimrc file: "$HOME/.vimrc"
 2nd user vimrc file: "~/.vim/vimrc"
      user exrc file: "$HOME/.exrc"
  system gvimrc file: "/etc/gvimrc"
    user gvimrc file: "$HOME/.gvimrc"
2nd user gvimrc file: "~/.vim/gvimrc"
       defaults file: "$VIMRUNTIME/defaults.vim"
    system menu file: "$VIMRUNTIME/menu.vim"
  fall-back for $VIM: "/usr/share/vim"
Compilation: gcc -c -I. -Iproto -DHAVE_CONFIG_H -DFEAT_GUI_GTK -I/usr/include/gtk-3.0 -I/usr/include/pango-1.0 -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include -I/usr/include/harfbuzz -I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/fribidi -I/usr/include/cairo -I/usr/include/pixman-1 -I/usr/include/gdk-pixbuf-2.0 -I/usr/include/libmount -I/usr/include/blkid -I/usr/include/gio-unix-2.0 -I/usr/include/atk-1.0 -I/usr/include/at-spi2-atk/2.0 -I/usr/include/dbus-1.0 -I/usr/lib/dbus-1.0/include -I/usr/include/at-spi-2.0 -pthread -march=x86-64 -mtune=generic -O2 -pipe -fno-plt -D_REENTRANT -U_FORTIFY_SOURCE -D_FORTIFY_SOURCE=1       
Linking: gcc -L. -Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now -fstack-protector-strong -rdynamic -Wl,-export-dynamic -Wl,-E -Wl,-rpath,/usr/lib/perl5/5.32/core_perl/CORE -Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now -L/usr/local/lib -Wl,--as-needed -o vim -lgtk-3 -lgdk-3 -lz -lpangocairo-1.0 -lpango-1.0 -lharfbuzz -latk-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lSM -lICE -lXt -lX11 -lXdmcp -lSM -lICE -lm -ltinfo -lelf -lcanberra -lacl -lattr -lgpm -ldl -Wl,-E -Wl,-rpath,/usr/lib/perl5/5.32/core_perl/CORE -Wl,-O1,--sort-common,--as-needed,-z,relro,-z,now -fstack-protector-strong -L/usr/local/lib -L/usr/lib/perl5/5.32/core_perl/CORE -lperl -lpthread -ldl -lm -lcrypt -lutil -lc -L/usr/lib -ltclstub8.6 -ldl -lz -lpthread -lm     
[stethewwolf@lomiri ~]$ 

Installazione di Vundle

Vim è un tool potente ed estendibile, uno dei più popolati gestore di estensione è vundle , procediamo quindi alla sua installazione:

` git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim`

dopo questo passaggio è necessario inserire la configurazione base di vundle :

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

in futuro dopo aver modificato il file .vimrc sarà necessario dare il comando per caricare i plugin :PluginInstall

Abilitarte il click del mouse

set mouse=a

Visualizzare più files conteporaneamente

set splitbelow
set splitright

" 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>

map <C-m> :tabprevious<CR>
map <C-i> :tabnext<CR>

Espandere/Contrarre il codice

Plugin 'tmhedberg/SimpylFold'

" decommenta se sdi vuole vedert the docstrings for folded code:
" let g:SimpylFold_docstring_preview=1

Indentazione del codice python

Per abilitare l’indentazione secondo lo standard PEP 8 aggiungere :

au Filetype python set
     \ tabstop=4
     \ softtabstop=4
     \ shiftwidth=4
     \ textwidth=79

Per abilitare l’auto indentazione aggiungiamo il plugin

Plugin 'vim-scripts/indentpython.vim'

Supporto a UTF-8

Aggiungiamo il seguente parametro :

set encoding=utf-8

Atuocompletamento

Per abilitare l’autocompletamento consiglio il seguente plugin:

Plugin 'ajh17/vimcompletesme'

Bisogna segure le linee guida di installazione,

vim_ycm

Installare youcompleteme in breve

I passi essenziali da segure sono ( per info più dettagliate fare riferiemnto alle fonti )

Supporto a virtual env

Uno dei problemi grossi dell’uso di virtualenv è l’impossibilità di vim o ycm di accedere alle risorse che contiene. per farlo si suggerisce di aggiungere al proprio .vimrc :

"python with virtualenv support
py3 << 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

Controllo della sintassi

Per permettere a vim di controllare la sintassi del codice si suggerisce di aggiungere il plugin :

Plugin 'vim-syntastic/syntastic'

E di abilitare la funzioanlità appendendo alle configurazioni :

let python_highlight_all=syntax on

Albero dei files e delle cartelle

Per abilitare il pannello di esplorazione del file system

Plugin 'scrooloose/nerdtree'

Se si usano i tab si potrebbe preferire :

Plugin 'jistr/vim-nerdtree-tabs'

Se si desidera che NERDTree ignori alcuni file si può aggiungere la seguente linea :
let NERDTreeIgnore=['\.pyc$', '\~$'] "ignore files in NERDTree

A me piace rimappare la scomparsa/comparsa dell’albero con CTRL+n
map <C-n> :NERDTreeToggle<CR>

vim_nerdtree

Ricerca avanzata

Per poter cercarcare agevolmente tra files e cartelle si può usare il seguente plugin
Plugin 'kien/ctrlp.vim'
Come ci si aspetta dal nome la combinazione di tasti Ctrl+P attiverà la barra di ricerca.

vim_ctrlp

Numeri di riga

Per abilitare i numeri di riga aggiungere il seguente parametro di configurazione:
set nu

Se si desiderano i numeri di riga relativi si può usare :
set rnu

Integrazione con git

Il seguente plugin abilita l’ntegrazione con git
Plugin 'tpope/vim-fugitive'

In generale questo plugin permette di chiamare i comandi git direttamente dal prompt di vim, usando:

:G <comando git>

Barra di stato

Powerline è una barra di stato che mostra varie informazione su git su virtualenv sui files aperti, ecc …

Per aggiungerla aggiungere i seguenti plugin :

Plugin 'vim-airline/vim-airline'
Plugin 'vim-airline/vim-airline-themes'

Risultato finale

Vimrc

Il file ~/.vimrc alla fine del processo apparirà pressapoco così

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)

Plugin 'oblitum/youcompleteme'
Plugin 'tmhedberg/SimpylFold'
Plugin 'vim-scripts/indentpython.vim'
Plugin 'tpope/vim-fugitive'
Plugin 'kien/ctrlp.vim'
Plugin 'scrooloose/nerdtree'
Plugin 'vim-airline/vim-airline'
Plugin 'vim-airline/vim-airline-themes'

" All of your Plugins must be added before the following line
call vundle#end() " required
filetype plugin indent on " required

set splitbelow
set splitright

" 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>

map <C-i> :tabprevious<CR>
map <C-m> :tabnext<CR>

au Filetype python set
     \ tabstop=4
     \ softtabstop=4
     \ shiftwidth=4
     \ textwidth=79

" python with virtualenv support
py3 << 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')
    exec(open(activate_this).read(), { " __file__": activate_this })
EOF

let python_highlight_all=1
syntax on

" set mause enambled
set mouse=a

" enable line number
set nu

" set clipboard=unnamed

let NERDTreeIgnore=['\.pyc$', '\~$'] "ignore files in NERDTree
map <C-n> :NERDTreeToggle<CR>

set expandtab
set fileformat=unix

Screnshot

Ecco uno screnshot di un progetto python aperto con vim:
Vim e Python

Riferimenti:

Powered by Soopr   •  Theme  Moonwalk