Utilisateur:Goulven

De Disposition de clavier francophone et ergonomique bépo

Version du 2 octobre 2020 à 11:27 par Goulven (discuter | contributions)

(diff) ← Version précédente | Voir la version courante (diff) | Version suivante → (diff)

Voici ma configuration Vim/Neovim. Le mappage de l'ensemble des touches à été revu et repensé pour une adaptation logique et efficace de Vim avec le bépo. Attention: la double virgule (,,) est utilisée à la place de ESC (voir mémo à la fin). J'ai volontairement laissé les plugins et skins pour exemple.

Vim Typematrix.png

Le fichier .vimrc :

" .vimrc
" Configuration Bépo
"
" Goulven
" 
" Ajouter vim depuis le dépot:
" sudo add-apt-repository ppa:jonathonf/vim
" sudo apt update
" 
set nocompatible
set encoding=utf-8
set fileencoding=utf-8
set number
set title
set ruler
set visualbell
set noerrorbells
set lbr!
set mouse=a
set mousehide
set ttyfast
set wrap
set textwidth=80
set history=20
set diffopt=vertical

" Délai de basculement du mode insertion/normal
set timeoutlen=1000	"pour les touches remappées
set ttimeoutlen=0	"pour les codes de touches (touche Échap)

" Recherche
set ignorecase
set smartcase
set incsearch
set hlsearch

" Indentation
set autoindent
set smartindent
set cindent
set tabstop=4
set shiftwidth=4
set expandtab
set backspace=indent,eol,start

" Lecture/enregistrement
set autoread
set autowrite

autocmd FocusLost,TabLeave * :wall

if has("autocmd")
	autocmd! bufwritepost .vimrc source ~/.vimrc
endif

" Coloration syntaxique
if has("syntax")
	syntax on
endif

" Affichage
set showcmd
set showmode
set shortmess+=I
set cursorline

" set showmatch

" Folding
set foldcolumn=3
set foldmethod=manual


" Correction orthographique
"set spelllang=en,fr
"set spell
"set spellsuggest=5

filetype off
set rtp+=~/.vim/bundle/Vundle.vim
call vundle#begin()

" Chargement du gestionnaire de plugin vundle
" https://github.com/gmarik/Vundle.git ~/.vim/bundle/Vundle.vim
Plugin 'gmarik/Vundle.vim'

Plugin 'scrooloose/syntastic'
Plugin 'scrooloose/nerdtree'
Plugin 'scrooloose/nerdcommenter'
Plugin 'vim-airline/vim-airline'
Plugin 'vim-airline/vim-airline-themes'
Plugin 'sirver/ultisnips'
Plugin 'honza/vim-snippets'
Plugin 'tpope/vim-fugitive'
Plugin 'tpope/vim-surround'
" Plugin 'tpope/vim-repeat'
" Plugin 'tpope/vim-unimpaired'
Plugin 'ervandew/supertab'
Plugin 'valloric/youcompleteme'
Plugin 'kien/ctrlp.vim'
Plugin 'majutsushi/tagbar'
Plugin 'raimondi/delimitmate'
Plugin 'nathanaelkane/vim-indent-guides'
Plugin 'kien/rainbow_parentheses.vim'
Plugin 'morhetz/gruvbox'
Plugin 'NLKNguyen/papercolor-theme'
Plugin 'drewtempelmeyer/palenight.vim'
Plugin 'octol/vim-cpp-enhanced-highlight'
Plugin 'bfrg/vim-cpp-modern'
Plugin 'quark-zju/vim-cpp-auto-include'
Plugin 'andrewradev/splitjoin.vim'


call vundle#end()
filetype plugin indent on
filetype plugin on

" Syntastic
set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*
let g:syntastic_always_populate_loc_list=1 
let g:syntastic_auto_loc_list=1
let g:syntastic_check_on_open=1
let g:syntastic_check_on_wq=0
let g:syntastic_cpp_compiler_options='-std=c++17'

" The NERD Tree
let g:NERDTreeMapOpenVSplit='v'

" The NERD Commenter
let g:NERDSpaceDelims=1
let g:NERDCompactSexyComs=1
let g:NERDDefaultAlign='left'
let g:NERDAltDelims_java=1
let g:NERDCustomDelimiters={ 'c': { 'left': '/**','right': '*/'}}
let g:NERDCommentEmptyLines=1
let g:NERDTrimTrailingWhitespaces=1

