[Vim] [Python] Des bugs autour des caractères jedi-vim et multi-octets?

J'ai écrit les détails sur mon blog, mais j'ai changé l'environnement de développement Python de PyCharm à Vim.

Jusqu'à présent, je suis Vimmer depuis un an sans utiliser de plug-ins externes, mais je me suis perdu et j'ai mis des plug-ins (minimum).

Cette fois, j'ai mis dans un endroit célèbre appelé jedi-vim qui est très pratique comme plug-in autour de Python, mais j'ai trouvé un comportement semblable à un bogue alors je vais l'écrire.

J'ai cherché sur Google, mais je n'ai vu personne avec les mêmes symptômes, donc mon environnement peut être étrange. Je pense aussi qu'il y a une possibilité de plug-in au bâton.

Si vous connaissez les contre-mesures, je vous serais reconnaissant si vous pouviez m'apprendre.

environnement

phénomène

L'achèvement ne fonctionne pas si le japonais (caractères multi-octets) est inclus

autocomp.gif

Dans l'image ci-dessus, le .format après le`" Powerman {} "ʻ n'est pas enregistré.

Si vous le mettez dans une variable comme s =" Powerman {} ", la complétion fonctionnera après s..

Le changement de nom de variable échoue lorsque le japonais (caractères multi-octets) est inclus

rename.gif

Après avoir renommé, je veux que ce soit "" Powerman {} ". Format (hoge), mais il est devenu "" Powerman {hogeformat (num) .

Impressions de l'introduction

Le mode Vim de l'IDE est également bon, mais j'ai senti que pouvoir utiliser Vim lui-même était un avantage considérable. Cependant, j'ai eu l'impression que cela ne fonctionnerait pas si je renommais une variable légèrement compliquée avec la notation d'inclusion, et que l'analyse de code de l'IDE (PyCharm) serait meilleure pour la fonction de stockage et le refactoring.

Je pense que c'est une question de goût, je vais donc continuer à développer avec Vim en premier.

.vimrc

"------- Preferences --------"
set ttyfast
set t_Co=256
set hidden
set autoread
set history=2000
set noswapfile
set backspace=start,eol,indent
set ambiwidth=double
set shortmess+=I
set nrformats=
set backup
set backupdir=$HOME/vimbackup

set smartindent
set tabstop=4
set autoindent
set expandtab
set shiftwidth=4
set showmatch
set matchtime=1
set formatoptions-=c
set smarttab
set clipboard=unnamed,autoselect

"Inclure les traits d'union dans les mots
set isk+=-

"Exclure le japonais lors de la vérification orthographique
set spelllang=en,cjk

"Relâchez le mode Coller lorsque vous quittez le mode d'insertion
autocmd InsertLeave * set nopaste

"syntax markdown
au BufRead,BufNewFile *.md set filetype=markdown

set encoding=utf-8
set fileencodings=ucs-bom,utf-8,euc-jp,iso-2022-jp,cp932,utf-16,utf-16le
"set fileencodings=iso-2022-jp,euc-jp,sjis,utf-8
set fileformats=unix,dos,mac

"------- Look&Feel -----"
set ruler
set number
syntax on
filetype on
filetype plugin on
filetype indent on
set title
set showcmd
set cmdheight=2

set list
set listchars=tab:>-,trail:-,nbsp:%,extends:>,precedes:<,eol:<
set display=lastline
set pumheight=10

"colorscheme distinguished
"colorscheme railscasts
"colorscheme grb256
"colorscheme darcula
"colorscheme molokai
colorscheme badwolf
au BufNewFile,BufRead *.ejs set filetype=html


"------- Cursor -----"
"Changer la forme du curseur en mode insertion
let &t_SI.="\e[6 q"
let &t_EI.="\e[2 q"
"Ajustez le délai d'expiration car la forme du curseur ne revient pas immédiatement
set ttimeoutlen=10
"Contre-mesure du phénomène de disparition du curseur à la sortie du mode insertion(Pour une raison quelconque, cela guérit)
inoremap <ESC> <ESC>
set mouse=a

"------- StatusLine -----"
"http://blog.ruedap.com/2011/07/12/vim-statusline-git-branch-name
"J'avais besoin d'un plug-in, donc je ne le configure pas maintenant. Définissez plutôt ce qui suit
"http://qiita.com/sizucca/items/40f291463a40feb4cd02
"Comptage automatique des caractères
augroup WordCount
    autocmd!
    autocmd BufWinEnter,InsertLeave,CursorHold * call WordCount('char')
