2

文件中的代码段如何_vimrc相互交互?
我当前的文件如下所示,但我想知道filetype plugin indent on在此文件的开头或结尾的行是否重要?像这样的行在文件中重复两次
是否重要? 设置应该接近开始吗? filetype plugin indent on
Pathogen

"------------------------------------------------------------
    " Must have options {{{1


    "this will make the window maximized on startup
    au GUIEnter * simalt ~x

    " Attempt to determine the type of a file based on its name and possibly its
    " contents. Use this to allow intelligent auto-indenting for each filetype,
    " and for plugins that are filetype specific.
    filetype indent plugin on
    set omnifunc=syntaxcomplete#Complete
    " Enable syntax highlighting
    syntax on

    "set highlight search always on
    :set hlsearch

    "------------------------------------------------------------
    " Usability options {{{1

     " Show partial commands in the last line of the screen
    set showcmd
    " Use case insensitive search, except when using capital letters
    set ignorecase
    set smartcase
    " Allow backspacing over autoindent, line breaks and start of insert action
    set backspace=indent,eol,start
    " When opening a new line and no filetype-specific indenting is enabled, keep
    " the same indent as the line you're currently on. Useful for READMEs, etc.
    set autoindent
    " Stop certain movements from always going to the first character of a line.
    " While this behaviour deviates from that of Vi, it does what most users
    " coming from other editors would expect.
    set nostartofline
    " Display the cursor position on the last line of the screen or in the status
    " line of a window
    set ruler
    " Always display the status line, even if only one window is displayed
    set laststatus=2
    " Instead of failing a command because of unsaved changes, instead raise a
    " dialogue asking if you wish to save changed files.
    set confirm
    " Use visual bell instead of beeping when doing something wrong
    set visualbell
    " And reset the terminal code for the visual bell. If visualbell is set, and
    " this line is also included, vim will neither flash nor beep. If visualbell
    " is unset, this does nothing.
    set t_vb=
    " Enable use of the mouse for all modes
    set mouse=a
    " Set the command window height to 2 lines, to avoid many cases of having to
    " "press <Enter> to continue"
    set cmdheight=2
    " Display line numbers on the left
    set number
    " Quickly time out on keycodes, but never time out on mappings
    set notimeout ttimeout ttimeoutlen=200
    " Use <F11> to toggle between 'paste' and 'nopaste'
    set pastetoggle=<F11>

    "------------------------------------------------------------
    " Indentation options {{{1
    "
    " Indentation settings according to personal preference.

    " Indentation settings for using 2 spaces instead of tabs.
    " Do not change 'tabstop' from its default value of 8 with this setup.
    "set shiftwidth=2
    "set softtabstop=2
    "set expandtab

    " Indentation settings for using hard tabs for indent. Display tabs as
    " two characters wide.
    set shiftwidth=2
    set tabstop=2



    "------------------------------------------------------------
    " Look and Feel {{{1
    "
    " Use CTRL-S for saving, also in Insert mode
    :nnoremap <C-S>     :<C-U>update<CR>
    :vnoremap <C-S>     :<C-U>update<CR>gv
    :cnoremap <C-S>     <C-C>:update<CR>
    :inoremap <C-S>     <C-O>:update<CR>

    "color scheme setting
    " Set nice colors
    " background for normal text is light grey
    " Text below the last line is darker grey
    " Cursor is green, Cyan when ":lmap" mappings are active
    " Constants are not underlined but have a slightly lighter background
    set guifont=Consolas:h16:cANSI
    colorscheme pyte 
    "highlight Normal guibg=grey90
    "highlight Cursor guibg=Green guifg=NONE
    "highlight lCursor guibg=Cyan guifg=NONE
    "highlight NonText guibg=grey80
    "highlight Constant gui=NONE guibg=grey95
    "highlight Special gui=NONE guibg=grey95

    "a quick way to locate python files
    nnoremap <Leader>p :pyf P:\Computer Applications\Python\

    "quick quit command
    noremap <Leader>e :quit<CR> "quits the current window


    "------------------------------------------------------------
    " NERTtree settings {{{1
    "
    "get NERDTree command quick
    nnoremap <Leader>nd :NERDTree M:\
    map <F2> :NERDTreeToggle<CR>
    let NERDTreeQuitOnOpen = 1

    " Rebind <Leader> key...not sure about this one
    "let mapleader = ","

    map <Leader>n <esc>:tabprevious<CR>
    map <Leader>m <esc>:tabnext<CR>

    "------------------------------------------------------------
    " dbext settings {{{1
    "
    "let g:sql_type_default = 'SQLSVR'

     " Since I repeatedly need to edit stored procedures, the CREATE PROCEDURE
    " statement is preceeded by an IF ... END IF block which will drop
    " the procedure or it uses the CREATE OR REPLACE syntax.  
    " This function will visually select the IF block to the END; statement
    " of the stored procedure and execute it.  Or check for the 
    " CREATE OR REPLACE and stop there and look to the end.
    function! SQLExecuteIfCreateReplace()
        let l:old_sel = &sel
        let &sel = 'inclusive'
        let saveWrapScan=&wrapscan
        let saveSearch=@/ 
        let l:reg_z = @z
        let &wrapscan=0
        let @z = ''
        let found = 0
        let startLine = 0
        let endLine = 0
        let curLine = line(".")
        let curCol  = virtcol(".")

        " Must default the command terminator
        let l:dbext_cmd_terminator = ";"

        try
                " Search backwards and do NOT wrap
                " Find the line beginning with an IF clause
                "     IF EXISTS( SELECT 1 ...
                " or find an or replace clause
                "     CREATE OR REPLACE PROCEDURE ...
                " And execute it until we find an 
                "     END 
                " at the beginning of a line.
            let startLine = search('\c\(^\<if\>\|^\<alter\s\+procedure\>\|\<or\s\+replace\>\)', 'bcnW' )

                if startLine > 0
                    " Search forward and visually select all lines
                    " until we find an END; clause
                    let endLine = search('^END'.l:dbext_cmd_terminator.'\s*$', 'cnW')
                    exec startLine.','.endLine.'DBExecRangeSQL'
                endif
            finally
                call cursor(curLine, curCol)
                noh
                let l:query = @z
                let @z = l:reg_z
                let @/=saveSearch
                let &wrapscan=saveWrapScan
                let &sel = l:old_sel
            endtry
        endfunction


    "------------------------------------------------------------
    " pathogen settings {{{1

    "pathogen customization
    "set nocp

    " Use pathogen to easily modify the runtime path to include all plugins under
    " the ~/.vim/bundle directory
    filetype off                    " force reloading *after* pathogen loaded
    call pathogen#infect()
    call pathogen#helptags()
    call pathogen#runtime_append_all_bundles()
    syntax on

    filetype plugin indent on       " enable detection, plugins and indenting in one step
