From 99941e19d877fe9d348604def35ccf33baef5fc3 Mon Sep 17 00:00:00 2001 From: Julien Oculi Date: Tue, 4 Jun 2024 15:54:13 +0200 Subject: [PATCH] feat: add `vim` config and install scripts --- vim/README.md | 5 ++ vim/_deploy.sh | 2 + vim/_install.sh | 5 ++ vim/vim/.vimrc | 229 ++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 241 insertions(+) create mode 100644 vim/_deploy.sh create mode 100644 vim/_install.sh create mode 100644 vim/vim/.vimrc diff --git a/vim/README.md b/vim/README.md index a40b97c..cbe86da 100644 --- a/vim/README.md +++ b/vim/README.md @@ -1,3 +1,8 @@ # VIM Editeur de texte pour le terminal. + +## Infos + +- `.vimrc` pour le `root` +- Gestionnaire de plugin : [Vundle](https://github.com/VundleVim/Vundle.vim) diff --git a/vim/_deploy.sh b/vim/_deploy.sh new file mode 100644 index 0000000..608aee9 --- /dev/null +++ b/vim/_deploy.sh @@ -0,0 +1,2 @@ +# Setup vimrc +cp ./vim/vim/* /root diff --git a/vim/_install.sh b/vim/_install.sh new file mode 100644 index 0000000..89fd177 --- /dev/null +++ b/vim/_install.sh @@ -0,0 +1,5 @@ +# Install or upgrade caddy +nala install -y caddy + +# Install or upgrade vundle +git clone https://github.com/VundleVim/Vundle.vim.git /root/.vim/bundle/Vundle.vim diff --git a/vim/vim/.vimrc b/vim/vim/.vimrc new file mode 100644 index 0000000..006e40e --- /dev/null +++ b/vim/vim/.vimrc @@ -0,0 +1,229 @@ +set nocompatible " be iMproved, required +filetype off " required + +set rtp+=~/.vim/bundle/Vundle.vim +call vundle#begin() +Plugin 'VundleVim/Vundle.vim' + +"Plugins installés depuis Vim Awesome avec le gestionnaire Vundle +Plugin 'preservim/nerdtree' +Plugin 'mbbill/undotree' +Plugin 'jeffkreeftmeijer/vim-numbertoggle' +Plugin 'jodosha/vim-devnotes' +Plugin 'joshdick/onedark.vim' +Plugin 'flazz/vim-colorschemes' +Plugin 'ervandew/supertab' +Plugin 'tpope/vim-fugitive' +Plugin 'jiangmiao/auto-pairs' +Plugin 'tpope/vim-commentary' +Plugin 'vim-airline/vim-airline' +Plugin 'vim-airline/vim-airline-themes' +Plugin 'liuchengxu/vim-which-key' +Plugin 'mhinz/vim-startify' +Plugin 'junegunn/fzf' +Plugin 'junegunn/fzf.vim' + +call vundle#end() " required +filetype plugin indent on " required + +" Active les raccourcis clavier pour fzf +nnoremap :FZF +nnoremap :Rg +nnoremap :Buffers +nnoremap :Marks +nnoremap :Tags + +"Parametre de vim +syntax on +set smartindent +set shiftwidth=2 +set wildmenu +set cursorline +set ignorecase +set hlsearch +set mouse=a + +" Configurer Airline +set laststatus=2 +let g:airline_powerline_fonts = 1 +let g:airline_theme='onedark' + +" Stocker le nom d'utilisateur dans une variable +let g:username = substitute(system('whoami'), '\n', '', '') + +" Fonction pour mapper les modes +function! Mode() + let mode = mode() + if mode ==# 'n' + return 'NORMAL' + elseif mode ==# 'i' + return 'INSERT' + elseif mode ==# 'v' + return 'VISUAL' + elseif mode ==# "\" + return 'VISUAL BLOCK' + elseif mode ==# 'V' + return 'VISUAL LINE' + elseif mode ==# 'R' + return 'REPLACE' + else + return mode() + endif +endfunction + +" Configurer les sections personnalisées dans la barre d'état +let g:airline_section_a = '%<%{Mode()}' +let g:airline_section_b = '%#StatusLine#' . g:username . ' | %f' +let g:airline_section_c = '%#StatusLineNC#%{strftime("%H:%M")}' + +" Configurer les symboles de séparation +let g:airline_left_sep = '' +let g:airline_right_sep = '' +let g:airline_left_alt_sep = '' +let g:airline_right_alt_sep = '' + +" Configurer les couleurs +hi StatusLine guifg=#ebdbb2 guibg=#3c3836 gui=NONE ctermfg=180 ctermbg=237 cterm=NONE +hi StatusLineNC guifg=#928374 guibg=#3c3836 gui=NONE ctermfg=146 ctermbg=237 cterm=NONE +hi User1 guifg=#282828 guibg=#98971a gui=NONE ctermfg=234 ctermbg=142 cterm=NONE +hi User2 guifg=#928374 guibg=NONE gui=NONE ctermfg=146 ctermbg=NONE cterm=NONE +hi User3 guifg=#d5c4a1 guibg=#3c3836 gui=NONE ctermfg=223 ctermbg=237 cterm=NONE +hi User4 guifg=#1d2021 guibg=NONE gui=NONE ctermfg=234 ctermbg=NONE cterm=NONE +hi User5 guifg=#689d6a guibg=NONE gui=NONE ctermfg=108 ctermbg=NONE cterm=NONE +hi User6 guifg=#fabd2f guibg=NONE gui=NONE ctermfg=214 ctermbg=NONE cterm=NONE + +" Activer auto-pairs +let g:AutoPairsFlyMode = 1 +let g:AutoPairsShortcutBackInsert = '' +au FileType * let b:AutoPairs = AutoPairsDefine({'(':')', '[':']', '{':'}', '"':'"', "'":"'", '`':'`'}) + +"Numérotation avec numbertoggle +set number relativenumber + +"Theme vim +colorscheme space-vim-dark + +"Permet la sauvegarde automatique de l'historique... +set undofile +set undodir=~/.vim/ + +"Raccourci vertical split +nnoremap :vsp + +"Raccourci Note +nmap :call DevNotes() + +"Raccourci NerdTree +nnoremap :NERDTreeToggle + +"Raccourci historique +nnoremap :UndotreeToggle:wincmd p + +"Raccourci terminal +nnoremap :call OpenResizableTerminals(input('Taille du terminal : ', '10')) +tnoremap N + +"Raccourci vers une recherche duckduckgo +vmap g : !firefox "https://duckduckgo.com/?q=&t=newext&atb=v372-6&ia=web" >& /dev/null + +"Raccourci vers aide vim +nmap :!elinks https://agreugr.eu + +"Raccourci onglet +nnoremap :call OpenFileInNewTab() +nmap :tabnext + +nnoremap :call SaveAndQuit() + +"Raccourci plugin installer +nnoremap ² :call ClosePluginList() + +"Raccourci au lancement de vim +au VimEnter *.cpp :NERDTreeToggle +au VimEnter *.cpp :call OpenResizableTerminals(input('Taille du terminal : ', '10')) + +au VimEnter *.ino :NERDTreeToggle +au VimEnter *.ino :call OpenResizableTerminals(input('Taille du terminal : ', '10')) + +" Exécuter la commande :PluginUpdate en arrière-plan chaque fois que Vim est ouvert +au VimEnter * silent! execute ':PluginUpdate | redraw!' + +" Sauvegarde et Fermeture de vimscode +function! SaveAndQuit() + wa + qall! +endfunction + +" Fermeture ou ouverture du pluginlisst +function! ClosePluginList() + if &buftype == 'help' && expand('%:t') == 'PluginList' + quit + else + :PluginList + endif +endfunction + +" Configuration du terminal extensible +function! OpenResizableTerminals(size) + let size_arg = a:size != '' ? '++rows=' . a:size : '' + execute 'bot term ' . size_arg +endfunction + +" Fonction pour la création d'un nouvel onglet +function! OpenFileInNewTab() + let user_choice = input("Voulez-vous ouvrir un fichier existant ? (o/n): ") + if user_choice == 'o' + let file_name = input("Choisir un fichier à ouvrir : ", '', 'file') + if filereadable(file_name) + execute "tabnew " . fnameescape(file_name) + else + echo "Le fichier spécifié n'existe pas : " . file_name + endif + elseif user_choice == 'n' + let new_file = input("Nouveau nom de fichier : ") + execute "tabnew " . new_file + else + echo "\nChoix invalide. Veuillez saisir 'o' pour ouvrir un fichier existant, ou 'n' pour créer un fichier." + endif +endfunction + +" Configuration de la page d'accueil vim +let g:startify_lists = [ + \ {'type': 'files', 'header': ['Fichiers récents']}, + \ ] +let g:startify_custom_header = + \ startify#center(split(system('figlet -w 100 VIMSCODE'), '\n')) + +" Configuration WhichKey +call which_key#register('', "g:which_key_map") +nnoremap :WhichKey '' +set timeoutlen=20 +let g:which_key_map = { + \ 'name' : 'Raccourcis VimsCode' , + \ '' : ['w' , 'fait apparaitre une note'] , + \ '' : ['c' , 'fait apparaitre l arborescence'] , + \ '' : ['s' , 'historique de modification'] , + \ '' : ['v' , 'fait apparaitre un terminal'] , + \ ' souris' : ['f' , 'redimensionnable avec la souris'] , + \ '' : ['v' , 'scroll dans le terminal'] , + \ '' : ['h' , 'fait apparaitre un site aide'] , + \ '' : ['j' , 'créer/ouvre une nouvel fenetre'] , + \ '' : ['l' , 'change de fenetre'] , + \ '' : ['5<' , 'ferme VimsCode'] , + \ 'Ctrl-s' : [':resize +5' , 'divise en deux vim'] , + \ '²' : ['5>' , 'affiche les greffons'] , + \ } +let g:which_key_map.a = { + \ 'name' : 'Raccourcis Vim' , + \ 'Ctrl-w-w' : ['w' , 'other-window'] , + \ 'Ctrl-w-c' : ['c' , 'delete-window'] , + \ 'Ctrl-w-s' : ['s' , 'split-window-below'] , + \ 'Ctrl-w-v' : ['v' , 'split-window-right'] , + \ 'Ctrl-w-h' : ['h' , 'window-left'] , + \ 'Ctrl-w-j' : ['j' , 'window-below'] , + \ 'Ctrl-w-l' : ['l' , 'window-right'] , + \ 'Ctrl-w-k' : ['k' , 'window-up'] , + \ ':resize +5' : [':resize +5' , 'expand-window-below'] , + \ ':resize -5' : [':resize -5' , 'expand-window-up'] , + \ 'Ctrl-w-=' : ['=' , 'balance-window'] , + \ }