Vim авто отступы фигурные скобки неправильно - PullRequest
2 голосов
/ 15 марта 2012

У меня включен интеллектуальный отступ и автоматический отступ, но он все еще работает странно с фигурными скобками (по крайней мере, в JavaScript). Если я наберу:

if(x==y){

тогда я получаю это:

if(x==y){
  }

И я понятия не имею, почему. Мне постоянно приходится возвращаться назад, чтобы получить нормальное значение:

if(x == y){
  //yay!
}

синтаксис. Будет ли вообще возможно, чтобы он также помещал курсор внутри блока if с курсором на первом / в комментарии выше?

Вот мой текущий файл .vimrc.

"Color syntaxing of course
syntax on

"colorscheme molokai

:colors molokai

"Lots of undo history... just in case
set history=700

"Set to auto read when a file is changed from the outside
set autoread

"highlight the current line
set cul

"set color of the highlighted line
hi CursorLine term=none cterm=none ctermbg=234

"auto indent
set autoindent
set smartindent

"Soft tabs FTW
set expandtab
set smarttab                                        

"Size of the (soft) tabs
set shiftwidth=2                                    
set softtabstop=2

"Show line numbers
set number

"Set line number colors to something other than that god awful orange
hi LineNr ctermfg=234 ctermbg=black


"Change the color of the matching brackets
highlight MatchParen cterm=bold ctermfg=black ctermbg=DarkYellow

"Keep at least 5 lines of space above and below and then left and right
set scrolloff=5
set sidescrolloff=5

hi StatusLine cterm=NONE ctermbg=darkgreen ctermfg=white

"Scrolling with your mouse!
set ttymouse=xterm2
set mouse=a

let g:molokai_original = 1

" Find file in current directory and edit it.
function! Find(name)
  let l:list=system("find . -name '".a:name."' | perl -ne 'print \"$.\\t$_\"'")
  let l:num=strlen(substitute(l:list, "[^\n]", "", "g"))
  if l:num < 1
    echo "'".a:name."' not found"
    return
  endif
  if l:num != 1
    echo l:list
    let l:input=input("Which ? (CR=nothing)\n")
    if strlen(l:input)==0
      return
    endif
    if strlen(substitute(l:input, "[0-9]", "", "g"))>0
      echo "Not a number"
      return
    endif
    if l:input<1 || l:input>l:num
      echo "Out of range"
      return
    endif
    let l:line=matchstr("\n".l:list, "\n".l:input."\t[^\n]*")
  else
    let l:line=l:list
  endif
  let l:line=substitute(l:line, "^[^\t]*\t./", "", "")
  execute ":e ".l:line
endfunction
command! -nargs=1 Find :call Find("<args>")

Ответы [ 2 ]

0 голосов
/ 15 марта 2012

Я рекомендую использовать плагин vim javascript indent JavaScript Indent , который дал мне очень хорошие результаты при программировании javascript.

0 голосов
/ 15 марта 2012

Я не думаю, что Vim может сделать это по умолчанию. См. мой ответ на этот похожий вопрос , чтобы найти достаточно хороший обходной путь.

EDIT

Отображение похоже на макрос, который мгновенно воспроизводит нажатия клавиш:

  1. начальная точка в режиме вставка , | - ваш курсор

    if(x == y){|}
    
  2. <CR>

    if(x == y){
    |}
    
  3. <CR>

    if(x == y){
    
    |}
    
  4. <C-o>k (может быть <Esc>k)

    if(x == y){
    |
    }
    
  5. <Tab>

    if(x == y){
      |
    }
    

Это на самом деле очень глупо и должно работать везде, где у вас есть клавиша Ctrl и клавиша Return.

EndEdit

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...