Co jest w twoim .vimrc? [Zamknięte]


157

Vi i Vim pozwalają na naprawdę niesamowite dostosowanie, zazwyczaj przechowywane w .vimrcpliku. Typowe funkcje dla programisty to podświetlanie składni, inteligentne wcięcia i tak dalej.

Jakie masz inne sztuczki do produktywnego programowania, ukryte w twoim .vimrc?

Najbardziej interesują mnie refaktoryzacje, klasy automatyczne i podobne makra produktywności, szczególnie dla C #.


11
Myślę, że powinieneś był poprosić ludzi o opublikowanie skomentowanych plików konfiguracyjnych vima.
innaM

Dlaczego nie udostępnić tego na githubie? Mam cały folder .vim pod git i wszystko można zobaczyć tutaj: github.com/lsdr/vim-folder
lsdr

1
Nie sądzę, aby całe pliki .vimrcs były przydatne; jeśli grupa ludzi zagłosuje za odpowiedzią, czy po prostu weźmiesz całą sprawę i wrzucisz ją do swojego systemu? Fragmenty są znacznie bardziej przydatne, podobnie jak lista przydatnych aliasów lub funkcji jest znacznie lepsza niż całe pliki rc. (Bash | z).
Xiong Chiamiov

Odpowiedzi:


104

Ty zapytałaś o to :-)

"{{{Auto Commands

" Automatically cd into the directory that the file is in
autocmd BufEnter * execute "chdir ".escape(expand("%:p:h"), ' ')

" Remove any trailing whitespace that is in the file
autocmd BufRead,BufWrite * if ! &bin | silent! %s/\s\+$//ge | endif

" Restore cursor position to where it was before
augroup JumpCursorOnEdit
   au!
   autocmd BufReadPost *
            \ if expand("<afile>:p:h") !=? $TEMP |
            \   if line("'\"") > 1 && line("'\"") <= line("$") |
            \     let JumpCursorOnEdit_foo = line("'\"") |
            \     let b:doopenfold = 1 |
            \     if (foldlevel(JumpCursorOnEdit_foo) > foldlevel(JumpCursorOnEdit_foo - 1)) |
            \        let JumpCursorOnEdit_foo = JumpCursorOnEdit_foo - 1 |
            \        let b:doopenfold = 2 |
            \     endif |
            \     exe JumpCursorOnEdit_foo |
            \   endif |
            \ endif
   " Need to postpone using "zv" until after reading the modelines.
   autocmd BufWinEnter *
            \ if exists("b:doopenfold") |
            \   exe "normal zv" |
            \   if(b:doopenfold > 1) |
            \       exe  "+".1 |
            \   endif |
            \   unlet b:doopenfold |
            \ endif
augroup END

"}}}

"{{{Misc Settings

" Necesary  for lots of cool vim things
set nocompatible

" This shows what you are typing as a command.  I love this!
set showcmd

" Folding Stuffs
set foldmethod=marker

" Needed for Syntax Highlighting and stuff
filetype on
filetype plugin on
syntax enable
set grepprg=grep\ -nH\ $*

" Who doesn't like autoindent?
set autoindent

" Spaces are better than a tab character
set expandtab
set smarttab

" Who wants an 8 character tab?  Not me!
set shiftwidth=3
set softtabstop=3

" Use english for spellchecking, but don't spellcheck by default
if version >= 700
   set spl=en spell
   set nospell
endif

" Real men use gcc
"compiler gcc

" Cool tab completion stuff
set wildmenu
set wildmode=list:longest,full

" Enable mouse support in console
set mouse=a

" Got backspace?
set backspace=2

" Line Numbers PWN!
set number

" Ignoring case is a fun trick
set ignorecase

" And so is Artificial Intellegence!
set smartcase

" This is totally awesome - remap jj to escape in insert mode.  You'll never type jj anyway, so it's great!
inoremap jj <Esc>

nnoremap JJJJ <Nop>

" Incremental searching is sexy
set incsearch

" Highlight things that we find with the search
set hlsearch

" Since I use linux, I want this
let g:clipbrdDefaultReg = '+'

" When I close a tab, remove the buffer
set nohidden

" Set off the other paren
highlight MatchParen ctermbg=4
" }}}

"{{{Look and Feel

" Favorite Color Scheme
if has("gui_running")
   colorscheme inkpot
   " Remove Toolbar
   set guioptions-=T
   "Terminus is AWESOME
   set guifont=Terminus\ 9
else
   colorscheme metacosm
endif

"Status line gnarliness
set laststatus=2
set statusline=%F%m%r%h%w\ (%{&ff}){%Y}\ [%l,%v][%p%%]

" }}}

"{{{ Functions

"{{{ Open URL in browser

function! Browser ()
   let line = getline (".")
   let line = matchstr (line, "http[^   ]*")
   exec "!konqueror ".line
endfunction

"}}}

"{{{Theme Rotating
let themeindex=0
function! RotateColorTheme()
   let y = -1
   while y == -1
      let colorstring = "inkpot#ron#blue#elflord#evening#koehler#murphy#pablo#desert#torte#"
      let x = match( colorstring, "#", g:themeindex )
      let y = match( colorstring, "#", x + 1 )
      let g:themeindex = x + 1
      if y == -1
         let g:themeindex = 0
      else
         let themestring = strpart(colorstring, x + 1, y - x - 1)
         return ":colorscheme ".themestring
      endif
   endwhile
endfunction
" }}}

"{{{ Paste Toggle
let paste_mode = 0 " 0 = normal, 1 = paste

func! Paste_on_off()
   if g:paste_mode == 0
      set paste
      let g:paste_mode = 1
   else
      set nopaste
      let g:paste_mode = 0
   endif
   return
endfunc
"}}}

"{{{ Todo List Mode

function! TodoListMode()
   e ~/.todo.otl
   Calendar
   wincmd l
   set foldlevel=1
   tabnew ~/.notes.txt
   tabfirst
   " or 'norm! zMzr'
endfunction

"}}}

"}}}

"{{{ Mappings

" Open Url on this line with the browser \w
map <Leader>w :call Browser ()<CR>

" Open the Project Plugin <F2>
nnoremap <silent> <F2> :Project<CR>

" Open the Project Plugin
nnoremap <silent> <Leader>pal  :Project .vimproject<CR>

" TODO Mode
nnoremap <silent> <Leader>todo :execute TodoListMode()<CR>

" Open the TagList Plugin <F3>
nnoremap <silent> <F3> :Tlist<CR>

" Next Tab
nnoremap <silent> <C-Right> :tabnext<CR>

" Previous Tab
nnoremap <silent> <C-Left> :tabprevious<CR>

" New Tab
nnoremap <silent> <C-t> :tabnew<CR>

" Rotate Color Scheme <F8>
nnoremap <silent> <F8> :execute RotateColorTheme()<CR>

" DOS is for fools.
nnoremap <silent> <F9> :%s/$//g<CR>:%s// /g<CR>

" Paste Mode!  Dang! <F10>
nnoremap <silent> <F10> :call Paste_on_off()<CR>
set pastetoggle=<F10>

" Edit vimrc \ev
nnoremap <silent> <Leader>ev :tabnew<CR>:e ~/.vimrc<CR>

