Как я использую переменные в своем .vimrc?

У меня есть небольшая проблема с "размером вкладки" и другим проектом, некоторым нравится 2 или 4 и ядро Linux как 8 пробелов на вкладку.

И это не большая проблема, так как я могу просто изменить несколько настроек в своем .vimrc

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

Но это - 3 строки, которые я должен изменить...

Было бы хорошо иметь одну строку с переменной с номером 2,4 или 8.

Немного как

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

Но это не работает...

Вы знаете, как зафиксировать это?

Спасибо Johan


Обновление: Это решает мою небольшую проблему.

let tabsize = 4
execute "set tabstop=".tabsize
execute "set shiftwidth=".tabsize
execute "set softtabstop=".tabsize
41
задан Johan 18 February 2010 в 06:59
поделиться

3 ответа

нельзя использовать переменные в правой части файла .vimrc.

try: help feature-list для получения дополнительной информации. для unix и windows, например (не уверен, какие у вас проекты):

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

может работать, или другие примеры:

let &path = g:desktop_path

или

execute "set path=".g:desktop_path

Если g: desktop_path содержит пробелы, вам придется их избегать, либо {{1 }} в исходной настройке g: desktop_path или при настройке 'path', например,

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

См.

:help let-option
:help execute
:help escape()
28
ответ дан 27 November 2019 в 00:49
поделиться

Это решение не использует локальные переменные, но даст вам желаемый результат, используя только ваш файл .vimrc . Просто добавьте приведенный ниже код в файл .vimrc и добавьте дополнительные параметры проекта (даже сопоставления) для соответствующих функций ниже. (Не забудьте изменить пути подстановки в строках autocmd! на соответствующее имя папки.)

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
5
ответ дан 27 November 2019 в 00:49
поделиться

Это работает:

let my_sw = 20
let &sw = my_sw

Теперь вы можете понять, как исправить свой код

11
ответ дан 27 November 2019 в 00:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: