From f8e183c13e795ca10f8ad140ef40779956d8ff9d Mon Sep 17 00:00:00 2001 From: TiynGER Date: Mon, 6 Apr 2020 17:31:59 +0200 Subject: [PATCH] coc is strange, lets bloat ourselfes with ycm --- .config/coc/ultisnips/html.snippets | 88 ----------- .config/coc/ultisnips/tex.snippets | 117 --------------- .config/coc/ultisnips/vim.snippets | 25 ---- .config/nvim/init.vim | 22 +-- .config/nvim/ycm_extra_conf.py | 220 ++++++++++++++++++++++++++++ 5 files changed, 224 insertions(+), 248 deletions(-) delete mode 100644 .config/coc/ultisnips/html.snippets delete mode 100644 .config/coc/ultisnips/tex.snippets delete mode 100644 .config/coc/ultisnips/vim.snippets create mode 100644 .config/nvim/ycm_extra_conf.py diff --git a/.config/coc/ultisnips/html.snippets b/.config/coc/ultisnips/html.snippets deleted file mode 100644 index 0d236bf..0000000 --- a/.config/coc/ultisnips/html.snippets +++ /dev/null @@ -1,88 +0,0 @@ -# A valid snippet should starts with: -# -# snippet trigger_word [ "description" [ options ] ] -# -# and end with: -# -# endsnippet -# -# Snippet options: -# -# b - Beginning of line. -# i - In-word expansion. -# w - Word boundary. -# r - Regular expression -# e - Custom context snippet -# A - Snippet will be triggered automatically, when condition matches. -# -# Basic example: -# -# snippet emitter "emitter properties" b -# private readonly ${1} = new Emitter<$2>() -# public readonly ${1/^_(.*)/$2/}: Event<$2> = this.$2.event -# endsnippet -# -# Online reference: https://github.com/SirVer/ultisnips/blob/master/doc/UltiSnips.txt - -snippet ,b "Bold" A -$1 $2 -endsnippet - -snippet ,it "Italics" A -$1 $2 -endsnippet - -snippet ,1 "Header 1" A -

$1

-$2 -endsnippet - -snippet ,2 "Header 2" A -

$1

-$2 -endsnippet - -snippet ,3 "Header 3" A -

$1

-$2 -endsnippet - -snippet ,p "Paragraph" A -

$1