" Edit gvimrc \gv
nnoremap <silent> <Leader>gv :tabnew<CR>:e ~/.gvimrc<CR>

" Up and down are more logical with g..
nnoremap <silent> k gk
nnoremap <silent> j gj
inoremap <silent> <Up> <Esc>gka
inoremap <silent> <Down> <Esc>gja

" Good call Benjie (r for i)
nnoremap <silent> <Home> i <Esc>r
nnoremap <silent> <End> a <Esc>r

" Create Blank Newlines and stay in Normal mode
nnoremap <silent> zj o<Esc>
nnoremap <silent> zk O<Esc>

" Space will toggle folds!
nnoremap <space> za

" Search mappings: These will make it so that going to the next one in a
" search will center on the line it's found in.
map N Nzz
map n nzz

" Testing
set completeopt=longest,menuone,preview

inoremap <expr> <cr> pumvisible() ? "\<c-y>" : "\<c-g>u\<cr>"
inoremap <expr> <c-n> pumvisible() ? "\<lt>c-n>" : "\<lt>c-n>\<lt>c-r>=pumvisible() ? \"\\<lt>down>\" : \"\"\<lt>cr>"
inoremap <expr> <m-;> pumvisible() ? "\<lt>c-n>" : "\<lt>c-x>\<lt>c-o>\<lt>c-n>\<lt>c-p>\<lt>c-r>=pumvisible() ? \"\\<lt>down>\" : \"\"\<lt>cr>"

" Swap ; and :  Convenient.
nnoremap ; :
nnoremap : ;

" Fix email paragraphs
nnoremap <leader>par :%s/^>$//<CR>

"ly$O#{{{ "lpjjj_%A#}}}jjzajj

"}}}

"{{{Taglist configuration
let Tlist_Use_Right_Window = 1
let Tlist_Enable_Fold_Column = 0
let Tlist_Exit_OnlyWindow = 1
let Tlist_Use_SingleClick = 1
let Tlist_Inc_Winwidth = 0
"}}}

let g:rct_completion_use_fri = 1
"let g:Tex_DefaultTargetFormat = "pdf"
let g:Tex_ViewRule_pdf = "kpdf"

filetype plugin indent on
syntax on

78
Ale dlaczego 3, ustaw shiftwidth = 3, ustaw softtabstop = 3 ... może 2 lub 4, ale dlaczego 3?
Johan

1
Tylko się zastanawiasz, ale czy mapowanie jj do <Esc> nie spowoduje lekkiego opóźnienia po naciśnięciu j w trybie wstawiania?
sykora

1
@sykora: tak, ale jak tylko wpiszesz kolejny znak (to nie jest j), pojawi się. Robię to samo, ale zamiast tego z jk, ponieważ myślę, że uderzenie jk jest szybsze niż uderzenie jj. Tylko raz, kiedy to wpłynęło na mnie, wpisuję alfabet, więc może kj, będziesz lepszy.
David Miani

2
@Johan: ponieważ „trójka to magiczna liczba”. :) Właściwie to tylko wyprawa rowerowa, ale ja też wolę trzy. :)
Robert Massaioli

4
Jeśli prawdziwi mężczyźni używają gcc, dlaczego nie? (kompilator gcc jest wykomentowany!)
Abdulsattar Mohammed

73

Nie ma tego w moim pliku .vimrc, ale wczoraj dowiedziałem się o ]ppoleceniu. Powoduje to wklejenie zawartości bufora tak samo jak probi, ale automatycznie dostosowuje wcięcie, aby pasowało do linii, na której znajduje się kursor! Jest to doskonałe do przenoszenia kodu.


Masz na myśli to, że jest podobne do: set paste, p,: set nopaste?
hyperboreean

3
O ile wiem, opcja: set paste nie ma żadnego wpływu na polecenie p, wpływa tylko na tekst wpisywany (lub wklejany przez terminal) w trybie wstawiania. Więc nie, to inna funkcja.
Greg Hewgill

1
Nie powinienem za to głosować, bo nie odpowiada na pytanie, ale bardzo mi się podoba;)
gorsky

53

Używam następujących elementów, aby przechowywać wszystkie pliki tymczasowe i zapasowe w jednym miejscu:

set backup
set backupdir=~/.vim/backup
set directory=~/.vim/tmp

Oszczędza bałagan w katalogach roboczych w każdym miejscu.

Będziesz musiał najpierw stworzyć te katalogi, vim nie stworzy ich za Ciebie.


2
Powinienem wspomnieć, że będziesz musiał sam stworzyć te katalogi, vim nie zrobi tego za Ciebie.
Harley Holcombe

Czy to poprawnie obsługuje wiele identycznych plików? (np. jeśli edytujesz kilka różnych gałęzi tego samego kodu)
yungchin,

Nie, spowoduje to zastąpienie starych plików kopii zapasowych o tej samej nazwie. Jeśli ktoś może to obejść, daj mi znać.
Harley Holcombe

3
Spróbuj tego: au BufWritePre * let & bex = '-'. strftime („% Y% m% d-% H% M% S”). „.vimbackup” (to jedna linijka). Muszę też o tym wspomnieć: vim.wikia.com/wiki/VimTip962
Zsolt

1
Dzięki temu Vim nie narzeka podczas otwierania plików zsynchronizowanych z Dropbox na wielu komputerach.
Cody Hess

31

Ktoś (tj. Pracownik), który opublikował powyżej, miał następującą linię:

„Automatycznie przejdź do katalogu, w którym znajduje się plik:”

autocmd BufEnter * execute "chdir ".escape(expand("%:p:h"), ' ')

Robiłem coś takiego, dopóki nie odkryłem, że to samo można osiągnąć za pomocą wbudowanych ustawień:

set autochdir

Myślę, że coś podobnego przytrafiło mi się kilka razy. Vim ma tak wiele różnych wbudowanych ustawień i opcji, że czasami jest to szybsze i łatwiejsze do zrobienia samodzielnie niż przeszukiwanie dokumentów w celu uzyskania wbudowanego sposobu.


świetne znalezisko! bardziej lubię używać wbudowanych rzeczy ^ _ ^. plus to nie zawodzi, jeśli istnieje | w nazwie pliku.
Javed Ahamed

2
autochdir ma pewne irytacje, których nigdy nie mógłbym obejść (zmiana katalogu przed załadowaniem pliku podanego w linii poleceń), i czytałem gdzie indziej tutaj na SO, o autocmd BufEnter * silent! lcd %:p:h:gs/ /\\ /którym robi to samo, ale nie uszkadza wiersza poleceń.
dash-tom-bang

Wolę
ustawić

28

Mój najnowszy dodatek służy do podświetlenia aktualnej linii

set cul                                           # highlight current line
hi CursorLine term=none cterm=none ctermbg=3      # adjust color

2
czy jest sposób, aby wybrać więcej kolorów?
Fzs2

Jaka jest różnica między set cul i set cursorline?
putolaruan

Po prostu używam „set cul”, aby uzyskać linię pod moim bieżącym wierszem. Ustawienie linii kursora za bardzo psuje podświetlanie składni, jak na mój gust.
Claes Mogren