augroup END
let s:WordCountStr = ''
let s:WordCountDict = {'word': 2, 'char': 3, 'byte': 4}
function! WordCount(...)
    if a:0 == 0
        return s:WordCountStr
    endif
    let cidx = 3
    silent! let cidx = s:WordCountDict[a:1]
    let s:WordCountStr = ''
    let s:saved_status = v:statusmsg
    exec "silent normal! g\<c-g>"
    if v:statusmsg !~ '^--'
        let str = ''
        silent! let str = split(v:statusmsg, ';')[cidx]
        let cur = str2nr(matchstr(str, '\d\+'))
        let end = str2nr(matchstr(str, '\d\+\s*$'))
        if a:1 == 'char'
            "ici(Nombre de codes de saut de ligne*Taille du code de saut de ligne)À'g<C-g>'Soustraire du nombre de caractères dans
            let cr = &ff == 'dos' ? 2 : 1
            let cur -= cr * (line('.') - 1)
            let end -= cr * line('$')
        endif
        let s:WordCountStr = printf('%d/%d', cur, end)
    endif
    let v:statusmsg = s:saved_status
    return s:WordCountStr
endfunction

"Afficher la commande dans la ligne d'état
set showcmd
"Toujours afficher la ligne d'état
set laststatus=2
"Affichage du numéro de fichier
set statusline=[%n]
"Affichage du nom d'hôte
set statusline+=%{matchstr(hostname(),'\\w\\+')}@
"Affichage du nom de fichier
set statusline+=%<%F
"Vérifier l'affichage des modifications
set statusline+=%m
"Afficher si lecture seule
set statusline+=%r
"S'il s'agit d'une page d'aide[HELP]S'affiche comme
set statusline+=%h
"S'il s'agit d'une fenêtre d'aperçu[Prevew]S'affiche comme
set statusline+=%w
"Affichage du format de fichier
set statusline+=[%{&fileformat}]
"Affichage du code de caractère
set statusline+=[%{has('multi_byte')&&\&fileencoding!=''?&fileencoding:&encoding}]
"Affichage du type de fichier
set statusline+=%y

"------- netrw -----"
"http://blog.tojiru.net/article/234400966.html  
"netrw est toujours une vue arborescente
let g:netrw_liststyle = 3
"Avec CVS.Ne pas afficher les fichiers commençant par
let g:netrw_list_hide = 'CVS,\(^\|\s\s\)\zs\.\S\+'
" 'v'Lorsque vous ouvrez un fichier avec, ouvrez-le sur le côté droit.(La valeur par défaut est le côté gauche, alors remplacez-le)
let g:netrw_altv = 1
" 'o'Lorsque vous ouvrez un fichier avec, ouvrez-le en bas.(Puisque la valeur par défaut est la face supérieure, remplacez-la)
let g:netrw_alto = 1


"------- Search --------"
set incsearch
set ignorecase
set smartcase
set wrapscan
set hlsearch
":Remplacez la commande grep par ack
set grepprg=ack\ --nogroup\ --column\ $*
set grepformat=%f:%l:%c:%m

"------- & command --------"
nnoremap & :&&<CR>
xnoremap & :&&<CR>


