2015-12-24 3 views
0

По каким-то личным причинам я хотел бы настроить мой VIM очень подробно. Например, в конкретном каталоге, скажем, «CFxxx», когда я создаю файл cpp, я бы хотел, чтобы он предварительно написал код кода в мой код. Но если я не был в этом каталоге, vim работает нормально.Что такое грамматика vimrc, как использовать переменную, функцию в vimrc?

Как я нашел на vimrc других, они определяют функцию, а также использовать типов файлов для обнаружения CPP файлы и использовать коды, как это добавить код шаблона:

if (expand("%:e") == 'cpp' || expand("%:e") == 'cc') 
    call append(line(".")+6, "#include<bits/stdc++.h>") 
    call append(line(".")+7, "using namespace std;") 
    call append(line(".")+8, "") 
endif 

Но это слабее, чем то, что я хочу. Я хотел бы, чтобы он был специфичным для каталога и специфичным для файла. Я нашел функцию getcwd() как встроенную функцию в vim, которую можно использовать для получения каталога, но я не знаю, как ее использовать в vimrc. И в этом все дело.

Так что же такое грамматика vimrc? Это известный язык программирования? Где я могу научиться писать правильный код, чтобы настроить мой vim и решить вышеуказанную проблему.

+0

Чтобы узнать vimscript, ознакомьтесь с очень хорошими ссылками, приведенными на странице [SO vim tag info] (http://stackoverflow.com/tags/vim/info) – yolenoyer

ответ

0

Вы можете добавить в свой vimrc:

augroup cpp_setup 
    autocmd! 
    autocmd FileType cpp source cpp.vim 
augroup END 

А затем создать файл cpp.vim, в которым вы положили

" General stuff for all your cpp file 
let b:com = '//' 

inoremap <buffer> <leader>s std:: 
inoremap <buffer> <leader>str std::string 

" specific stuff for your specific dir 
if getcwd() ==# 'diryouwant' 
    "Do what you want here, such has: 
    set wrap 
    call setline('1', "#include <cstdlib>") 
endif 

Вы найдете пояснения относительно этих линий (автокомандного, conditionnal, функция) в этом замечательном учебнике: learnvimscriptthehardway. Длинная пачка, но она того стоит.

Смежные вопросы