2
Skorzystaj z tego skryptu ( vim.org/scripts/script.php?script_id=1349 ), aby uzyskać dostępne kolory. Może być konieczne włączenie obsługi 256 kolorów dla vim, aby uzyskać szerszą gamę.
Brian Wigginton,

1
@Claes Właściwie set culi set cursorlinezrobić dokładnie to samo.
Gerardo Marset

24

Aktualizacja 2012 : Naprawdę polecam teraz wypróbowanie vim-powerline, który zastąpił mój stary skrypt linii statusu, chociaż obecnie brakuje mi kilku funkcji, których brakuje.


Powiedziałbym, że rzeczy dotyczące linii statusu w moim vimrc były prawdopodobnie najbardziej interesujące / przydatne z całej masy (zgrane z vimrc autorów tutaj i odpowiadający im post na blogu tutaj ).

Zrzut ekranu:

linia stanu http://img34.imageshack.us/img34/849/statusline.png

Kod:

"recalculate the trailing whitespace warning when idle, and after saving
autocmd cursorhold,bufwritepost * unlet! b:statusline_trailing_space_warning

"return '[\s]' if trailing white space is detected
"return '' otherwise
function! StatuslineTrailingSpaceWarning()
    if !exists("b:statusline_trailing_space_warning")

        if !&modifiable
            let b:statusline_trailing_space_warning = ''
            return b:statusline_trailing_space_warning
        endif

        if search('\s\+$', 'nw') != 0
            let b:statusline_trailing_space_warning = '[\s]'
        else
            let b:statusline_trailing_space_warning = ''
        endif
    endif
    return b:statusline_trailing_space_warning
endfunction


"return the syntax highlight group under the cursor ''
function! StatuslineCurrentHighlight()
    let name = synIDattr(synID(line('.'),col('.'),1),'name')
    if name == ''
        return ''
    else
        return '[' . name . ']'
    endif
endfunction

"recalculate the tab warning flag when idle and after writing
autocmd cursorhold,bufwritepost * unlet! b:statusline_tab_warning

"return '[&et]' if &et is set wrong
"return '[mixed-indenting]' if spaces and tabs are used to indent
"return an empty string if everything is fine
function! StatuslineTabWarning()
    if !exists("b:statusline_tab_warning")
        let b:statusline_tab_warning = ''

        if !&modifiable
            return b:statusline_tab_warning
        endif

        let tabs = search('^\t', 'nw') != 0

        "find spaces that arent used as alignment in the first indent column
        let spaces = search('^ \{' . &ts . ',}[^\t]', 'nw') != 0

        if tabs && spaces
            let b:statusline_tab_warning = '[mixed-indenting]'
        elseif (spaces && !&et) || (tabs && &et)
            let b:statusline_tab_warning = '[&et]'
        endif
    endif
    return b:statusline_tab_warning
endfunction

"recalculate the long line warning when idle and after saving
autocmd cursorhold,bufwritepost * unlet! b:statusline_long_line_warning

"return a warning for "long lines" where "long" is either &textwidth or 80 (if
"no &textwidth is set)
"
"return '' if no long lines
"return '[#x,my,$z] if long lines are found, were x is the number of long
"lines, y is the median length of the long lines and z is the length of the
"longest line
function! StatuslineLongLineWarning()
    if !exists("b:statusline_long_line_warning")

        if !&modifiable
            let b:statusline_long_line_warning = ''
            return b:statusline_long_line_warning
        endif

        let long_line_lens = s:LongLines()

        if len(long_line_lens) > 0
            let b:statusline_long_line_warning = "[" .
                        \ '#' . len(long_line_lens) . "," .
                        \ 'm' . s:Median(long_line_lens) . "," .
                        \ '$' . max(long_line_lens) . "]"
        else
            let b:statusline_long_line_warning = ""
        endif
    endif
    return b:statusline_long_line_warning
endfunction

"return a list containing the lengths of the long lines in this buffer
function! s:LongLines()
    let threshold = (&tw ? &tw : 80)
    let spaces = repeat(" ", &ts)

    let long_line_lens = []

    let i = 1
    while i <= line("$")
        let len = strlen(substitute(getline(i), '\t', spaces, 'g'))
        if len > threshold
            call add(long_line_lens, len)
        endif
        let i += 1
    endwhile

    return long_line_lens
endfunction

"find the median of the given array of numbers
function! s:Median(nums)
    let nums = sort(a:nums)
    let l = len(nums)

    if l % 2 == 1
        let i = (l-1) / 2
        return nums[i]
    else
        return (nums[l/2] + nums[(l/2)-1]) / 2
    endif
endfunction


"statusline setup
set statusline=%f "tail of the filename

"display a warning if fileformat isnt unix
set statusline+=%#warningmsg#
set statusline+=%{&ff!='unix'?'['.&ff.']':''}
set statusline+=%*

"display a warning if file encoding isnt utf-8
set statusline+=%#warningmsg#
set statusline+=%{(&fenc!='utf-8'&&&fenc!='')?'['.&fenc.']':''}
set statusline+=%*

set statusline+=%h "help file flag
set statusline+=%y "filetype
set statusline+=%r "read only flag
set statusline+=%m "modified flag

"display a warning if &et is wrong, or we have mixed-indenting
set statusline+=%#error#
set statusline+=%{StatuslineTabWarning()}
set statusline+=%*

set statusline+=%{StatuslineTrailingSpaceWarning()}

set statusline+=%{StatuslineLongLineWarning()}

set statusline+=%#warningmsg#
set statusline+=%{SyntasticStatuslineFlag()}
set statusline+=%*

"display a warning if &paste is set
set statusline+=%#error#
set statusline+=%{&paste?'[paste]':''}
set statusline+=%*

set statusline+=%= "left/right separator

function! SlSpace()
    if exists("*GetSpaceMovement")
        return "[" . GetSpaceMovement() . "]"
    else
        return ""
    endif
endfunc
set statusline+=%{SlSpace()}

set statusline+=%{StatuslineCurrentHighlight()}\ \ "current highlight
set statusline+=%c, "cursor column
set statusline+=%l/%L "cursor line/total lines
set statusline+=\ %P "percent through file
set laststatus=2

Między innymi informuje w linii stanu o zwykłych standardowych informacjach o pliku, ale zawiera również dodatkowe rzeczy, takie jak ostrzeżenia dla: ustaw wklejania, mieszane wcięcia, końcowe białe znaki itp. Całkiem przydatne, jeśli jesteś szczególnie zainteresowany formatowaniem kodu.