" vim-airline
" Attention installer le paquet fonts-powerline
" ou bien git clone https://github.com/powerline/fonts.git --depth=1
" cd fonts && ./install.sh
let g:airline#extensions#tabline#enabled=1
let g:airline_theme='hybridline'
let g:airline_powerline_fonts=1
let g:airline#extensions#tagbar#enabled = 1
let g:airline#extensions#tmuxline#enabled = 1

"Ultisnips
let g:UltiSnipsSnippetsDir="~/.vim/UltiSnips"
let g:UltiSnipsEditSplit="vertical"
" let g:UltiSnipsJumpForwardTrigger="<C-r>"
" let g:UltiSnipsJumpBackwardTrigger="<C-t>
let g:UltiSnipsExpandTrigger = "<tab>"
let g:UltiSnipsJumpForwardTrigger = "<tab>"
let g:UltiSnipsJumpBackwardTrigger = "<s-tab>""

" make YCM compatible with UltiSnips (using supertab)
let g:ycm_key_list_select_completion = ['<C-r>', '<Down>']
let g:ycm_key_list_previous_completion = ['<C-t>', '<Up>']
" let g:ycm_server_keep_logfiles = 1
" let g:ycm_server_log_level = 'debug'
let g:SuperTabDefaultCompletionType = '<C-n>'

let g:omni_sql_no_default_maps = 1

" vim-surround
" Remappage des touches 'opérateur'
"
" d devient e
" c devient x
" y devient c
"
" if exists("g:surround_bepo_mappings")
"   nmap es  <Plug>Dsurround
"   nmap xs  <Plug>Csurround
"   nmap xS  <Plug>CSurround
"   nmap cs  <Plug>Ysurround
"   nmap cS  <Plug>YSurround
"   nmap css <Plug>Yssurround
"   nmap cSs <Plug>YSsurround
"   xmap <leader>S   <Plug>VSurround
"   xmap <leader>Sg  <Plug>VgSurround
" endif
"
" Puis on désactive le mappage de surround par défaut
" et on ajoute le mappage leader_s
let g:surround_no_mappings=1
let g:surround_bepo_mappings=1

" CtrlP
let g:ctrlp_show_hidden=1
let g:ctrlp_working_path_mode=0