"Trouver la sélection actuelle
xnoremap * :<C-u>call <SID>VSetSearch()<CR>/<C-R>=@/<CR><CR>
xnoremap # :<C-u>call <SID>VSetSearch()<CR>?<C-R>=@/<CR><CR>
function! s:VSetSearch()
  let temp = @s
  norm! gv"sy
  let @/ = '\V' . substitute(escape(@s, '/\'), '\n', '\\n', 'g')
  let @s = temp
endfunction

"Définissez le nom de fichier inclus dans la liste des correctifs rapides dans la liste des arguments
command! -nargs=0 -bar Qargs execute 'args' QuickfixFilenames()
function! QuickfixFilenames()
  let buffer_numbers = {}
  for quickfix_item in getqflist()
    let buffer_numbers[quickfix_item['bufnr']] = bufname(quickfix_item['bufnr'])
  endfor
  return join(map(values(buffer_numbers), 'fnameescape(v:val)'))
endfunction


"------- plugins --------"
runtime macros/matchit.vim

" Specify a directory for plugins
" - For Neovim: ~/.local/share/nvim/plugged
" - Avoid using standard Vim directory names like 'plugin'
call plug#begin('~/.vim/plugged')

" Make sure you use single quotes

" Shorthand notation; fetches https://github.com/junegunn/vim-easy-align
"Alignement du texte avec ga
Plug 'junegunn/vim-easy-align'

"Complément automatique Python
Plug 'davidhalter/jedi-vim'

"Tuer un mec semblable à un anneau
Plug 'LeafCage/yankround.vim'

"Développez la sélection avec v, C-Retourner la sélection avec v
Plug 'terryma/vim-expand-region'

" C--Appuyez deux fois pour commenter la sélection à la fois
Plug 'tomtom/tcomment_vim'

"Ouvrez l'URL sous le curseur avec gx dans le navigateur(S'il ne s'agit pas d'une URL, ouvrez les résultats de la recherche)
Plug 'tyru/open-browser.vim'

"Diverses modifications qui entourent le texte
Plug 'tpope/vim-surround'

"Insertion automatique de parenthèses fermantes
Plug 'cohama/lexima.vim'

"Visualisation du retrait
Plug 'Yggdroot/indentLine'

"Interface de rétrécissement du candidat
Plug 'kien/ctrlp.vim'

"Plug-in d'extension CtrlP.Recherche de fonction
Plug 'tacahiroy/ctrlp-funky'

"Plug-in d'extension CtrlP.Recherche dans l'historique des commandes
Plug 'suy/vim-ctrlp-commandline'

"Plug-in d'extension CtrlP avec 3 fonctionnalités
Plug 'sgur/ctrlp-extensions.vim'

"Utiliser AG de vim
Plug 'rking/ag.vim'

" Multiple Plug commands can be written in a single line using | separators
Plug 'SirVer/ultisnips' | Plug 'honza/vim-snippets'

" Using a tagged release; wildcard allowed (requires git 1.9.2 or above)
Plug 'fatih/vim-go', { 'tag': '*' }

" Plugin options
Plug 'nsf/gocode', { 'tag': 'v.20150303', 'rtp': 'vim' }

" Plugin outside ~/.vim/plugged with post-update hook
Plug 'junegunn/fzf', { 'dir': '~/.fzf', 'do': './install --all' }

" Initialize plugin system
call plug#end()


"------- plugin settings --------"
" ctrlp
" let g:ctrlp_match_window = 'order:ttb,min:20,max:20,results:100'
" .(Point)Rechercher des fichiers commençant par
let g:ctrlp_show_hidden = 1
"Utiliser uniquement la recherche de fichiers
let g:ctrlp_types = ['fil'] 
"Spécification étendue de CtrlP
let g:ctrlp_extensions = ['funky', 'commandline', 'yankring'] 
"C-CtrlPMenu est maintenant lancé avec p
let g:ctrlp_map = '<c-p>'
let g:ctrlp_cmd = 'CtrlPMenu'
"Activer CtrlPCommandLine
command! CtrlPCommandLine call ctrlp#init(ctrlp#commandline#id())
"Activer CtrlP Funky
let g:ctrlp_funky_matchtype = 'path' 
let g:ctrlp_cache_dir = $HOME.'/.cache/ctrlp'
let g:ctrlp_clear_cache_on_exit = 0
let g:ctrlp_max_files           = 100000
let g:ctrlp_mruf_max            = 500
let g:ctrlp_yankring_limit = 100
let g:ctrlp_custom_ignore = {
  \ 'dir':  '\v[\/]\.?(git|hg|svn|cache|emacs\.d|node_modules)$',
  \ 'file': '\v\.(exe|so|dll|dmg|tar|gz|c4d|DS_Store|zip|mtl|lxo|psd|ai|eps|pdf|aep|jpe?g|png|gif|tif|swf|svg|obj|fbx|mov|mp[3-4])$',
  \ 'link': 'some_bad_symbolic_links',
  \ }

" jedi-vim
"Désactiver le pop-up docstring
autocmd FileType python setlocal completeopt-=preview

" indentLine
"Désactiver avec n'importe quel type de fichier
let g:indentLine_fileTypeExclude = ['help', 'markdown']

"------- Keymap -----"
inoremap <C-c> <ESC>
noremap <C-c><C-c> :nohlsearch<Cr><Esc>
set whichwrap=b,s,h,l,<,>,[,],~
let mapleader = "\<Space>"
nnoremap <Leader>s :w<CR>
nnoremap <Leader>/ /\v
nnoremap <Leader>?  ?\v
nnoremap Y y$
nnoremap + <C-a>
nnoremap - <C-x>
cnoremap <C-p> <Up>
cnoremap <C-n> <Down>
nnoremap j gj
nnoremap k gk
nnoremap gj j
nnoremap gk k
nnoremap <silent> <C-l> :<C-u>nohlsearch<CR><C-l>
cnoremap <expr> %% getcmdtype() == ':' ? expand('%:h').'/' : '%%'
set pastetoggle=<f5>
map <f6> :!open -a textedit %<CR>
" Start interactive EasyAlign in visual mode (e.g. vipga)
xmap ga <Plug>(EasyAlign)
" Start interactive EasyAlign for a motion/text object (e.g. gaip)
nmap ga <Plug>(EasyAlign)
"Élargissez votre sélection
vmap v <Plug>(expand_region_expand)
"Retourner la sélection
vmap <C-v> <Plug>(expand_region_shrink)
"Ouvrez l'URL sous le curseur dans le navigateur
let g:netrw_nogx = 1 " disable netrw's gx mapping.
nmap gx <Plug>(openbrowser-smart-search)
vmap gx <Plug>(openbrowser-smart-search)

Résumé

Cela fait quelques jours que j'ai commencé à installer des prises externes, donc je ne peux pas nier la possibilité que je fasse quelque chose d'étrange autour des paramètres, mais j'espère pouvoir trouver un moyen de le réparer.

Article original

Vim: Créez un environnement de développement Python - cliquez sur la base

Recommended Posts

[Vim] [Python] Des bugs autour des caractères jedi-vim et multi-octets?
Texte de l'image et publication sur slack (python slackbot)
Squelettes extensibles pour Vim utilisant Python, Click et Jinja2
Plugins Vim petits et astucieux utiles en Python / Django