Ponadto, jak pokazano na zrzucie ekranu, połączenie go ze składnią pozwala na wyróżnienie wszelkich błędów składniowych (zakładając, że wybrany język ma dołączony moduł sprawdzania składni.


Mam problem z powyższym. W LongLines () brakuje warunku. Zmieniłem to na „podczas gdy i <próg”, jednak brakuje również len, który jest wywoływany w tym stanie. Jakieś pomysły na temat len?
Ali

W porządku, znalazłem tutaj prawdziwą rzecz: dotfiles.org/~gregf/.vimrc
Ali

@pug Wystąpił wewnętrzny błąd serwera. = (Można dać podpowiedź lub wkleić odpowiedni fragment .vimrc gdzieś, proszę?
Anton Strogonow

@Anton naprawił wklejanie, które zostało zepsute przez formatowanie kodu. Teraz powinno być dobrze. Zalecałbym również umieszczenie go w pliku plugin / statusline.vim, aby nie zaśmiecał twojego .vimrc, jeśli zamierzasz go używać.
Gavin Gilmour

@Gavin Działa doskonale, dziękujemy za poprawkę i wskazówkę! Kiedyś miałem coś takiego jak autocmd BufEnter *.py match OverLength /\%81v.\+/.vimrc do podświetlania długich linii, ale twoje podejście może być mniej rozpraszające. Ponadto wynik sprawdzania składni na pasku stanu to naprawdę fajna rzecz!
Anton Strogonoff

19

Moja mini wersja:

syntax on
set background=dark
set shiftwidth=2
set tabstop=2

if has("autocmd")
  filetype plugin indent on
endif

set showcmd             " Show (partial) command in status line.
set showmatch           " Show matching brackets.
set ignorecase          " Do case insensitive matching
set smartcase           " Do smart case matching
set incsearch           " Incremental search
set hidden              " Hide buffers when they are abandoned

Wersja duża, zebrana z różnych miejsc:

syntax on
set background=dark
set ruler                     " show the line number on the bar
set more                      " use more prompt
set autoread                  " watch for file changes
set number                    " line numbers
set hidden
set noautowrite               " don't automagically write on :next
set lazyredraw                " don't redraw when don't have to
set showmode
set showcmd
set nocompatible              " vim, not vi
set autoindent smartindent    " auto/smart indent
set smarttab                  " tab and backspace are smart
set tabstop=2                 " 6 spaces
set shiftwidth=2
set scrolloff=5               " keep at least 5 lines above/below
set sidescrolloff=5           " keep at least 5 lines left/right
set history=200
set backspace=indent,eol,start
set linebreak
set cmdheight=2               " command line two lines high
set undolevels=1000           " 1000 undos
set updatecount=100           " switch every 100 chars
set complete=.,w,b,u,U,t,i,d  " do lots of scanning on tab completion
set ttyfast                   " we have a fast terminal
set noerrorbells              " No error bells please
set shell=bash
set fileformats=unix
set ff=unix
filetype on                   " Enable filetype detection
filetype indent on            " Enable filetype-specific indenting
filetype plugin on            " Enable filetype-specific plugins
set wildmode=longest:full
set wildmenu                  " menu has tab completion
let maplocalleader=','        " all my macros start with ,
set laststatus=2

"  searching
set incsearch                 " incremental search
set ignorecase                " search ignoring case
set hlsearch                  " highlight the search
set showmatch                 " show matching bracket
set diffopt=filler,iwhite     " ignore all whitespace and sync

"  backup
set backup
set backupdir=~/.vim_backup
set viminfo=%100,'100,/100,h,\"500,:100,n~/.viminfo
"set viminfo='100,f1

" spelling
if v:version >= 700
  " Enable spell check for text files
  autocmd BufNewFile,BufRead *.txt setlocal spell spelllang=en
endif

" mappings
" toggle list mode
nmap <LocalLeader>tl :set list!<cr>
" toggle paste mode
nmap <LocalLeader>pp :set paste!<cr>

fyi, 'smartindent' jest przestarzałe (cindent je zastępuje) i nie robi nic, gdy używasz wcięć typu pliku i będzie aktywne tylko wtedy, gdy nie jest użyteczne
szare.

13

Czasami najprostsze rzeczy są najcenniejsze. Dwie linie w moim .vimrc, które są całkowicie niezbędne:

nore; :
nore,;

Zrobiłem nore \ ;zamiast tego, ponieważ używam ,jako mojego<leader>
aehlke

3
Ale co to robi? :)
Henrik Bjørnskov

6
średnik to rzadko używane polecenie. dwukropek jest niezwykle popularnym poleceniem używanym do przechodzenia do trybu wiersza poleceń. Zmiana odwzorowania jednego na drugiego umożliwia przejście do trybu wiersza poleceń bez naciskania klawisza Shift, oszczędzając w ten sposób mięśnie małych palców.
William Pursell,

7
Na francuskich klawiaturach nie potrzebujesz klawisza „shift”, aby pisać „,”, „;” i ':' ... Ale '\', '[' i ']' to prawdziwy ból.
Olivier Pons

12

Różne ustawienia:

  1. Wyłącz irytujące dzwonki błędów:

    set noerrorbells
    set visualbell
    set t_vb=
    
  2. Spraw, aby kursor poruszał się zgodnie z oczekiwaniami z zawijanymi liniami:

    inoremap <Down> <C-o>gj
    inoremap <Up> <C-o>gk
    
  3. Lookup ctags„tags” plik się w katalogu, dopóki jedna znajduje się:

    set tags=tags;/
    
  4. Wyświetl pliki SCons ze składnią Pythona:

    autocmd BufReadPre,BufNewFile SConstruct set filetype=python
    autocmd BufReadPre,BufNewFile SConscript set filetype=python
    

Dodaj #! / Usr / bin / python do pliku SConstruct, uruchomi to magię wykrywania typów plików wbudowaną w Vima
Richq

Czy jest lepszy sposób na wykonanie j/ kprzeniesienie zgodnie z oczekiwaniami z zawiniętymi liniami? Nie chcę naciskać za gkażdym razem.
puk

8

Nie jestem najbardziej zaawansowanym vimerem na świecie, ale oto kilka, które wybrałem

function! Mosh_Tab_Or_Complete()
    if col('.')>1 && strpart( getline('.'), col('.')-2, 3 ) =~ '^\w'
        return "\<C-N>"
    else
        return "\<Tab>"
endfunction

inoremap <Tab> <C-R>=Mosh_Tab_Or_Complete()<CR>

Sprawia, że ​​autouzupełnianie tabulatorów określa, czy chcesz umieścić tam słowo, czy faktyczną tabulator (4 spacje).

map cc :.,$s/^ *//<CR>

Usuń wszystkie otwierające się spacje od tego miejsca do końca pliku. Z jakiegoś powodu uważam to za bardzo przydatne.

set nu! 
set nobackup

Pokaż numery linii i nie twórz tych irytujących plików kopii zapasowych. I tak nigdy nie przywróciłem niczego ze starej kopii zapasowej.

imap ii <C-[>

Podczas wstawiania naciśnij dwukrotnie i, aby przejść do trybu poleceń. Nigdy nie natknąłem się na słowo lub zmienną z 2 i z rzędu, dzięki czemu nie muszę opuszczać palca głównego wiersza ani naciskać wielu klawiszy, aby przełączać się między nimi.


3
Ciekawe mapowanie ii ... bardzo ciekawe. To całkiem fajny pomysł - chociaż martwiłbym się, że poważnie wpłynie to na moją zdolność do używania „waniliowego” vima, jeśli będę musiał.
thomasrutter

Robiłem to samo z ;; przez długi czas i nie napotkaliśmy żadnych problemów. Kiedy jestem zmuszony do użycia vanilla vi / vim, od razu pamiętam o użyciu głupiego klawisza [esc] (co było jednym z powodów, dla których nienawidziłem vima przez tyle lat!). Dla mnie to ustawienie jest absolutnie niezbędne. Bez niego nigdy chętnie nie użyłbym vi (m). <br> I podoba mi się pomysł użycia „ii” zamiast „;;”: bardziej intuicyjny, prawie jak przełącznik.
ikonoklast

Inną możliwością jest użycie Ctrl-C, aby wyjść z trybu wstawiania. Działa prawie tak samo jak Escape (jedyna różnica, która mnie niepokoi, to operowanie na liniach bloku wizualnego).
a3nm

8

Mój mocno komentowany vimrc, ze skrótami klawiszowymi readline-esque (emacs):

if version >= 700

"------ Meta ------"

" clear all autocommands! (this comment must be on its own line)
autocmd!

set nocompatible                " break away from old vi compatibility
set fileformats=unix,dos,mac    " support all three newline formats
set viminfo=                    " don't use or save viminfo files

"------ Console UI & Text display ------"

set cmdheight=1                 " explicitly set the height of the command line
set showcmd                     " Show (partial) command in status line.
set number                      " yay line numbers
set ruler                       " show current position at bottom
set noerrorbells                " don't whine
set visualbell t_vb=            " and don't make faces
set lazyredraw                  " don't redraw while in macros
set scrolloff=5                 " keep at least 5 lines around the cursor
set wrap                        " soft wrap long lines
set list                        " show invisible characters
set listchars=tab:>·,trail:·    " but only show tabs and trailing whitespace
set report=0                    " report back on all changes
set shortmess=atI               " shorten messages and don't show intro
set wildmenu                    " turn on wild menu :e <Tab>
set wildmode=list:longest       " set wildmenu to list choice
if has('syntax')
    syntax on
    " Remember that rxvt-unicode has 88 colors by default; enable this only if
    " you are using the 256-color patch
    if &term == 'rxvt-unicode'
        set t_Co=256
    endif

    if &t_Co == 256
        colorscheme xoria256
    else
        colorscheme peachpuff
    endif
endif

"------ Text editing and searching behavior ------"

set nohlsearch                  " turn off highlighting for searched expressions
set incsearch                   " highlight as we search however
set matchtime=5                 " blink matching chars for .x seconds
set mouse=a                     " try to use a mouse in the console (wimp!)
set ignorecase                  " set case insensitivity
set smartcase                   " unless there's a capital letter
set completeopt=menu,longest,preview " more autocomplete <Ctrl>-P options
set nostartofline               " leave my cursor position alone!
set backspace=2                 " equiv to :set backspace=indent,eol,start
set textwidth=80                " we like 80 columns
set showmatch                   " show matching brackets
set formatoptions=tcrql         " t - autowrap to textwidth
                                " c - autowrap comments to textwidth
                                " r - autoinsert comment leader with <Enter>
                                " q - allow formatting of comments with :gq
                                " l - don't format already long lines

"------ Indents and tabs ------"

set autoindent                  " set the cursor at same indent as line above
set smartindent                 " try to be smart about indenting (C-style)
set expandtab                   " expand <Tab>s with spaces; death to tabs!
set shiftwidth=4                " spaces for each step of (auto)indent
set softtabstop=4               " set virtual tab stop (compat for 8-wide tabs)
set tabstop=8                   " for proper display of files with tabs
set shiftround                  " always round indents to multiple of shiftwidth
set copyindent                  " use existing indents for new indents
set preserveindent              " save as much indent structure as possible
filetype plugin indent on       " load filetype plugins and indent settings

"------ Key bindings ------"

" Remap broken meta-keys that send ^[
for n in range(97,122) " ASCII a-z
    let c = nr2char(n)
    exec "set <M-". c .">=\e". c
    exec "map  \e". c ." <M-". c .">"
    exec "map! \e". c ." <M-". c .">"
endfor

""" Emacs keybindings
" first move the window command because we'll be taking it over
noremap <C-x> <C-w>
" Movement left/right
noremap! <C-b> <Left>
noremap! <C-f> <Right>
" word left/right
noremap  <M-b> b
noremap! <M-b> <C-o>b
noremap  <M-f> w
noremap! <M-f> <C-o>w
" line start/end
noremap  <C-a> ^
noremap! <C-a> <Esc>I
noremap  <C-e> $
noremap! <C-e> <Esc>A
" Rubout word / line and enter insert mode
noremap  <C-w> i<C-w>
noremap  <C-u> i<C-u>
" Forward delete char / word / line and enter insert mode
noremap! <C-d> <C-o>x
noremap  <M-d> dw
noremap! <M-d> <C-o>dw
noremap  <C-k> Da
noremap! <C-k> <C-o>D
" Undo / Redo and enter normal mode
noremap  <C-_> u
noremap! <C-_> <C-o>u<Esc><Right>
noremap! <C-r> <C-o><C-r><Esc>

" Remap <C-space> to word completion
noremap! <Nul> <C-n>

" OS X paste (pretty poor implementation)
if has('mac')
    noremap  √ :r!pbpaste<CR>
    noremap! √ <Esc>√
endif

""" screen.vim REPL: http://github.com/ervandew/vimfiles
" send paragraph to parallel process
vmap <C-c><C-c> :ScreenSend<CR>
nmap <C-c><C-c> mCvip<C-c><C-c>`C
imap <C-c><C-c> <Esc><C-c><C-c><Right>
" set shell region height
let g:ScreenShellHeight = 12


"------ Filetypes ------"

" Vimscript
autocmd FileType vim setlocal expandtab shiftwidth=4 tabstop=8 softtabstop=4

" Shell
autocmd FileType sh setlocal expandtab shiftwidth=4 tabstop=8 softtabstop=4

" Lisp
autocmd Filetype lisp,scheme setlocal equalprg=~/.vim/bin/lispindent.lisp expandtab shiftwidth=2 tabstop=8 softtabstop=2

" Ruby
autocmd FileType ruby setlocal expandtab shiftwidth=2 tabstop=2 softtabstop=2

" PHP
autocmd FileType php setlocal expandtab shiftwidth=4 tabstop=4 softtabstop=4

" X?HTML & XML
autocmd FileType html,xhtml,xml setlocal expandtab shiftwidth=2 tabstop=2 softtabstop=2

" CSS
autocmd FileType css setlocal expandtab shiftwidth=4 tabstop=4 softtabstop=4

" JavaScript
" autocmd BufRead,BufNewFile *.json setfiletype javascript
autocmd FileType javascript setlocal expandtab shiftwidth=2 tabstop=2 softtabstop=2
let javascript_enable_domhtmlcss=1

"------ END VIM-500 ------"

endif " version >= 500

fyi, 'smartindent' jest przestarzałe (cindent go zastępuje) i nie robi nic, gdy używasz wcięć typu pliku i będzie aktywne tylko wtedy, gdy nie jest użyteczne
szare.

7
syntax on
set cindent
set ts=4
set sw=4
set backspace=2
set laststatus=2
set nohlsearch
set modeline
set modelines=3
set ai
map Q gq

set vb t_vb=

set nowrap
set ss=5
set is
set scs
set ru

map <F2> <Esc>:w<CR>
map! <F2> <Esc>:w<CR>

map <F10> <Esc>:qa<CR>
map! <F10> <Esc>:qa<CR>

map <F9>  <Esc>:wqa<CR>
map! <F9>  <Esc>:wqa<CR>

inoremap <s-up> <Esc><c-w>W<Ins>
inoremap <s-down> <Esc><c-w>w<Ins>

nnoremap <s-up> <c-w>W
nnoremap <s-down> <c-w>w

" Fancy middle-line <CR>
inoremap <C-CR> <Esc>o
nnoremap <C-CR> o

" This is the way I like my quotation marks and various braces
inoremap '' ''<Left>
inoremap "" ""<Left>
inoremap () ()<Left>
inoremap <> <><Left>
inoremap {} {}<Left>
inoremap [] []<Left>
inoremap () ()<Left>

" Quickly set comma or semicolon at the end of the string
inoremap ,, <End>,
inoremap ;; <End>;
au FileType python inoremap :: <End>:


au FileType perl,python set foldlevel=0
au FileType perl,python set foldcolumn=4
au FileType perl,python set fen
au FileType perl        set fdm=syntax
au FileType python      set fdm=indent
au FileType perl,python set fdn=4
au FileType perl,python set fml=10
au FileType perl,python set fdo=block,hor,mark,percent,quickfix,search,tag,undo,search

au FileType perl,python abbr sefl self
au FileType perl abbr sjoft shift
au FileType perl abbr DUmper Dumper

function! ToggleNumberRow()
       if !exists("g:NumberRow") || 0 == g:NumberRow
               let g:NumberRow = 1
               call ReverseNumberRow()
       else
               let g:NumberRow = 0
               call NormalizeNumberRow()
       endif
endfunction


" Reverse the number row characters
function! ReverseNumberRow()
       " map each number to its shift-key character
       inoremap 1 !
       inoremap 2 @
       inoremap 3 #
       inoremap 4 $
       inoremap 5 %
       inoremap 6 ^
       inoremap 7 &
       inoremap 8 *
       inoremap 9 (
       inoremap 0 )
       inoremap - _
    inoremap 90 ()<Left>
       " and then the opposite
       inoremap ! 1
       inoremap @ 2
       inoremap # 3
       inoremap $ 4
       inoremap % 5
       inoremap ^ 6
       inoremap & 7
       inoremap * 8
       inoremap ( 9
       inoremap ) 0
       inoremap _ -
endfunction

" DO the opposite to ReverseNumberRow -- give everything back
function! NormalizeNumberRow()
       iunmap 1
       iunmap 2
       iunmap 3
       iunmap 4
       iunmap 5
       iunmap 6
       iunmap 7
       iunmap 8
       iunmap 9
       iunmap 0
       iunmap -
       "------
       iunmap !
       iunmap @
       iunmap #
       iunmap $
       iunmap %
       iunmap ^
       iunmap &
       iunmap *
       iunmap (
       iunmap )
       iunmap _
       inoremap () ()<Left>
endfunction

"call ToggleNumberRow()
nnoremap <M-n> :call ToggleNumberRow()<CR>

" Add use <CWORD> at the top of the file
function! UseWord(word)
       let spec_cases = {'Dumper': 'Data::Dumper'}
       let my_word = a:word
       if has_key(spec_cases, my_word)
               let my_word = spec_cases[my_word]
       endif

       let was_used = search("^use.*" . my_word, "bw")

       if was_used > 0
               echo "Used already"
               return 0
       endif

       let last_use = search("^use", "bW")
       if 0 == last_use
               last_use = search("^package", "bW")
               if 0 == last_use
                       last_use = 1
               endif
       endif

       let use_string = "use " . my_word . ";"
       let res = append(last_use, use_string)
       return 1
endfunction

function! UseCWord()
       let cline = line(".")
       let ccol = col(".")
       let ch = UseWord(expand("<cword>"))
       normal mu
       call cursor(cline + ch, ccol)

endfunction

function! GetWords(pattern)
       let cline = line(".")
       let ccol = col(".")
       call cursor(1,1)

       let temp_dict = {}
       let cpos = searchpos(a:pattern)
       while cpos[0] != 0
               let temp_dict[expand("<cword>")] = 1
               let cpos = searchpos(a:pattern, 'W')
       endwhile

       call cursor(cline, ccol)
       return keys(temp_dict)
endfunction

" Append the list of words, that match the pattern after cursor
function! AppendWordsLike(pattern)
       let word_list = sort(GetWords(a:pattern))
       call append(line("."), word_list)
endfunction


nnoremap <F7>  :call UseCWord()<CR>

" Useful to mark some code lines as debug statements
function! MarkDebug()
       let cline = line(".")
       let ctext = getline(cline)
       call setline(cline, ctext . "##_DEBUG_")
endfunction

" Easily remove debug statements
function! RemoveDebug()
       %g/#_DEBUG_/d
endfunction

au FileType perl,python inoremap <M-d> <Esc>:call MarkDebug()<CR><Ins>
au FileType perl,python inoremap <F6> <Esc>:call RemoveDebug()<CR><Ins>
au FileType perl,python nnoremap <F6> :call RemoveDebug()<CR>

" end Perl settings

nnoremap <silent> <F8> :TlistToggle<CR>
inoremap <silent> <F8> <Esc>:TlistToggle<CR><Esc>

function! AlwaysCD()
       if bufname("") !~ "^scp://" && bufname("") !~ "^sftp://" && bufname("") !~ "^ftp://"
               lcd %:p:h
       endif
endfunction
autocmd BufEnter * call AlwaysCD()

function! DeleteRedundantSpaces()
       let cline = line(".")
       let ccol = col(".")
       silent! %s/\s\+$//g
       call cursor(cline, ccol)
endfunction
au BufWrite * call DeleteRedundantSpaces()

set nobackup
set nowritebackup
set cul

colorscheme evening

autocmd FileType python set formatoptions=wcrq2l
autocmd FileType python set inc="^\s*from"
autocmd FileType python so /usr/share/vim/vim72/indent/python.vim

autocmd FileType c      set si
autocmd FileType mail   set noai
autocmd FileType mail   set ts=3
autocmd FileType mail   set tw=78
autocmd FileType mail   set shiftwidth=3
autocmd FileType mail   set expandtab
autocmd FileType xslt   set ts=4
autocmd FileType xslt   set shiftwidth=4
autocmd FileType txt    set ts=3
autocmd FileType txt    set tw=78
autocmd FileType txt    set expandtab

" Move cursor together with the screen
noremap <c-j> j<c-e>
noremap <c-k> k<c-y>

" Better Marks
nnoremap ' `

6

Niektóre poprawki typowych literówek pozwoliły mi zaoszczędzić zaskakującą ilość czasu:

:command WQ wq
:command Wq wq
:command W w
:command Q q

iab anf and
iab adn and
iab ans and
iab teh the
iab thre there

25
Nie podoba mi się to - po prostu trenuje błędy.
Svante

Podoba mi się to za słowa: i, tam, ale nie za zapisanie i wyjście
sixtyfootersdude

3
@Svante, normalnie bym się zgodził, z wyjątkiem tego, że mam to również w mojej komendzie, często zapisuję lub często zapisuję / wychodzę. Często mój mały palec jest tylko o ułamek sekundy zbyt wolny po zdjęciu klawisza Shift, a BAM jeden lub drugi kończy się wielką literą, to irytujące!
Pharaun

1
vi został napisany na i dla terminala ADM3A, który miał wyznaczony klawisz na dwukropek (:), więc nie trzeba było naciskać klawisza shift. Jeśli zmienisz przypisanie klawisza, który nie jest normalnie używany w trybie normalnym / wizualnym, na przykład spacja, nie napotkasz tak bardzo tego problemu. nnoremap <Space>: i vnomap <Space>: en.wikipedia.org/wiki/File:KB_Terminal_ADM3A.svg
aoeu

Podoba mi się to dla poleceń save / quit, ale nie dla słów. Jeśli popełnisz błąd, gdy nie ma siatki bezpieczeństwa, Vim poinformuje Cię o błędzie. Jeśli przeliterujesz jako „teh”, gdy nie ma autokorekty, nie zauważysz tego i będziesz wyglądać na niewykształconego.
Robert Martin

5

Nie zdawałem sobie sprawy, ile z moich 3200 wierszy .vimrc było tylko dla moich dziwacznych potrzeb i nie byłoby to dość inspirujące, aby je tutaj wymienić. Ale może dlatego Vim jest tak przydatny ...

iab AlP ABCDEFGHIJKLMNOPQRSTUVWXYZ
iab MoN January February March April May June July August September October November December
iab MoO Jan Feb Mar Apr May Jun Jul Aug Sep Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec
iab NuM 12345678901234567890123456789012345678901234567890123456789012345678901234567890 
iab RuL ----+----1----+----2----+----3----+----4----+----5----+----6----+----7----+----8----+----9----+----0

" Highlight every other line
map ,<Tab> :set hls<CR>/\\n.*\\n/<CR>

" This is for working across multiple xterms and/or gvims
" Transfer/read and write one block of text between vim sessions (capture whole line):
" Write
nmap ;w :. w! ~/.vimxfer<CR>
" Read
nmap ;r :r ~/.vimxfer<CR>
" Append 
nmap ;a :. w! >>~/.vimxfer<CR>

5

Moja linia 242 .vimrcnie jest tak interesująca, ale ponieważ nikt o niej nie wspomniał, czułem, że muszę udostępnić dwa najważniejsze mapowania, które ulepszyły mój przepływ pracy, oprócz domyślnych mapowań:

map <C-j> :bprev<CR>
map <C-k> :bnext<CR>
set hidden " this will go along

Poważnie, przełączanie buforów jest rzeczą bardzo często. Okna, jasne, ale nie wszystko tak ładnie mieści się na ekranie.

Podobny zestaw map do szybkiego przeglądania błędów (zobacz quickfix) i wyników grep:

map <C-n> :cn<CR>
map <C-m> :cp<CR>

Proste, łatwe i wydajne.


Nie przełączałem się zbytnio między buforami, ponieważ Vim ma obsługę kart. Mam dodatkowe klawisze „wstecz” i „dalej” na mojej klawiaturze przypisane do poleceń nawigacji po kartach.
Don Reba

@Don Reba, wiesz, zakładki po prostu replikują niektóre funkcje buforów. Nie ma więc dużej różnicy w „używaniu” buforów lub kart. Puryści powiedzą, że zakładki służą do organizowania zadań w oddzielnych regionach i nic więcej. Mówię tylko, że bufory mają całą wygodę i że zostawiłem zakładki, rezerwując je na coś innego, gdyby potrzebna była coś o wyższej abstrakcji. :)
nperson325681

4

set nobackup 
set nocp
set tabstop=4
set shiftwidth=4
set et
set ignorecase

set ai
set ruler
set showcmd
set incsearch
set dir=$temp       " Make swap live in the %TEMP% directory
syn on

" Load the color scheme
colo inkpot

4

Używam cscope z poziomu vima (świetnie wykorzystując wiele buforów). Używam control-K do inicjowania większości poleceń (skradzionych z ctagów, o ile pamiętam). Ponadto wygenerowałem już plik .cscope.out.

jeśli ma ("cscope")

set cscopeprg=/usr/local/bin/cscope
set cscopetagorder=0
set cscopetag
set cscopepathcomp=3
set nocscopeverbose
cs add .cscope.out
set csverb

"
" cscope find
"
" 0 or s: Find this C symbol
" 1 or d: Find this definition
" 2 or g: Find functions called by this function
" 3 or c: Find functions calling this function
" 4 or t: Find assignments to
" 6 or e: Find this egrep pattern
" 7 or f: Find this file
" 8 or i: Find files #including this file
" 
map ^Ks     :cs find 0 <C-R>=expand("<cword>")<CR><CR>
map ^Kd     :cs find 1 <C-R>=expand("<cword>")<CR><CR>
map ^Kg     :cs find 2 <C-R>=expand("<cword>")<CR><CR>
map ^Kc     :cs find 3 <C-R>=expand("<cword>")<CR><CR>
map ^Kt     :cs find 4 <C-R>=expand("<cword>")<CR><CR>
map ^Ke     :cs find 6 <C-R>=expand("<cword>")<CR><CR>
map ^Kf     :cs find 7 <C-R>=expand("<cfile>")<CR><CR>
map ^Ki     :cs find 8 <C-R>=expand("%")<CR><CR>

endif



3

Jestem na OS X, więc niektóre z nich mogą mieć lepsze ustawienia domyślne na innych platformach, ale niezależnie:

syntax on
set tabstop=4
set expandtab
set shiftwidth=4

1
Możesz spojrzeć w górę softtabstopi użyć tego zamiast tabstop. Pozostawienie tabstopdomyślnej wartości 8 pomoże podczas odczytywania plików utworzonych przez innych za pomocą zakładek.
Greg Hewgill

6
Co OSX ma wspólnego z zakładkami?
aehlke

3
map = }{!}fmt^M}
map + }{!}fmt -p '> '^M}
set showmatch

