Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 26/12/2012, à 16:24

djipey

[vim] Ajoutez une commande à ma commande

Bonjour.

J'ai une petite astuce maison pour activer le copier/coller dans vim :

map <C-v> :call setreg("\"",system("xclip -o -selection clipboard"))<CR>

(Ça, c'est pour coller). Cette commande est appelée à chaque fois que je fais un Ctrl+v. Le truc c'est que j'ai trouvé cette commande sur un forum, et que je ne connais rien à la syntaxe de vim. Et cette commande pose problème avec un de mes plugins. Du coup, je voudrais vous demander un tout petit service. Est-ce qu'il est possible de rajouter une option avant et après cette commande ?

Je voudrais faire ça :

set paste; lancer la commande ; set nopaste

Je vous serais très reconnaissant si vous pouviez me donner un coup de main sur ce coup là.

Bien à vous.

Hors ligne

#2 Le 26/12/2012, à 17:00

credenhill

Re : [vim] Ajoutez une commande à ma commande

hello
essayer

map <C-v> :set paste<CR>:call setreg("\"",system("xclip -o -selection clipboard"))<CR>:set nopaste<CR>

Hors ligne

#3 Le 26/12/2012, à 17:59

djipey

Re : [vim] Ajoutez une commande à ma commande

Désolé, mais ça n'a pas marché.

Hors ligne

#4 Le 27/12/2012, à 11:42

credenhill

Re : [vim] Ajoutez une commande à ma commande

et avec

map <C-v> :set paste<CR>\|:call setreg("\"",system("xclip -o -selection clipboard"))<CR>\|:set nopaste<CR>

Hors ligne

#5 Le 27/12/2012, à 13:23

djipey

Re : [vim] Ajoutez une commande à ma commande

Et non, toujours pas..

Hors ligne

#6 Le 27/12/2012, à 14:03

pires57

Re : [vim] Ajoutez une commande à ma commande

mouai sinon tu as les commandes de base, c'est a dire

Y	Copie une ligne
nY	Copie n lignes
P	Colle les lignes avant le curseur
p	Colle les lignes après le curseur

Utilisateur d'Archlinux, Ubuntu et Kali Linux
Administrateur système et réseau spécialisé Linux.
LinkedIn

Hors ligne

#7 Le 27/12/2012, à 14:17

djipey

Re : [vim] Ajoutez une commande à ma commande

Sans blague smile

Non sérieusement, oui je sais que j'ai ces commandes, mais les problèmes surviennent quand tu veux coller un bout de code venant d'une autre application. Ces commandes ne marchent qu'à l'intérieur du même buffer de vim il me semble.

Hors ligne

#8 Le 01/01/2013, à 20:38

elendil

Re : [vim] Ajoutez une commande à ma commande

Salut,

Pour copier le code à coller tu as fait un simple Ctrl+c dans une appli (mettons Gedit pour l'exemple).
Du coup le code à coller est dans le presse papier de la distribution et ailleurs que dans Vim un simple Ctrl+v le colle là où est ton curseur.

Bon à partir de là, dans Vim, il te suffit de faire

"*p

pour copier le contenu du presse papier juste à l'emplacement de ton curseur la même chose avec

"*P

le fera juste avant le curseur.

Du coup pas besoin de comande tordu c'est intégré à Vim.

Une autre astuce

:reg

te donne le contenu de tous les buffer et l'indice avec lequel ils sont accessibles.
De la même façon pour copier depuis Vim vers le presse papier, il suffit de faire

"*y

(Bien sûr tu peux jouer sur le nombre de ligne comme avec n'importe quel copier, il suffit de préciser le buffer avant.

Elendil

Hors ligne

#9 Le 02/01/2013, à 11:57

djipey

Re : [vim] Ajoutez une commande à ma commande

Tu es sûr de toi ? Parce que si je me rappelle bien, Vim n'utilise pas le même presse-papier que les applications graphiques. C'est une application X11 (en console), pas graphique. Le presse-papier n'est donc pas le même. C'est un peu le même principe que quand tu sélectionnes un texte et que tu le colles en faisant un clic molette (c'est d'ailleurs dans ce presse-papier ci que vim travaille). Enfin ça c'est ce dont je me rappelle, mais je peux me tromper.

Est-ce que "*p marche chez toi, après avoir fait un Ctrl+c dans une application graphique ? Parce que je viens de faire le test chez moi, et ça ne marche pas. Tu utilises bien vim en console ?

Hors ligne

#10 Le 03/01/2013, à 09:37

elendil

Re : [vim] Ajoutez une commande à ma commande

Tu m'as mis le doute et je viens de le vérifier et oui Vim permet de coller ce qui vient du presse-papier.

Je viens de copier ton post avec Ctrl+C depuis Firefox et dans Vim en console j'ai fais "*p et ça a bien fonctionné.

Voici ma version de Vim :

VIM - Vi IMproved 7.3 (2010 Aug 15, compiled May  4 2012 04:22:36)

Je n'ai rien trouvé dans mon vimrc ou dans les plugin que j'utilise qui change le comportement du copier coller.
Par contre j'ai aussi installé vim-gui (ou vim-gnome) qui permet d'avoir Vim dans un GUI.
Mais j'ai bien testé le coller dans Vim et non Gvim.

Elendil

Hors ligne

#11 Le 04/01/2013, à 17:53

djipey

Re : [vim] Ajoutez une commande à ma commande

Ok, l'expérience donne raison de toute manière. Mon vimrc ressemble à ça :

set nocompatible

" Vim5 and later versions support syntax highlighting. Uncommenting the next
" line enables syntax highlighting by default.
syntax on
filetype on
filetype plugin on

" If using a dark background within the editing area and syntax highlighting
" turn on this option as well
set background=dark

" Uncomment the following to have Vim jump to the last position when
" reopening a file
if has("autocmd")
  au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif
endif

" Uncomment the following to have Vim load indentation rules and plugins
" according to the detected filetype.
if has("autocmd")
  filetype plugin indent on
endif

" On détecte le type de fichier, et si appartient aux lignes suivantes, utilisation d'un modèle stocké dans .vim/templates
au bufNewFile *.py 0r ~/.vim/templates/python.py
au bufNewFile *letter.tex 0r ~/.vim/templates/letter.tex
au bufNewFile *report.tex 0r ~/.vim/templates/report.tex

" Détecte les conkyrc
au BufNewFile,BufRead *conkyrc* set filetype=conkyrc

" Options pour la sauvegarde des folders à la fermeture.
au BufWinLeave * mkview
au BufWinEnter * silent loadview

" On active l'historique
set backup
set backupdir=~/.vim/backup/

" On active ctags, qui récupère les variables et les fonctions du fichier de
" code. On l'active pour être utilisé avec TagList.
let Tlist_Ctags_Cmd = "/usr/bin/ctags"
let tlist_python_settings = 'python;c:class;f:function;m:member;v:variable;i:import'

" Donne le focus à TagList à l'ouverture
let Tlist_GainFocus_On_ToggleOpen = 1 "automatically switch to taglist window
let Tlist_Close_On_Select = 1 "close taglist window once we selected something
let Tlist_Exit_OnlyWindow = 1 "if taglist window is the only window left, exit vim

" Petit hack permettant de copier/coller de et vers Vim avec Ctrl+C et Ctrl+V.
" Trouvé sur http://forum.ubuntu-fr.org/viewtopic.php?id=295612
" On ubuntu (running Vim in gnome-terminal)
" " The reason for the double-command on <C-c> is due to some weirdness with
" the X clipboard system.
vmap <C-c> y:call system("xclip -i -selection clipboard", getreg("\""))<CR>:call system("xclip -i", getreg("\""))<CR>
map <C-v> :call setreg("\"",system("xclip -o -selection clipboard"))<CR>

"Pour la gestion des plugins avec vundle
"crée un dossier vundle dans le .vim, permet de ne pas tout éparpiller.
"ATTENTION: mettre tous les plugins à installer ici
"http://hobbestigrou.interface-c.com/articles/gestion_plugin_vim_avec_vundle
set rtp+=~/.vim/bundle/vundle/ 
call vundle#rc() 

" Plugin pour les gérer tous ICI
Bundle 'gmarik/vundle'   
" Commenter ac des raccourcis clavier
Bundle 'comments.vim'   
" Redéfinir un vimrc dans un dossier
Bundle 'local_vimrc.vim' 
" Les snippets persos + fournis
Bundle 'snipMate'        
" Autocomplétion dans la recherche
Bundle 'SearchComplete'  
" Sélectionner des blocs indentés (python)
Bundle 'vim-indent-object'

Bundle 'fs111/pydoc.vim'


" On remappe la touche F9 pr activer/désactiver paste.
" Activé, ça garde l'indention lors d'un copier/coller, mais désactive
" l'autocomplétion intelligente
map <F9> :set paste!<CR>

" On remape la touche F8 pour mettre à jour les plugins installés
" manuellement
map <F8> :BundleInstall!<CR>
"
"On remape la touche F7 pour activer/désactiver l'auto-correction
nmap <F7> :set spell!<CR>

" F6 réajuste le contenu de la ligne à 100 caractères
vmap <F6> !fmt -w 79 <CR>

" On remape F2 pour splitter l'écran verticalement
nmap <F2> :vsp<CR>

" On remape F3 pour avoir la liste des tags
nmap <F3> :TlistToggle<cr>

" On remape F4 pour toggle Nertree
map <F4> :NERDTreeToggle<CR>

" The following are commented out as they cause vim to behave a lot
" differently from regular Vi. They are highly recommended though.
set showcmd		" Show (partial) command in status line.
set ignorecase		" Do case insensitive matching
set smartcase		" Do smart case matching
set incsearch		" Incremental search
set hidden          " Hide buffers when they are abandoned
set mouse=a		    " Enable mouse usage (all modes)
set confirm         " Active une confirmation si on quitte sans sauver


" Ajouté par djipey
colorscheme molokai   " On définit ici le thème de vim. Les fichiers sont dans .vim/colors/
set t_Co=256          " On passe le terminal en 256 couleurs pour pouvoir utiliser les thèmes de coloration de vim
set spelllang=fr,en      " On définit la langue pour la correction orthographique
set spellsuggest =5     " 5 suggestions seulement lors de la correciton orthographique
"set spell             " On active la correction orthographique par défaut. :set nospell pour la désactiver.:set nospell
set autoread          " Recharge le fichier automatiquement s'il est modifié

set laststatus=2      " Afficher la barre d'état
:set statusline=%F%m%r%h%w\ [TYPE=%Y]\ [tot.lignes=%L]\ [x/y=%3v;%3l]\ [%p%%]

set number            " Afficher le numéro de ligne
set ruler             " Afficher la position du curseur
set hlsearch          " Met en surbrillance les termes trouvés lors d'une recherche
set autoindent		  " Pour garder l'indention quand on passe à la ligne
set smartindent       " Indention intelligente

" Colore la ligne et la colonne courante
set cursorline
set cursorcolumn

" Quand une fermeture de parenthèse est entrée par l'utilisateur,
" " l'éditeur saute rapidement vers l'ouverture pour montrer où se
" " trouve l'autre parenthèse. Cette fonction active aussi un petit
" " beep quand une erreur se trouve dans la syntaxe.
""set showmatch
""set matchtime=2


set tabstop=4  
set softtabstop=4
set shiftwidth=4
set smarttab
set expandtab
"set textwidth=79  " Fixe la longueur des indentions (pour python spécifiquement)
"set nowrap             " Pas de retour à la ligne
"set paste               " Garde l'indention lors d'un copier-coller
"set tw=105              " Définit la longueur de la ligne
set so=3                " toujours 3 lignes à partir du début
set siso=2              " toujours 2 lignes avant la fin
set title               " affiche le titre dans la barre de titre du term


" On active l'enregistrement automatique
set autowriteall "Comme 'autowrite', mais également utilisé pour les commandes :edit, :quit, :qall, :exit, :xit, :recover et les commandes de fermeture de la fenêtre Vim. Si vous activez cette option, Vim se comportera comme si 'autowrite' était activée.


" Les replis se font sur l'indention
set foldmethod=indent

" Customisation des onglets
:hi TabLineFill term=bold cterm=bold ctermbg=0
:hi TabLine term=bold cterm=bold ctermbg=0 ctermbg=0

J'ai commenté les 2 lignes suivantes , puis ressourcé le vimrc :

" Petit hack permettant de copier/coller de et vers Vim avec Ctrl+C et Ctrl+V.
" Trouvé sur http://forum.ubuntu-fr.org/viewtopic.php?id=295612
" On ubuntu (running Vim in gnome-terminal)
" " The reason for the double-command on <C-c> is due to some weirdness with
" the X clipboard system.
vmap <C-c> y:call system("xclip -i -selection clipboard", getreg("\""))<CR>:call system("xclip -i", getreg("\""))<CR>
map <C-v> :call setreg("\"",system("xclip -o -selection clipboard"))<CR>

Mais ça n'a rien changé, le "*p ne colle pas ce qui est dans le presse papier, juste des trucs qui sont dans un des buffers de vim. Voici ma version de Vim:

VIM - Vi IMproved 7.3 (2010 Aug 15, compiled Dec  8 2012 16:46:09)

Une idée d'où ça peut venir ? Je ne crois pas que mes plugins touchent au copier/coller.

Hors ligne

#12 Le 06/01/2013, à 14:18

elendil

Re : [vim] Ajoutez une commande à ma commande

Salut,

À première vu, je ne vois rien d'anormal.

=> Un petit test pour voir si ça vient de Vim ou du système:
Renomme le dossier ~/.vim en ~/.vim_save et fais la même chose pour le vimrc soit:

mv ~/.vim ~/.vim_save
mv ~/.vimrc ~/.vimrc_save

Puis lance Vim et copie via Ctrl+c et colle via "*p pour voir si cela fonctionne.
Si oui alors il y a un plugin qui fais tout planté.
Sinon Vim et le presse-papier ne communique pas bien.

Je viens de penser à autre chose: Est-il possible que le paquet vim-gnome modifie le fonctionnement de Vim ?
Voici la liste des paquets que j'ai installé concernant Vim (dpkg -l | grep "vim") me renvoie :

ii  vim-common                             2:7.3.429-2ubuntu2.1                    Vi IMproved - Common files
ii  vim-gnome                              2:7.3.429-2ubuntu2.1                    Vi IMproved - enhanced vi editor - with GNOME2 GUI
ii  vim-gui-common                         2:7.3.429-2ubuntu2.1                    Vi IMproved - Common GUI files
ii  vim-runtime                            2:7.3.429-2ubuntu2.1                    Vi IMproved - Runtime files
ii  vim-tiny                               2:7.3.429-2ubuntu2.1                    Vi IMproved - enhanced vi editor - compact version

Et il y a aussi le paquet :

ii  exuberant-ctags                        1:5.9~svn20110310-3                     build tag file indexes of source code definitions

Dans tous les cas la première chose à faire est de tester le copier/coller avec in Vim tout propre comme je t'ai expliqué au début du post.
Si le teste ne fonctionne pas (le copier/coller n'est pas opérationnel), regardes la liste des paquets que je t'ai donné pour voir si les mêmes sont installés chez toi.
Si le test a fonctionné (copier/coller fonctionne avec "*p), alors c'est at configuration qui le fait planter et dans ce cas là, il faut reprendre un à un tes modules et tester à chaque fois si le copier/coller fonctionne.

Une dernière chose : la commande :reg liste les registres et leur contenus (très utile pour savoir ce qui est copier ou non).

Elendil

Hors ligne