[Vim] [Python] Fehler bei Jedi-Vim- und Multibyte-Charakteren?

Ich habe die Details in meinem Blog geschrieben, aber die Python-Entwicklungsumgebung von PyCharm auf Vim geändert.

Bis jetzt bin ich seit einem Jahr Vimmer ohne externe Plug-Ins, aber ich habe mich verlaufen und Plug-Ins eingefügt (Minimum).

Dieses Mal habe ich einen berühmten Ort namens jedi-vim eingerichtet, der als Plug-In für Python sehr praktisch ist, aber ich habe ein fehlerhaftes Verhalten gefunden, also werde ich es schreiben.

Ich habe gegoogelt, aber ich habe niemanden mit den gleichen Symptomen gesehen, daher kann meine Umgebung seltsam sein. Ich denke auch, dass es eine Möglichkeit für Plug-In-Batting gibt.

Wenn Sie die Gegenmaßnahmen kennen, würde ich es begrüßen, wenn Sie mich unterrichten könnten.

Umgebung

Phänomen

Die Vervollständigung funktioniert nicht, wenn Japanisch (Mehrbytezeichen) enthalten ist

autocomp.gif

Im obigen Bild wird das .format nach dem" Powerman {} " nicht gespeichert.

Wenn Sie es in eine Variable wie s =" Powerman {} " einfügen, funktioniert die Vervollständigung nach s..

Das Umbenennen von Variablen schlägt fehl, wenn Japanisch (Multibyte-Zeichen) enthalten ist

rename.gif