= służy do ponownego formatowania normalnych akapitów. + służy do ponownego formatowania akapitów w cytowanych wiadomościach e-mail. showmatch służy do flashowania pasującego nawiasu / nawiasu, gdy wpisuję nawias lub nawias zamykający.


3

Użyj pierwszego dostępnego pliku „tagów” ​​w drzewie katalogów:

:set tags=tags;/

Lewy i prawy służą do przełączania buforów, bez przesuwania kursora:

map <right> <ESC>:bn<RETURN>
map <left> <ESC>:bp<RETURN>

Wyłącz podświetlanie wyszukiwania jednym naciśnięciem klawisza:

map - :nohls<cr>

3
set tabstop=4 softtabstop=4 shiftwidth=4 expandtab autoindent cindent 
set encoding=utf-8 fileencoding=utf-8
set nobackup nowritebackup noswapfile autoread
set number
set hlsearch incsearch ignorecase smartcase

if has("gui_running")
    set lines=35 columns=140
    colorscheme ir_black
else
    colorscheme darkblue
endif

" bash like auto-completion
set wildmenu
set wildmode=list:longest

inoremap <C-j> <Esc>

" for lusty explorer
noremap glr \lr
noremap glf \lf
noremap glb \lb

" use ctrl-h/j/k/l to switch between splits
map <c-j> <c-w>j
map <c-k> <c-w>k
map <c-l> <c-w>l
map <c-h> <c-w>h

