Как мне использовать переменные в моем .vimrc? - PullRequest
40 голосов
/ 18 февраля 2010

У меня небольшая проблема с размером вкладки и другим проектом, некоторые как 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

Ответы [ 6 ]

27 голосов
/ 18 февраля 2010

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

попробуйте: список функций справки для получения дополнительной информации. для 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 содержит пробелы, вам придется их избегать, либо в исходной настройке g: desktop_path или при установке 'path', например,

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

См

:help let-option
:help execute
:help escape()
10 голосов
/ 18 февраля 2010

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

let my_sw = 20
let &sw = my_sw

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

7 голосов
/ 13 июля 2013

Как эта тема снова возникла, вот мои несколько битов:

" 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

. И, пожалуйста, забудьте о execute 'set option='.var. let &option=var доступно по крайней мере vim-7.0.

4 голосов
/ 18 февраля 2010

Это решение не использует локальные переменные, но оно даст вам желаемый результат, используя только ваш файл .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
1 голос
/ 13 июля 2013

Меня тоже очень беспокоила эта проблема очень . Это особенно болезненно, когда мне нужно работать с чужим кодом одновременно, что заставляет меня часто менять размер отступа взад-вперед. Раньше у меня было что-то похожее на решение OP, но для этого все равно требуется обновлять файл .vimrc каждый раз. Позже я узнал, что могу просто определить эту функцию, которую я мог бы вызвать из редактора:

function! SetTabSize(size)
    execute "set tabstop=".a:size
    execute "set shiftwidth=".a:size
    execute "set softtabstop=".a:size
endfunction
command! -nargs=1 Sts call SetTabSize(<f-args>)

В редакторе, если вы хотите изменить текущий размер отступа на 4, просто выполните:

:Sts 4

Надеюсь, это поможет.

1 голос
/ 16 мая 2012

Вот одна строка, которая включает / выключает цветовую колонку, когда вы нажимаете лидер + c:

nnoremap <Leader>c :execute "set colorcolumn=" . (&cc == "+1" ? "0" : "+1")<CR>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...