Nach dem Umbenennen soll es "Powerman {}" sein. Format (hoge) ", aber es wurde" Powerman {hogeformat (num) ".

Eindrücke der Einführung

Der Vim-Modus der IDE ist ebenfalls gut, aber ich fand, dass die Verwendung von Vim selbst ein erheblicher Vorteil ist. Ich hatte jedoch den Eindruck, dass es nicht funktionieren würde, wenn ich eine etwas komplizierte Variable mit der Einschlussnotation umbenennen würde, und dass die Codeanalyse von IDE (PyCharm) für die Speicherfunktion und das Refactoring besser wäre.

Ich denke, das ist Geschmackssache, deshalb werde ich mich zuerst mit Vim weiterentwickeln.

.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

"Fügen Sie Bindestriche in Wörter ein
set isk+=-

"Schließen Sie Japanisch bei der Rechtschreibprüfung aus
set spelllang=en,cjk

"Lassen Sie den Einfügemodus los, wenn Sie den Einfügemodus verlassen
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 -----"
"Ändern Sie die Cursorform im Einfügemodus
let &t_SI.="\e[6 q"
let &t_EI.="\e[2 q"
"Passen Sie die Zeitüberschreitungszeit an, da die Cursorform nicht sofort zurückkehrt
set ttimeoutlen=10
"Gegenmaßnahme für das Phänomen, dass der Cursor beim Verlassen des Einfügemodus verschwindet(Aus irgendeinem Grund heilt dies)
inoremap <ESC> <ESC>
set mouse=a

"------- StatusLine -----"
"http://blog.ruedap.com/2011/07/12/vim-statusline-git-branch-name
"Ich brauchte ein Plug-In, deshalb stelle ich es jetzt nicht ein. Stellen Sie stattdessen Folgendes ein
"http://qiita.com/sizucca/items/40f291463a40feb4cd02
"Automatische Zeichenanzahl
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'
            "Hier(Anzahl der Zeilenvorschubcodes*Größe des Zeilenvorschubcodes)Zu'g<C-g>'Subtrahieren Sie von der Anzahl der Zeichen in
            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

"Befehl in Statuszeile anzeigen
set showcmd
"Statuszeile immer anzeigen
set laststatus=2
"Anzeige der Dateinummer
set statusline=[%n]
"Anzeige des Hostnamens
set statusline+=%{matchstr(hostname(),'\\w\\+')}@
"Dateinamenanzeige
set statusline+=%<%F
"Überprüfen Sie die Anzeige der Änderungen
set statusline+=%m
"Zeigen, ob schreibgeschützt
set statusline+=%r
"Wenn es sich um eine Hilfeseite handelt[HELP]Angezeigt als
set statusline+=%h
"Wenn es sich um ein Vorschaufenster handelt[Prevew]Angezeigt als
set statusline+=%w
"Dateiformatanzeige
set statusline+=[%{&fileformat}]
"Zeichencode-Anzeige
set statusline+=[%{has('multi_byte')&&\&fileencoding!=''?&fileencoding:&encoding}]
"Dateitypanzeige
set statusline+=%y

"------- netrw -----"
"http://blog.tojiru.net/article/234400966.html  
"netrw ist immer Baumansicht
let g:netrw_liststyle = 3
"Mit CVS.Zeigen Sie keine Dateien an, die mit beginnen
let g:netrw_list_hide = 'CVS,\(^\|\s\s\)\zs\.\S\+'
" 'v'Wenn Sie eine Datei mit öffnen, öffnen Sie sie auf der rechten Seite.(Die Standardeinstellung ist die linke Seite. Ersetzen Sie sie daher)
let g:netrw_altv = 1
" 'o'Wenn Sie eine Datei mit öffnen, öffnen Sie sie unten.(Da die Standardeinstellung die Oberseite ist, ersetzen Sie sie)
let g:netrw_alto = 1


"------- Search --------"
set incsearch
set ignorecase
set smartcase
set wrapscan
set hlsearch
":Ändern Sie den Befehl grep in ack
set grepprg=ack\ --nogroup\ --column\ $*
set grepformat=%f:%l:%c:%m

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


"Finden Sie die aktuelle Auswahl
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

"Legen Sie den Dateinamen fest, der in der Quickfix-Liste in der Argumentliste enthalten ist
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
"Textausrichtung mit ga
Plug 'junegunn/vim-easy-align'

"Python-Auto-Komplement
Plug 'davidhalter/jedi-vim'

"Töte einen ringartigen Kerl
Plug 'LeafCage/yankround.vim'

"Erweitern Sie die Auswahl mit v, C.-Auswahl mit v zurückgeben
Plug 'terryma/vim-expand-region'

" C--Drücken Sie zweimal, um die Auswahl sofort zu kommentieren
Plug 'tomtom/tcomment_vim'

"Öffnen Sie die URL unter dem Cursor mit gx im Browser(Wenn es sich nicht um eine URL handelt, öffnen Sie die Suchergebnisse)
Plug 'tyru/open-browser.vim'

"Verschiedene Änderungen, die den Text umgeben
Plug 'tpope/vim-surround'

"Automatisches Einfügen von schließenden Klammern
Plug 'cohama/lexima.vim'

"Einrückungsvisualisierung
Plug 'Yggdroot/indentLine'

"Eingrenzungsschnittstelle für Kandidaten
Plug 'kien/ctrlp.vim'

"CtrlP-Erweiterungs-Plug-In.Funktionssuche
Plug 'tacahiroy/ctrlp-funky'

"CtrlP-Erweiterungs-Plug-In.Befehlsverlaufssuche
Plug 'suy/vim-ctrlp-commandline'

"CtrlP-Erweiterungs-Plug-In mit 3 Funktionen
Plug 'sgur/ctrlp-extensions.vim'

"Verwenden Sie ag von 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'
" .(Punkt)Suchen Sie nach Dateien, die mit beginnen
let g:ctrlp_show_hidden = 1
"Verwenden Sie nur die Dateisuche
let g:ctrlp_types = ['fil'] 
"Erweiterte Spezifikation von CtrlP
let g:ctrlp_extensions = ['funky', 'commandline', 'yankring'] 
"C-CtrlPMenu wird jetzt mit p gestartet
let g:ctrlp_map = '<c-p>'
let g:ctrlp_cmd = 'CtrlPMenu'
"Aktivieren Sie CtrlPCommandLine
command! CtrlPCommandLine call ctrlp#init(ctrlp#commandline#id())
"Aktivieren Sie 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
"Deaktivieren Sie das Popup-Fenster für die Dokumentzeichenfolge
autocmd FileType python setlocal completeopt-=preview

" indentLine
"Mit jedem Dateityp deaktivieren
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)
"Erweitern Sie Ihre Auswahl
vmap v <Plug>(expand_region_expand)
"Auswahl zurückgeben
vmap <C-v> <Plug>(expand_region_shrink)
"Öffnen Sie die URL unter dem Cursor im Browser
let g:netrw_nogx = 1 " disable netrw's gx mapping.
nmap gx <Plug>(openbrowser-smart-search)
vmap gx <Plug>(openbrowser-smart-search)

Zusammenfassung

Es ist ein paar Tage her, seit ich mit der Installation externer Stecker begonnen habe, daher kann ich die Möglichkeit nicht leugnen, dass ich etwas Seltsames an den Einstellungen mache, aber ich hoffe, ich kann einen Weg finden, dies zu beheben.

Originaler Artikel

Vim: Erstellen Sie eine Python-Entwicklungsumgebung - treten Sie auf die Basis

Recommended Posts

[Vim] [Python] Fehler bei Jedi-Vim- und Multibyte-Charakteren?
Bildtext und Post to Slack (Python Slackbot)
Erweiterbare Skelette für Vim mit Python, Click und Jinja2
Kleine und raffinierte Vim-Plugins, die in Python / Django nützlich sind