" Nerd tree stuff
let NERDTreeIgnore = ['\.pyc$', '\.pyo$']
noremap gn :NERDTree<Cr>

" cd to the current file's directory
noremap gc :lcd %:h<Cr>

Bardzo podoba mi się to, co dzieje się w twojej konfiguracji. Wiele zestawów na linię if has("gui_running")i fajne mapy. Skopiowałem większość twojej konfiguracji do mojej. DZIĘKI!
Justin Force

3

Umieść to w swoim vimrc:

imap <C-l> <Space>=><Space>

i nigdy więcej nie myśl o wpisywaniu hashrocket. Tak, wiem, że nie musisz tego robić w Rubim 1.9. Ale nieważne.

Mój pełny vimrc jest tutaj .


To świetny pomysł, ale sugerowałbym zmapowanie go tylko dla plików ruby:autocmd FileType ruby imap <C-l> <Space>=><Space>
csexton,

Czy mógłbyś wyjaśnić, co to oznacza dla osoby z Emacs, która nie zna Rubiego?
Thomas

Dodaje to skrót klawiszowy Control-L do trybu wstawiania Vima, aby automatycznie wpisywać hashrocket ze spacjami (=>). Hashhrocket jest operatorem klucz-wartość Rubiego dla skrótów.
dpogg1