4

2 回答 2

4

顺序确实很重要。

例如,您有两行:

选项:

set nu
set nonu

后者将覆盖以前的设置。

对于函数,如果您在文件末尾声明了一个函数,但在第一行调用了它。当你第一次加载你的 vimrc 时,你会得到错误Unknown function: function name

此外,如果您在加载配色方案(如果您使用了一个)之前手动设置了一些hi group,那么配色方案也会覆盖您的设置。

如果您在加载插件之前调用插件中定义的某些命令/函数,您也会收到错误消息。

所以,如果你在 vimrc 中有多次命令/设置是可以的,但最后一个会生效。

于 2013-05-19T17:11:43.020 回答
2

tl; dr:有些会,有些不会;使用从简单到复杂的逻辑结构。

Pathogen 希望它的设置出现在顶部,因为它修改了其他脚本的加载方式(显式地通过,或者作为调用自动加载函数:runtime的副作用)。

的顺序:set通常无关紧要(除非您有冲突的设置),并且您定义的任何映射或自动命令仅在启动后才会激活,因此您可以将它们放在任何地方。

一般来说,我会推荐一种逻辑结构,从 Pathogen、设置、插件配置等基本内容开始,然后是自定义映射和更多涉及的调整,如 autocmds。

另外,我会避免将特定于文件类型的东西放入~/.vimrc; 而是将它们放入相应的~/.vim/after/ftplugin/<filetype>.vim脚本中并使用filetype plugin on.

于 2013-05-19T18:58:42.027 回答