-$2 -endsnippet - -snippet ,a "Hyperlink" A -$2 $3 -endsnippet - -snippet ,e "External Hyperlink" A -$2 $3 -endsnippet - -snippet ,ul "Itemization" A - -endsnippet - -snippet ,li "List Element" A -
  • $1
  • -$2 -endsnippet - -snippet ,ol "Enumeration" A -
      -
    1. $1
    2. - $2 -
    -endsnippet - -snippet ,im "Image" A -$2 $3 -endsnippet - -snippet & "Et Sign" A -& $1 -endsnippet diff --git a/.config/coc/ultisnips/tex.snippets b/.config/coc/ultisnips/tex.snippets deleted file mode 100644 index 09962bb..0000000 --- a/.config/coc/ultisnips/tex.snippets +++ /dev/null @@ -1,117 +0,0 @@ -# A valid snippet should starts with: -# -# snippet trigger_word [ "description" [ options ] ] -# -# and end with: -# -# endsnippet -# -# Snippet options: -# -# b - Beginning of line. -# i - In-word expansion. -# w - Word boundary. -# r - Regular expression -# e - Custom context snippet -# A - Snippet will be triggered automatically, when condition matches. -# -# Basic example: -# -# snippet emitter "emitter properties" b -# private readonly ${1} = new Emitter<$2>() -# public readonly ${1/^_(.*)/$1/}: Event<$2> = this.$1.event -# endsnippet -# -# Online reference: https://github.com/SirVer/ultisnips/blob/master/doc/UltiSnips.txt - -snippet ,fr "Frame" A -\begin{frame} - \frametitle{$1} - $2 -\end{frame} -endsnippet - -snippet ,em "Emphasis" A -\emph{$1} -endsnippet - -snippet ,bf "Bold" A -\textbf{$1} $2 -endsnippet - -snippet ,it "Italic" A -\textit{$1} $2 -endsnippet - -snippet ,ct "Text cite" A -\textcite{$1} $2 -endsnippet - -snippet ,cp "Parenthesis cite" A -\parencite{$1} $2 -endsnippet - -snippet ,ol "Enumeration" A -\begin{enumerate} - \item $1 - $2 -\end{enumerate} -endsnippet - -snippet ,ul "Itemization" A -\begin{itemize} - \item $1 - $2 -\end{itemize} -endsnippet - -snippet ,li "List element" A -\item $1 -$2 -endsnippet - -snippet ,ref "Reference" A -\ref{$1} $2 -endsnippet - -snippet ,tab "Tabular" A -\begin{tabular} -$1 -\end{tabular} -endsnippet - -snippet ,a "Hyperlink" A -\href{$1}{$2} -endsnippet - -snippet ,sc "Small caps" A -\textsc{$1} $2 -endsnippet - -snippet ,chap "Chapter" A -\chapter{$1} -$2 -endsnippet - -snippet ,sec "Section" A -\section{$1} -$2 -endsnippet - -snippet ,ssec "Subsection" A -\subsection{$1} -$2 -endsnippet - -snippet ,sssec "Subsubsection" A -\subsubsection{$1} -$2 -endsnippet - -snippet ,up "Use Packagage" A -\usepackage{$1} -endsnippet - -snippet ,tt "Typewriter" A -\texttt{$1} $2 -endsnippet diff --git a/.config/coc/ultisnips/vim.snippets b/.config/coc/ultisnips/vim.snippets deleted file mode 100644 index caf3f05..0000000 --- a/.config/coc/ultisnips/vim.snippets +++ /dev/null @@ -1,25 +0,0 @@ -# A valid snippet should starts with: -# -# snippet trigger_word [ "description" [ options ] ] -# -# and end with: -# -# endsnippet -# -# Snippet options: -# -# b - Beginning of line. -# i - In-word expansion. -# w - Word boundary. -# r - Regular expression -# e - Custom context snippet -# A - Snippet will be triggered automatically, when condition matches. -# -# Basic example: -# -# snippet emitter "emitter properties" b -# private readonly ${1} = new Emitter<$2>() -# public readonly ${1/^_(.*)/$1/}: Event<$2> = this.$1.event -# endsnippet -# -# Online reference: https://github.com/SirVer/ultisnips/blob/master/doc/UltiSnips.txt diff --git a/.config/nvim/init.vim b/.config/nvim/init.vim index c89be33..11ba0fd 100644 --- a/.config/nvim/init.vim +++ b/.config/nvim/init.vim @@ -62,7 +62,6 @@ autocmd BufWritePre * %s/\s\+$//e " Plugin section call plug#begin('~/.config/nvim/plugged') -Plug 'neoclide/coc.nvim', {'branch': 'release'} " Autocomplete Plug 'lervag/vimtex' , { 'for' : 'tex'} " tex library for coc autocompletion Plug 'donRaphaco/neotex', { 'for': 'tex'} " Asynchronous pdf rendering Plug 'preservim/nerdtree' " Filetree @@ -72,23 +71,10 @@ Plug 'FredKSchott/CoVim' "Use vim together Plug 'qpkorr/vim-renamer' " Bulk renamer call plug#end() -" Coc extensions -let g:coc_global_extensions = ['coc-snippets', 'coc-vimtex'] -" tab through suggestions -let g:coc_snippet_next = '' -inoremap - \ pumvisible() ? "\" : - \ check_back_space() ? "\" : - \ coc#refresh() -" jump to next placeholder -inoremap pumvisible() ? "\" : "\" -" ending suggestions -function! s:check_back_space() abort - let col = col('.') - 1 - return !col || getline('.')[col - 1] =~# '\s' -endfunction -" expand snippets on enter -inoremap pumvisible() ? "\" : "\" +let g:ycm_global_ycm_extra_conf = '/home/tiynger/.config/nvim/ycm_extra_conf.py' +let g:ycm_semantic_triggers = { + \ 'tex' : ['{'] + \} "tagbar map :TagbarToggle diff --git a/.config/nvim/ycm_extra_conf.py b/.config/nvim/ycm_extra_conf.py new file mode 100644 index 0000000..8d98a5d --- /dev/null +++ b/.config/nvim/ycm_extra_conf.py @@ -0,0 +1,220 @@ +# This file is NOT licensed under the GPLv3, which is the license for the rest +# of YouCompleteMe. +# +# Here's the license text for this file: +# +# This is free and unencumbered software released into the public domain. +# +# Anyone is free to copy, modify, publish, use, compile, sell, or +# distribute this software, either in source code form or as a compiled +# binary, for any purpose, commercial or non-commercial, and by any +# means. +# +# In jurisdictions that recognize copyright laws, the author or authors +# of this software dedicate any and all copyright interest in the +# software to the public domain. We make this dedication for the benefit +# of the public at large and to the detriment of our heirs and +# successors. We intend this dedication to be an overt act of +# relinquishment in perpetuity of all present and future rights to this +# software under copyright law. +# +# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +# IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR +# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, +# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR +# OTHER DEALINGS IN THE SOFTWARE. +# +# For more information, please refer to + +from distutils.sysconfig import get_python_inc +import os +import platform +import os.path as p +import subprocess + +DIR_OF_THIS_SCRIPT = p.abspath( p.dirname( __file__ ) ) +DIR_OF_THIRD_PARTY = p.join( DIR_OF_THIS_SCRIPT, 'third_party' ) +SOURCE_EXTENSIONS = [ '.cpp', '.cxx', '.cc', '.c', '.m', '.mm' ] + +database = None + +# These are the compilation flags that will be used in case there's no +# compilation database set (by default, one is not set). +# CHANGE THIS LIST OF FLAGS. YES, THIS IS THE DROID YOU HAVE BEEN LOOKING FOR. +flags = [ +'-Wall', +'-Wextra', +'-Werror', +'-Wno-long-long', +'-Wno-variadic-macros', +'-fexceptions', +'-DNDEBUG', +# You 100% do NOT need -DUSE_CLANG_COMPLETER and/or -DYCM_EXPORT in your flags; +# only the YCM source code needs it. +'-DUSE_CLANG_COMPLETER', +'-DYCM_EXPORT=', +# THIS IS IMPORTANT! Without the '-x' flag, Clang won't know which language to +# use when compiling headers. So it will guess. Badly. So C++ headers will be +# compiled as C headers. You don't want that so ALWAYS specify the '-x' flag. +# For a C project, you would set this to 'c' instead of 'c++'. +'-x', +'c++', +'-isystem', +'cpp/pybind11', +'-isystem', +'cpp/whereami', +'-isystem', +'cpp/BoostParts', +'-isystem', +get_python_inc(), +'-isystem', +'cpp/llvm/include', +'-isystem', +'cpp/llvm/tools/clang/include', +'-I', +'cpp/ycm', +'-I', +'cpp/ycm/ClangCompleter', +'-isystem', +'cpp/ycm/tests/gmock/gtest', +'-isystem', +'cpp/ycm/tests/gmock/gtest/include', +'-isystem', +'cpp/ycm/tests/gmock', +'-isystem', +'cpp/ycm/tests/gmock/include', +'-isystem', +'cpp/ycm/benchmarks/benchmark/include', +] + +# Clang automatically sets the '-std=' flag to 'c++14' for MSVC 2015 or later, +# which is required for compiling the standard library, and to 'c++11' for older +# versions. +if platform.system() != 'Windows': + flags.append( '-std=c++11' ) + + +# Set this to the absolute path to the folder (NOT the file!) containing the +# compile_commands.json file to use that instead of 'flags'. See here for +# more details: http://clang.llvm.org/docs/JSONCompilationDatabase.html +# +# You can get CMake to generate this file for you by adding: +# set( CMAKE_EXPORT_COMPILE_COMMANDS 1 ) +# to your CMakeLists.txt file. +# +# Most projects will NOT need to set this to anything; you can just change the +# 'flags' list of compilation flags. Notice that YCM itself uses that approach. +compilation_database_folder = '' + + +def IsHeaderFile( filename ): + extension = p.splitext( filename )[ 1 ] + return extension in [ '.h', '.hxx', '.hpp', '.hh' ] + + +def FindCorrespondingSourceFile( filename ): + if IsHeaderFile( filename ): + basename = p.splitext( filename )[ 0 ] + for extension in SOURCE_EXTENSIONS: + replacement_file = basename + extension + if p.exists( replacement_file ): + return replacement_file + return filename + + +def PathToPythonUsedDuringBuild(): + try: + filepath = p.join( DIR_OF_THIS_SCRIPT, 'PYTHON_USED_DURING_BUILDING' ) + with open( filepath ) as f: + return f.read().strip() + except OSError: + return None + + +def Settings( **kwargs ): + # Do NOT import ycm_core at module scope. + import ycm_core + + global database + if database is None and p.exists( compilation_database_folder ): + database = ycm_core.CompilationDatabase( compilation_database_folder ) + + language = kwargs[ 'language' ] + + if language == 'cfamily': + # If the file is a header, try to find the corresponding source file and + # retrieve its flags from the compilation database if using one. This is + # necessary since compilation databases don't have entries for header files. + # In addition, use this source file as the translation unit. This makes it + # possible to jump from a declaration in the header file to its definition + # in the corresponding source file. + filename = FindCorrespondingSourceFile( kwargs[ 'filename' ] ) + + if not database: + return { + 'flags': flags, + 'include_paths_relative_to_dir': DIR_OF_THIS_SCRIPT, + 'override_filename': filename + } + + compilation_info = database.GetCompilationInfoForFile( filename ) + if not compilation_info.compiler_flags_: + return {} + + # Bear in mind that compilation_info.compiler_flags_ does NOT return a + # python list, but a "list-like" StringVec object. + final_flags = list( compilation_info.compiler_flags_ ) + + # NOTE: This is just for YouCompleteMe; it's highly likely that your project + # does NOT need to remove the stdlib flag. DO NOT USE THIS IN YOUR + # ycm_extra_conf IF YOU'RE NOT 100% SURE YOU NEED IT. + try: + final_flags.remove( '-stdlib=libc++' ) + except ValueError: + pass + + return { + 'flags': final_flags, + 'include_paths_relative_to_dir': compilation_info.compiler_working_dir_, + 'override_filename': filename + } + + if language == 'python': + return { + 'interpreter_path': PathToPythonUsedDuringBuild() + } + + return {} + + +def PythonSysPath( **kwargs ): + sys_path = kwargs[ 'sys_path' ] + + interpreter_path = kwargs[ 'interpreter_path' ] + major_version = subprocess.check_output( [ + interpreter_path, '-c', 'import sys; print( sys.version_info[ 0 ] )' ] + ).rstrip().decode( 'utf8' ) + + sys_path[ 0:0 ] = [ p.join( DIR_OF_THIS_SCRIPT ), + p.join( DIR_OF_THIRD_PARTY, 'bottle' ), + p.join( DIR_OF_THIRD_PARTY, 'cregex', + 'regex_{}'.format( major_version ) ), + p.join( DIR_OF_THIRD_PARTY, 'frozendict' ), + p.join( DIR_OF_THIRD_PARTY, 'jedi_deps', 'jedi' ), + p.join( DIR_OF_THIRD_PARTY, 'jedi_deps', 'parso' ), + p.join( DIR_OF_THIRD_PARTY, 'requests_deps', 'requests' ), + p.join( DIR_OF_THIRD_PARTY, 'requests_deps', + 'urllib3', + 'src' ), + p.join( DIR_OF_THIRD_PARTY, 'requests_deps', + 'chardet' ), + p.join( DIR_OF_THIRD_PARTY, 'requests_deps', + 'certifi' ), + p.join( DIR_OF_THIRD_PARTY, 'requests_deps', + 'idna' ), + p.join( DIR_OF_THIRD_PARTY, 'waitress' ) ] + + sys_path.append( p.join( DIR_OF_THIRD_PARTY, 'jedi_deps', 'numpydoc' ) ) + return sys_path