2

Cóż, będziesz musiał samodzielnie przeszukać moje konfiguracje . Baw się dobrze. Przeważnie jest to tylko moja pożądana konfiguracja, w tym mapowania i losowe elementy związane ze składnią, a także konfiguracja składania i konfiguracja wtyczek, parser kompilacji tex itp.

A tak przy okazji, coś, co uznałem za niezwykle przydatne, to „wyróżnij słowo pod kursorem”:

 highlight flicker cterm=bold ctermfg=white
 au CursorMoved <buffer> exe 'match flicker /\V\<'.escape(expand('<cword>'), '/').'\>/'

Zauważ, że tylko ctermi termfgsą używane, ponieważ nie używam gvim. Jeśli chcesz, aby do pracy w gvimzaledwie replac je guii guifgodpowiednio.


Jak sprawić, by działał z wieloma otwartymi oknami? Wydaje się, że działa tylko z głównym, uruchomionym jako pierwszym, buforem.
ohnoes

2

Starałem się, aby mój plik .vimrc był jak najbardziej użyteczny.

Poręczna sztuczka polega na obsłudze plików .gpg do bezpiecznej edycji:

au BufNewFile,BufReadPre *.gpg :set secure vimi= noswap noback nowriteback hist=0 binary
au BufReadPost *.gpg :%!gpg -d 2>/dev/null
au BufWritePre *.gpg :%!gpg -e -r 'name@email.com' 2>/dev/null
au BufWritePost *.gpg u