set wildignore+=*/tmp/*,*.so,*.swp,*.zip	" Unix
set wildignore+=*\\tmp\\*,*.swp,*.zip,*.exe	" Windows
set wildignore+=*.a,*.o
set wildignore+=*.bmp,*.gif,*.ico,*.jpg,*.png
set wildignore+=.DS_Store,.git,.hg,.svn
set wildignore+=*~,*.tmp
set wildignore+=*/Nas/*

let g:ctrlp_custom_ignore='\v[\/]\.(git|hg|svn)$'
let g:ctrlp_custom_ignore={
			\ 'dir':	'\v[\/]\.(git|hg|svn)$',
			\ 'file':	'\v\.(exe|so|dll)$',
			\ 'link':	'some_bad_symbolic_links',
			\}

" Indent Guides
let g:indent_guides_enable_on_vim_startup=0

" DelimitMate
let delimitMate_expand_cr=1
let delimitMate_expand_space=1
let delimitMate_smart_quotes='\w\%#'

" Rainbow Parentheses
au VimEnter * RainbowParenthesesToggle
au syntax * RainbowParenthesesLoadRound
au syntax * RainbowParenthesesLoadSquare
au syntax * RainbowParenthesesLoadBraces

" Theme gruvbox 
if has ('gui_running')
    set guifont=Droid\ Sans\ Mono\ for\ Powerline\ Regular\ 16
	colorscheme gruvbox
	set background=dark
else
	set background=light
	colorscheme PaperColor
endif

" vim-cpp-auto-include
" autocmd BufWritePre /home/goulven/Devel/**.cpp :ruby CppAutoInclude::process

"" mapping du clavier bépo->qwerty en mode normal
""
" n  Normal mode map. Defined using ':nmap' or ':nnoremap'.
" i  Insert mode map. Defined using ':imap' or ':inoremap'.
" v  Visual and select mode map. Defined using ':vmap' or ':vnoremap'.
" x  Visual mode map. Defined using ':xmap' or ':xnoremap'.
" s  Select mode map. Defined using ':smap' or ':snoremap'.
" c  Command-line mode map. Defined using ':cmap' or ':cnoremap'.
" o  Operator pending mode map. Defined using ':omap' or ':onoremap'.
" 
" <Space>  Normal, Visual and operator pending mode map. Defined using
"          ':map' or ':noremap'.
" !  Insert and command-line mode map. Defined using 'map!' or
" 'noremap!'.
 
noremap b ^
onoremap b ^
noremap é b
onoremap é b
noremap p w
onoremap p w
noremap o o
noremap è <c-w>
noremap èè <c-w><c-w>
noremap èd <c-w><Up>
noremap ès <c-w><Down>
noremap èt <c-w><Left>
noremap èr <c-w><Right>
noremap ^ p
noremap v v
noremap d k
onoremap d k
noremap l $
onoremap l $
noremap j /
onoremap j /
noremap z t
onoremap z t
noremap w K
noremap a a
noremap u e
onoremap u e
noremap i i
noremap e d
noremap \ \
noremap , ~
inoremap ,, <esc>
noremap c y
noremap t h
onoremap t h
noremap s j
onoremap s j
noremap r l
onoremap r l
noremap n u
noremap m @
nnoremap m @
noremap à r
noremap y s
noremap x c
noremap . .
noremap k x
noremap ' >
noremap q z
noremap qq zz
noremap gg gg
noremap ga g~
noremap h ;
onoremap h ;
noremap f f
onoremap f f

noremap B \|
onoremap B \|
noremap É B
onoremap É B
noremap P W
onoremap P W
noremap O O
noremap È J
noremap \! P
noremap D <c-u>
onoremap D <c-u>
noremap L %
noremap J ?
onoremap J ?
noremap Z T
onoremap Z T
noremap A A
noremap U E
onoremap U E
noremap I I
noremap E D
noremap ; =
noremap C Y
noremap T N
onoremap T N
noremap S <c-d>
onoremap S <c-d>
noremap R n
onoremap R n
noremap N U
noremap M '
onoremap M '
noremap À R
noremap Y S
noremap X C
noremap K X
noremap ? <
noremap Q Z
noremap G G
onoremap G G
noremap H ,
onoremap H ,
noremap F F
onoremap F F
noremap Ç "

" remappage text ojects
onoremap ap aw
onoremap aP aW
onoremap ip iw
onoremap iP iW
onoremap a) as
onoremap i) is
onoremap aj ap
onoremap ij ip

noremap " !		" Filtre externe
noremap « -		" Ligne précédente
onoremap « -
noremap » +		" Ligne suivante
onoremap » +
noremap @ q		" Enregist. macro
nnoremap @ q
noremap + <c-a>		" Incrémenter
noremap - <c-x>		" Décrémenter
noremap / {		" Début paragraphe
onoremap / {
noremap * }		" Fin paragraphe
onoremap * }
noremap = -		" DDP du dessous

" touches Crtl
noremap <c-i> H		" Haut écran
noremap <c-u> M		" Milieu écran
noremap <c-a> L		" Bas écran
noremap <c-o> <c-b>	" Page dessus
noremap <c-e> <c-f>	" Page dessous
noremap <c-l> <c-y>	" Défil. ligne au dessous
noremap <c-j> <c-e>	" Défil. ligne au dessus
noremap <c-c> <c-]>	" Ctags identifiant
noremap <c-f> <c-g>	" Info curseur
noremap <c-q> #		" Id tag précédent
noremap <c-h> *		" Id tag suivant
noremap <c-n> &		" Refaire
noremap <c-b> m		" Définir marque
noremap <c-m> `		" Marque précédente
nnoremap <c-s> :w<CR>	" Enregistrer

noremap <c-k> Q		" Ex mode
noremap <c-x> <c-c>	" Normal/cancel

let mapleader="ç"

" extensions ^ du bépo
noremap ô :NERDTreeToggle<CR>
noremap î :IndentGuidesToggle<CR>
noremap û :UltiSnipsEdit<CR>
noremap ê :RainbowParenthesesToggle<CR>

" mappages avec Leader
nmap <leader>t :TagbarToggle<CR>
nmap <leader>k ggg?G``

Petit mémo:

,, ESC

=== Buffers/Window/Tabs ===
:ls	List buffers.
:bw	Close current buffer.
:bn	Next buffer.
:bp	Previous buffer.

:sp [file]	 	-open file on horizontal window
:vsp [optional-file]	-open file on vertical window

èè	aller a la fenêtre suivante.
èn	nouvelle fenêtre horizontale (nouveau buffer)
ès	divise la fenêtre horizontalement (buffer courant)
èv	divise la fenêtre verticalement (buffer courant)
è=	egaliser la taille des fenêtres
èc	close window
èo	close all windows, leaving: only the current window open
èw	go to next window
èp	go to previous window
èd	go to window above
ès	go to window below
èt	go to window on left
èr	go to window on right
èx	échanger deux fenêtres	
èT	basculer la fenêtre active dans un nouvel onglet

:tabn ou gt	onglet suivant
:tabp ou gT	onglet précédent
v
:tabc		fermer onglet courant
:tabo		-close all others tabs leaving ONLY the current tab open

=== Formatage texte ===
gg,l	indenter tout le fichier
= Opérateurs =
x 	remplacer
e 	supprimer (effacer)
^	couper et mémoriser dans un registre
ga	Alterner la casse
gu	Convertir en minuscule
gU	Convertir en majuscule
K	Décaler vers la droite
?	Décaler vers la gauche
<c-a>	Indenter automatiquement

= Text objects =
ip	Mot courant
ap	Mot courant plus un espace
iP	MOT courant
aP	MOT courant plus un espace
i)	Phrase courante
a)	Phrase courant plus un espace
ij	Paragraphe courant
aj	Paragraphe courant plus une ligne blanche

= Text Objects Sélection =
ab	Autour d'une paire de parenthèses
ib	À l'intérieur d'une paire de parenthèses
aB	Autour d'une paire d'accolades
iB	À l'intérieur d'une paire d'accolades
]	[ Crochets ]
>
'
"
`
t

=== Folding ===
qf	créer un repli
qo	ouvrir repli
qc	fermer repli
qr	ouvrir tous les replis
qm	fermer tous les replis
q[RM]	+ tous les niveaux
qi	active/désactive le folding

=== Scrolling ===
qq	au milieu
qb	en bas
qt	en haut

=== vim-surround ===
es[caracter_to_delete]
xs[target_caracter][remplacement_caracter]
cs[pattern-motion][caracter]
css[caracter_added_on_entire_line]
(){}[]<>
b (
B )
r }
a ]
`
"
'
t Xml or HTML tags
w word
s sentence
p paragraph

=== NERD Tree ===
ô	ouvrir/fermer NERDTree
== Fichiers
o	ouvrir un fichier
go	aperçu du fichier
t	ouvrir un fichier dans un onglet
T 	ouvrir un fichier dans un onglet mais reste sur la fenêtre courante
!	executer un fichier
== Repertoires
o	ouvrir/fermer le répertoire
O	ouvrir le répertoire et les sous-répertoires
x	fermer le noeud parent
X	fermer tous les noeuds des sous-répertoires
== Explorateur
P	aller à la racine
p	aller au répertoire parent
K	aller sur le premier répertoire fils
J	aller sur le dernier répertoire fils
d et s 	naviguer sur les dossiers/fichiers
== Système de fichier
C	placer le rep courant comme racine de l'explorateur
u	déplacer la racine de l'explorateur vers le rep précédent
U	idem, mais laisse l'ancien rep racine ouvert
r	rafraîchir le rep courant
R	rafraîchir le racine
m	affiche le menu de l'explorateur
== Filtres
I	afficher/cacher les fichiers cachés
f	filtrer les fichiers
F	afficher/cacher les fichiers
== Autres
q	fermer l'explorateur
?	aide

=== Nerd Commenter ===
çcc	commenter la séléction ou ligne
ççi	inverser le commentaire


=== Autres ===
î   IndentGuide Toggle
û   UltisnipsEdit
ê   RainbowParenthese Toggle