From 42a327b29be07b9865c078fb2a530e4afd3879db Mon Sep 17 00:00:00 2001 From: Maxim Likhachev Date: Tue, 19 Feb 2019 13:50:43 +0300 Subject: [PATCH] macos: case fix --- etc/soft/vifm/colors/def.vifm | 19 ++++ etc/soft/vim/vim/+ftplugin/tcl.vim | 2 +- .../vim/vim/+omnicompletion/tcl/tcl_completion.vim | 108 +++++++++++++++++++++ 3 files changed, 128 insertions(+), 1 deletion(-) create mode 100644 etc/soft/vifm/colors/def.vifm create mode 100644 etc/soft/vim/vim/+omnicompletion/tcl/tcl_completion.vim diff --git a/etc/soft/vifm/colors/def.vifm b/etc/soft/vifm/colors/def.vifm new file mode 100644 index 0000000..fc66206 --- /dev/null +++ b/etc/soft/vifm/colors/def.vifm @@ -0,0 +1,19 @@ +highlight Win cterm=none ctermfg=white ctermbg=black +highlight Border cterm=none ctermfg=white ctermbg=black +highlight TopLine cterm=underline ctermfg=white ctermbg=black +highlight TopLineSel cterm=underline ctermfg=white ctermbg=black +highlight StatusLine cterm=none ctermfg=black ctermbg=white +highlight WildMenu cterm=underline,inverse ctermfg=white ctermbg=black +highlight CmdLine cterm=none ctermfg=white ctermbg=black + +highlight Selected cterm=none ctermfg=magenta ctermbg=black +highlight CurrLine cterm=none ctermfg=black ctermbg=white +highlight ErrorMsg cterm=none ctermfg=red ctermbg=black + +highlight Directory cterm=none ctermfg=yellow ctermbg=black +highlight Executable cterm=none ctermfg=green ctermbg=black +highlight Link cterm=none ctermfg=cyan ctermbg=black +highlight BrokenLink cterm=none ctermfg=red ctermbg=black +highlight Socket cterm=none ctermfg=LightMagenta ctermbg=black +highlight Device cterm=none ctermfg=LightBlue ctermbg=black +highlight Fifo cterm=none ctermfg=LightGreen ctermbg=black diff --git a/etc/soft/vim/vim/+ftplugin/tcl.vim b/etc/soft/vim/vim/+ftplugin/tcl.vim index 49a3a9d..dc27531 100644 --- a/etc/soft/vim/vim/+ftplugin/tcl.vim +++ b/etc/soft/vim/vim/+ftplugin/tcl.vim @@ -11,7 +11,7 @@ set errorformat=%f:\ Line\ %l:\ %t\ %m " Формат строки с инфор " TODO: переименовать Tcl.vim (<- tags.tcl) if !has("win32unix") - source $HOME/.vim/+omnicompletion/tcl/tcl.vim + source $HOME/.vim/+omnicompletion/tcl/tcl_completion.vim endif setlocal omnifunc=TclComplete diff --git a/etc/soft/vim/vim/+omnicompletion/tcl/tcl_completion.vim b/etc/soft/vim/vim/+omnicompletion/tcl/tcl_completion.vim new file mode 100644 index 0000000..4561770 --- /dev/null +++ b/etc/soft/vim/vim/+omnicompletion/tcl/tcl_completion.vim @@ -0,0 +1,108 @@ +source ~/.vim/+omnicompletion/tcl/Packages.vim +source ~/.vim/+omnicompletion/tcl/Tcl.vim +source ~/.vim/+omnicompletion/tcl/Tk.vim +source ~/.vim/+omnicompletion/tcl/Base.vim + +if (exists("g:tcl_completion") && g:tcl_completion) || &cp || v:version < 700 + finish +endif +let g:tcl_completion = 1 + +setlocal omnifunc=TclComplete +let s:completion_type = '' + +fu! TclComplete(findstart, base) + echomsg 'findstart=' . a:findstart . ', base=' . a:base + + if a:findstart + " return the starting point of the word + let line = getline('.') + let pos = col('.') - 1 + while pos > 0 && line[pos - 1] !~ ' \|,^\|,\|\[\|\s\|\t\|:' + let pos -= 1 + endwhile + + " Дополнение пространств имен + if line[pos - 1] == ':' + " Сдвиг на две позиции назад + let start = pos - 2 + " TODO: Дополнение опций + elseif line[pos - 1] == '-' + let start = pos - 1 + " Дополнение подкомманд + elseif line[pos - 1] =~ ' \|\t' + let start = pos - 1 + else + let labelstr = 'default' + endif + + " Получение слова для дополнения + if exists("start") + let labelpos = start + + while labelpos > 0 && line[labelpos - 1] =~ '[]a-zA-Z_:0-9\.\"\{\} -<>\\]' + let labelpos -= 1 + endwhile + + let labelstr=strpart(line, labelpos, start - labelpos) + + "Определение последнего ключевого слова в строке + let len = strlen(labelstr) + let newlabelstr = substitute(labelstr,"::","_ns_","") + while len > 1 && !exists("b:".newlabelstr) + ""let newlabelstr = substitute(strpart(labelstr,0,len),"::","_ns_","") + ""let newlabelstr = substitute(newlabelstr," ","_sp_","") + + let newlabelstr = Escape(strpart(labelstr,0,len)) + + "FIXME: Для отладки + ""echo system ("echo -: ".substitute(strpart(labelstr,0,len),"::","_","")) + let len -= 1 + endwhile + + if exists("b:".newlabelstr) + let labelstr = newlabelstr + endif + + endif + + if exists("labelstr") && labelstr != "" + let s:completion_type = labelstr + else + let s:completion_type = 'default' + endif + + " FIXME: Для отладки + ""echo system("echo labelstring == ".labelstr." completion == ".s:completion_type) + + return pos + else + let suggestions = [] + + ""let l:r = substitute(s:completion_type, "::", "_ns_", "") + ""let l:r = substitute(l:r, " ", "_sp_", "") + + let l:r = Escape(s:completion_type) + if exists('b:'.l:r) + exe 'let listing = b:'.l:r + + for entry in listing + if entry.word =~ '^' . escape(a:base, '/') + call add(suggestions, entry) + endif + endfor + endif + return suggestions + + if !has('gui_running') + redraw! + endif + endif +endfu + +function Escape(str) + let result = substitute(a:str,"::","_ns_","g") + let result = substitute(result," ","_sp_","g") + + return result +endfunction