2

1) Podoba mi się linia stanu (z nazwą pliku, wartością ascii (dziesiętną), wartością szesnastkową i standardowymi wierszami, kolumnami i%):

set statusline=%t%h%m%r%=[%b\ 0x%02B]\ \ \ %l,%c%V\ %P
" Always show a status line
set laststatus=2
"make the command line 1 line high
set cmdheight=1

2) Lubię też mapowania dla podzielonych okien.

" <space> switches to the next window (give it a second)
" <space>n switches to the next window
" <space><space> switches to the next window and maximizes it
" <space>= Equalizes the size of all windows
" + Increases the size of the current window
" - Decreases the size of the current window

 :map <space> <c-W>w
:map <space>n <c-W>w
:map <space><space> <c-W>w<c-W>_
:map <space>= <c-W>=
if bufwinnr(1)
  map + <c-W>+
  map - <c-W>-
endif

2

W moim .vimrc nie ma zbyt wiele (nawet jeśli ma 850 wierszy). Głównie ustawienia i kilka typowych i prostych mapowań, których byłem zbyt leniwy, aby wyodrębnić do wtyczek.

Jeśli masz na myśli "pliki-szablonów" przez "klasy automatyczne", używam wtyczki rozszerzającej szablony - na tej samej stronie znajdziesz wtyczki ftplugins, które zdefiniowałem do edycji C i C ++, niektóre mogą być dostosowane do C # chyba.

Jeśli chodzi o aspekt refaktoryzacji, na http://vim.wikia.com znajduje się wskazówka poświęcona temu tematowi ; IIRC przykładowy kod jest przeznaczony dla C #. Zainspirowało mnie to wtyczką do refaktoryzacji, która wciąż wymaga dużo pracy (właściwie wymaga refaktoryzacji).

Powinieneś rzucić okiem na archiwa listy dyskusyjnej vim, szczególnie tematy o używaniu vima jako efektywnego IDE. Nie zapomnij przyjrzeć się: marka, tagi, ...

HTH,


2

Mój .vimrc zawiera (między innymi, bardziej przydatne rzeczy) następujący wiersz:

set statusline=%2*%n\|%<%*%-.40F%2*\|\ %2*%M\ %3*%=%1*\ %1*%2.6l%2*x%1*%1.9(%c%V%)%2*[%1*%P%2*]%1*%2B

Znudziło mi się, ucząc się do matury.


czy możesz wyjaśnić, co to robi?
Vijay Dev

Pokazuje linię stanu z numerem bufora, nazwą pliku, statusem modyfikacji, pozycją w buforze i kodem szesnastkowym znaku pod kursorem. Ładnie sformatowane i kolorowe.
Tadeusz A. Kadłubowski

1

Oto mój plik .vimrc. Używam Gvima 7.2

set guioptions=em
set showtabline=2
set softtabstop=2
set shiftwidth=2
set tabstop=2

" Use spaces instead of tabs
set expandtab
set autoindent

" Colors and fonts
colorscheme inkpot
set guifont=Consolas:h11:cANSI

"TAB navigation like firefox
:nmap <C-S-tab> :tabprevious<cr>
:nmap <C-tab> :tabnext<cr>
:imap <C-S-tab> <ESC>:tabprevious<cr>i
:imap <C-tab> <ESC>:tabnext<cr>i
:nmap <C-t> :tabnew<cr>
:imap <C-t> <ESC>:tabnew<cr>i
:map <C-w> :tabclose<cr>

" No Backups and line numbers
set nobackup
set number
set nuw=6

" swp files are saved to %Temp% folder
set dir=$temp
" sets the default size of gvim on open
set lines=40 columns=90

1

Co jest w moim .vimrc?

ngn@macavity:~$ cat .vimrc
" This file intentionally left blank

Prawdziwe pliki konfiguracyjne znajdują się pod ~/.vim/ :)

I większość rzeczy pasożytuje na wysiłkach innych ludzi, rażąco dostosowanych vim.orgdo mojej przewagi edytorskiej.


2
Prawie to mam, ale .vimrc musi zawierać "set nocompatible", jeśli używasz tych funkcji, prawda? Przynajmniej usunięcie go powoduje tutaj mnóstwo błędów!
Richq
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.