50 votes

Comment utiliser des variables dans mon .vimrc ?

J'ai un petit problème avec la "taille des tabulations" et les différents projets, certains aiment 2 ou 4 et le noyau Linux aime 8 espaces par tabulation.

Et ce n'est pas un gros problème puisque je peux simplement changer quelques paramètres dans mon .vimrc.

set tabstop=4
set shiftwidth=4
set softtabstop=4

Mais cela fait 3 lignes que je dois changer...

Ce serait bien d'avoir une ligne avec une variable avec le nombre 2, 4 ou 8.

Un peu comme

let l:tabsize=4
set tabstop=l:tabsize
set shiftwidth=l:tabsize
set softtabstop=l:tabsize

Mais ça ne marche pas...

Savez-vous comment réparer cela ?

Merci Johan


Mise à jour : Cela résout mon petit problème.

let tabsize = 4
execute "set tabstop=".tabsize
execute "set shiftwidth=".tabsize
execute "set softtabstop=".tabsize

0 votes

Voir aussi les réponses à Préférences Tab Vs Espace dans Vim .

31voto

volvox Points 804

Vous ne pouvez pas utiliser de variables sur les rhs dans le .vimrc.

Essayez :help feature-list pour plus d'informations. pour unix vs Windows par exemple (je ne sais pas quels sont vos projets) :

if has("unix")
    " do stuff for Unix
elseif has("win32")
    " do stuff for Windows
endif

pourrait fonctionner, ou un autre exemple est

execute "set path=".g:desktop_path

Si g:desktop_path contient des espaces, vous devrez les échapper, soit dans le paramétrage original de g:desktop_path ou lors du paramétrage de 'path', par exemple,

execute "set path=".escape(g:desktop_path, ' ')

Voir

:help let-option
:help execute
:help escape()

0 votes

Solution acceptée puisque vous avez fourni un exemple de syntaxe "execute"... c'était la partie manquante.

1 votes

En outre, le let &path = g:desktop_path ne fonctionne pas ; seul le execute approche

0 votes

J'ai supprimé l'exemple qui ne fonctionnait pas (note à ceux qui ont voté pour une modification, votre modification contenait une coquille d'où le rejet).

15voto

dimba Points 5389

Ça marche :

let my_sw = 20
let &sw = my_sw

Maintenant vous pouvez trouver comment corriger votre code

0 votes

Pour ceux qui sont curieux de connaître cette syntaxe, vous pouvez consulter le site suivant cette page . Pour faire court, my_sw est une variable déclarée par nous, et nous pouvons préfixer un & aux options intégrées pour les utiliser comme variables, comme &sw ici.

13voto

ZyX Points 26516

Comme ce sujet a été remis au goût du jour, voici mes quelques éléments :

" In the vimrc
set softtabstop=-1 " Make 'softtabstop' follow 'shiftwidth'
set shiftwidth=0   " Make 'shiftwidth' follow 'tabstop'

" Somewhere else
let &tabstop=l:tabsize " Assign 'tabstop' a value of local tabsize variable
" or, typed manually
set ts=4

. Et s'il vous plaît, oubliez execute 'set option='.var . let &option=var est disponible depuis au moins vim-7.0 .

5voto

too much php Points 27983

Cette solution n'utilise pas de variables locales, mais elle vous permettra d'obtenir le résultat souhaité en utilisant uniquement votre fichier .vimrc dossier. Il suffit d'ajouter le code ci-dessous à votre .vimrc et ajoutez plus d'options spécifiques au projet (même les mappings) aux fonctions correspondantes ci-dessous. (N'oubliez pas de modifier les chemins d'accès globaux dans le fichier autocmd! vers le nom du dossier approprié).

autocmd! BufReadPost,BufNewFile */myProject/** call <SID>MyProjectOptions()
autocmd! BufReadPost,BufNewFile */linux-kernel/** call <SID>LinuxKernelOptions()

function! <SID>MyProjectOptions()
    " everything in this function only applies to myProject files
    setlocal tabstop=4
    ...
endfunction

function! <SID>LinuxKernelOptions()
    " everything in this function only applies to linux kernel files
    setlocal tabstop=8
    ...
endfunction

2voto

patspam Points 231

Voici une ligne simple qui permet d'activer ou de désactiver la colonne de couleur lorsque vous appuyez sur leader+c :

nnoremap <Leader>c :execute "set colorcolumn=" . (&cc == "+1" ? "0" : "+1")<CR>

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X