Apa yang ada di .vimrc Anda? [Tutup]


157

Vi dan Vim memungkinkan penyesuaian yang sangat luar biasa, biasanya disimpan di dalam .vimrcfile. Fitur khas untuk seorang programmer akan menyoroti sintaks, indentasi pintar dan sebagainya.

Trik apa lagi untuk pemrograman produktif yang Anda miliki, tersembunyi di .vimrc Anda?

Saya sebagian besar tertarik pada refactorings, kelas mobil dan makro produktivitas serupa, terutama untuk C #.


11
Saya pikir Anda harus meminta orang untuk mengirim file konfigurasi vim yang dikomentari mereka .
innaM

Mengapa tidak membagikan hal ini di github? Saya memiliki seluruh folder .vim saya di bawah git dan semuanya dapat dilihat di sini: github.com/lsdr/vim-folder
lsdr

1
Saya tidak berpikir bahwa seluruh .vimrcs berguna; jika sekelompok orang memilih jawaban, apakah Anda hanya akan mengambil semuanya dan memasukkannya ke dalam sistem Anda? Cuplikan jauh lebih bermanfaat, sama seperti daftar alias atau fungsi yang berguna jauh lebih baik daripada seluruh file rc. (Bash | z).
Xiong Chiamiov

Jawaban:


104

Kamu yang meminta :-)

"{{{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
Tetapi mengapa 3, atur shiftwidth = 3, atur softtabstop = 3 ... mungkin 2 atau 4 tetapi mengapa 3?
Johan

1
Hanya ingin tahu, tetapi tidakkah memetakan jj ke <Esc> memberi Anda sedikit jeda saat menekan j dalam mode insert?
Sykora

1
@ sykora: ya, tapi begitu Anda mengetik char lain (yang bukan j) akan muncul. Saya melakukan hal yang sama, tetapi sebaliknya dengan jk, karena saya pikir memukul jk lebih cepat daripada memukul jj. Hanya kali ini mempengaruhi saya mengetik alfabet, jadi mungkin Anda lebih baik.
David Miani

2
@ Johan: karena 'tiga angka ajaib'. :) Sebenarnya, itu hanya bikeshedding tapi saya lebih suka tiga. :)
Robert Massaioli

4
Jika pria sejati menggunakan gcc, kenapa tidak? (compiler gcc dikomentari!)
Abdulsattar Mohammed

73

Ini bukan di file .vimrc saya, tapi kemarin saya belajar tentang ]pperintah. Ini menempel konten buffer seperti phalnya, tetapi secara otomatis menyesuaikan indentasi agar sesuai dengan garis kursor aktif! Ini bagus untuk memindahkan kode.


Maksud Anda ini mirip dengan: set paste, p,: set nopaste?
hyperboreean

3
Sejauh yang saya tahu, opsi: set paste tidak memiliki efek pada perintah p, hanya mempengaruhi teks yang diketik (atau disisipkan melalui terminal) dalam mode insert. Jadi tidak, ini fitur yang berbeda.
Greg Hewgill

1
Seharusnya tidak upvoting untuk ini, karena itu tidak menjawab pertanyaan, tapi aku sangat menyukainya;)
gorsky

53

Saya menggunakan yang berikut ini untuk menyimpan semua file sementara dan cadangan di satu tempat:

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

Menghemat direktori kerja yang berantakan di semua tempat.

Anda harus membuat direktori ini terlebih dahulu, vim tidak akan membuatnya untuk Anda.


2
Saya harus menyebutkan Anda harus membuat direktori itu sendiri, vim tidak akan melakukannya untuk Anda.
Harley Holcombe

Apakah ini menangani beberapa file identik dengan benar? (mis. jika Anda mengedit beberapa cabang berbeda dari kode yang sama)
yungchin

Tidak, ini akan menimpa file cadangan lama dengan nama yang sama. Jika ada yang punya cara untuk mengatasi ini, beri tahu saya.
Harley Holcombe

3
Coba ini: au BufWritePre * let & bex = '-'. strftime ("% Y% m% d-% H% M% S"). '.vimbackup' (Itu satu baris.) Dan saya harus menyebutkan ini juga: vim.wikia.com/wiki/VimTip962
Zsolt Botykai

1
Ini juga membuat Vim tidak mengeluh ketika membuka file yang disinkronkan Dropbox di beberapa mesin.
Cody Hess

31

Seseorang (yaitu Frew) yang diposting di atas memiliki baris ini:

"Secara otomatis memasukkan ke dalam direktori tempat file itu berada:"

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

Saya melakukan sesuatu seperti itu sendiri sampai saya menemukan hal yang sama dapat diselesaikan dengan pengaturan bawaan:

set autochdir

Saya pikir sesuatu yang serupa telah terjadi pada saya beberapa kali berbeda. Vim memiliki begitu banyak pengaturan dan opsi bawaan sehingga terkadang lebih cepat dan lebih mudah untuk menjalankan milik Anda daripada mencari dokumen tentang cara bawaan untuk melakukannya.


temukan! Saya suka menggunakan barang bawaan lebih banyak ^ _ ^. plus ini tidak gagal jika ada | dalam nama file.
Javed Ahamed

2
autochdir memiliki beberapa gangguan yang saya tidak pernah bisa mengatasi (mengubah direktori sebelum memuat file yang diberikan pada baris perintah), dan saya membaca di tempat lain di sini pada SO tentang autocmd BufEnter * silent! lcd %:p:h:gs/ /\\ /yang melakukan hal dasar yang sama tetapi tidak melumpuhkan baris perintah.
dash-tom-bang

Saya lebih suka membuatnya opsional dan menggunakan perintah ini untuk masuk ke direktori file saat ini: cd%: h
staackuser2

28

Tambahan terbaru saya adalah untuk menyoroti garis saat ini

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

2
apakah ada cara untuk memilih dari lebih banyak warna?
Fzs2

Apa perbedaan antara set cul dan set cursorline?
putolaruan

Saya hanya menggunakan "set cul" untuk mendapatkan garis di bawah baris saya saat ini. Pengaturan cursorline terlalu banyak mengacaukan sintaks untuk selera saya.
Claes Mogren

2
Rujuk ke skrip ini ( vim.org/scripts/script.php?script_id=1349 ) untuk mendapatkan warna yang tersedia. Mungkin perlu menyalakan 256 dukungan warna untuk vim untuk mendapatkan variasi yang lebih luas.
Brian Wigginton

1
@Claes Sebenarnya, set culdan set cursorlinelakukan hal yang persis sama.
Gerardo Marset

24

Pembaruan 2012 : Sekarang saya sangat merekomendasikan memeriksa vim-powerline yang telah menggantikan skrip statusline lama saya, meskipun saat ini kehilangan beberapa fitur yang saya lewatkan.


Saya akan mengatakan bahwa hal-hal statusline di vimrc saya mungkin paling menarik / berguna dari banyak (robek dari penulis vimrc di sini dan posting blog yang sesuai di sini ).

Tangkapan layar:

status line http://img34.imageshack.us/img34/849/statusline.png

Kode:

"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

Di antara hal-hal lain, ini menginformasikan pada baris status dari informasi file standar biasa tetapi juga mencakup hal-hal tambahan seperti peringatan untuk: set paste, indentasi campuran, tertinggal spasi putih dll. Cukup berguna jika Anda sangat anal tentang pemformatan kode Anda.

Lebih jauh dan seperti yang ditunjukkan dalam tangkapan layar, menggabungkannya dengan sintaksis memungkinkan kesalahan sintaksis disorot di atasnya (dengan asumsi bahasa pilihan Anda memiliki pemeriksa sintaksis yang terkait dibundel.


Saya mengalami masalah dengan hal di atas. Ada persyaratan yang hilang di LongLines (). Saya mengubahnya menjadi "selagi saya <threshold" namun len juga hilang yang dipanggil di dalam kondisi itu. Ada ide tentang len?
Ali

Tidak apa-apa, saya menemukan yang asli di sini: dotfiles.org/~gregf/.vimrc
Ali

@pug Kesalahan server internal ada di sana sekarang. = (Bisakah Anda memberikan petunjuk atau menempelkan bagian yang relevan dari .vimrc di suatu tempat, tolong?
Anton Strogonoff

@Anton memperbaiki rekat yang dirusak oleh pemformatan kode. Seharusnya bagus sekarang. Saya juga merekomendasikan menempelnya di file plugin / statusline.vim agar tidak mengacaukan .vimrc Anda jika Anda akan menggunakannya.
Gavin Gilmour

@ Gavin Bekerja sangat baik, terima kasih atas perbaikannya dan atas tipnya! Saya dulu punya sesuatu seperti autocmd BufEnter *.py match OverLength /\%81v.\+/di .vimrc untuk menyoroti garis panjang, tetapi pendekatan Anda mungkin kurang mengganggu. Juga, hasil pemeriksaan sintaks di bilah status adalah satu hal yang sangat keren!
Anton Strogonoff

19

Versi mini saya:

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

Versi besar, dikumpulkan dari berbagai tempat:

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' sudah usang (cindent menggantikannya) dan tidak melakukan apa-apa ketika Anda menggunakan indentasi tipe file, dan hanya akan aktif ketika itu tidak berguna
greywh

13

Terkadang hal yang paling sederhana adalah yang paling berharga. 2 baris dalam .vimrc saya yang sangat diperlukan:

Nore; :
nore,;

Saya melakukannya nore \ ;karena saya gunakan ,sebagai<leader>
aehlke

3
Tapi apa fungsinya? :)
Henrik Bjørnskov

6
semi-colon adalah perintah yang jarang digunakan. titik dua adalah perintah yang sangat umum, digunakan untuk masuk ke mode baris perintah. Memindahkan satu ke yang lain memungkinkan Anda untuk masuk ke mode baris perintah tanpa menekan tombol shift, sehingga menghemat otot-otot di jari-jari kecil Anda.
William Pursell

7
Pada keyboard Prancis Anda tidak perlu 'bergeser' untuk menulis ',', ';' dan ':' ... Tapi '\', '[' dan ']' benar-benar menyakitkan.
Olivier Pons

12

Lain-lain pengaturan:

  1. Matikan bel kesalahan yang mengganggu:

    set noerrorbells
    set visualbell
    set t_vb=
    
  2. Buat gerakan kursor seperti yang diharapkan dengan garis terbungkus:

    inoremap <Down> <C-o>gj
    inoremap <Up> <C-o>gk
    
  3. Cari ctags"tag" file direktori, sampai ditemukan:

    set tags=tags;/
    
  4. Tampilkan file SCons dengan sintaks Python:

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

Tambahkan #! / Usr / bin / python ke file SConstruct, itu akan memicu sihir pendeteksi tipe file
bawaan Vim

Apakah ada cara yang lebih baik untuk membuat j/ kbergerak seperti yang diharapkan dengan garis yang dibungkus? Saya tidak ingin menekan gsetiap waktu.
puk

8

Saya bukan vim'er paling canggih di dunia, tapi inilah beberapa yang saya ambil

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>

Membuat tab-autocomplete mengetahui apakah Anda ingin menempatkan kata di sana atau tab yang sebenarnya (4 spasi).

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

Hapus semua spasi kosong dari sini hingga akhir file. Untuk beberapa alasan saya menemukan ini sangat berguna.

set nu! 
set nobackup

Tampilkan nomor baris dan jangan buat file cadangan yang mengganggu itu. Saya tidak pernah memulihkan apa pun dari cadangan lama.

imap ii <C-[>

Saat dimasukkan, tekan i dua kali untuk pergi ke mode perintah. Saya tidak pernah menemukan kata atau variabel dengan 2 i berturut-turut, dan dengan cara ini saya tidak harus membiarkan jari saya meninggalkan baris beranda atau menekan beberapa tombol untuk beralih bolak-balik.


3
Pemetaan menarik ii ​​... sangat menarik. Itu ide yang sangat keren - walaupun saya khawatir itu akan sangat mempengaruhi kemampuan saya untuk menggunakan vim 'vanilla' jika saya harus.
thomasrutter

Saya telah melakukan hal yang sama dengan ;; untuk waktu yang lama, dan belum mengalami masalah. Ketika dipaksa untuk menggunakan vanilla vi / vim saya segera ingat untuk menggunakan kunci [esc] bodoh (yang merupakan salah satu alasan saya benci vim selama bertahun-tahun!). Bagi saya, pengaturan ini sangat penting. Saya tidak akan pernah mau menggunakan vi (m) tanpa itu. <br> Dan saya suka gagasan menggunakan 'ii' bukannya ';;': lebih intuitif, hampir seperti toggle.
iconoclast

Kemungkinan lain adalah menggunakan Ctrl-C untuk meninggalkan mode penyisipan. Hampir melakukan hal yang sama dengan Escape (satu-satunya perbedaan yang mengganggu saya adalah ketika beroperasi pada garis blok visual).
a3nm

8

Vmrc saya yang banyak berkomentar, dengan keybindings 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' sudah usang (cindent menggantikannya) dan tidak melakukan apa-apa ketika Anda menggunakan indentasi tipe file, dan hanya akan aktif ketika itu tidak berguna
greywh

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

Beberapa perbaikan untuk kesalahan ketik umum telah menghemat waktu yang mengejutkan bagi saya:

: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
Saya tidak suka ini - itu hanya melatih kesalahan.
Svante

Saya suka untuk kata-kata: dan, itu, ada tetapi tidak untuk menyelamatkan dan berhenti
sixtyfootersdude

3
@Sante, biasanya saya akan setuju, kecuali saya memiliki ini dalam perintah saya juga, saya cenderung sering menyimpan atau menyimpan / berhenti sering. Seringkali kelingking saya hanya sepersekian detik terlalu lambat untuk mengangkat tombol shift dan BAM satu atau yang lain akhirnya dikapitalisasi, itu menjengkelkan!
Firaun

1
vi ditulis pada dan untuk terminal ADM3A, yang memiliki kunci yang ditunjuk untuk titik dua (:) sehingga Anda tidak perlu menekan shift. Jika Anda memetakan kembali sebuah tombol yang biasanya tidak digunakan sama sekali dalam mode normal / visual, seperti bilah spasi, Anda tidak akan mengalami masalah ini terlalu banyak. nnoremap <Space>: dan vnomap <Space>: en.wikipedia.org/wiki/File:KB_Terminal_ADM3A.svg
aoeu

Saya suka ini untuk perintah simpan / keluar, tetapi tidak untuk kata-kata. Jika Anda membuat kesalahan ketika jaring pengaman tidak ada, Vim akan memberi tahu Anda kesalahan Anda. Jika Anda mengeja sebagai "teh" ketika koreksi otomatis tidak ada, Anda tidak akan melihat dan Anda akan terlihat tidak berpendidikan.
Robert Martin

5

Saya tidak menyadari berapa banyak baris 3200 .vimrc saya hanya untuk kebutuhan unik saya dan akan cukup membosankan untuk mendaftar di sini. Tapi mungkin itu sebabnya Vim sangat berguna ...

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

242-line saya .vimrctidak begitu menarik, tetapi karena tidak ada yang menyebutkannya, saya merasa harus berbagi dua pemetaan paling penting yang telah meningkatkan alur kerja saya selain pemetaan default:

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

Serius, beralih buffer adalah yang hal yang harus dilakukan sangat sering. Windows, tentu saja, tetapi semuanya tidak sesuai dengan layar dengan baik.

Serangkaian peta untuk penelusuran kesalahan yang cepat (lihat perbaikan cepat) dan hasil grep:

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

Sederhana, mudah, dan efisien.


Saya belum banyak beralih di antara buffer, karena Vim mendapat dukungan tab. Saya memiliki tombol tambahan "kembali" dan "maju" di keyboard saya yang dipetakan ke perintah navigasi tab.
Don Reba

@Don Reba, Anda tahu, tab hanya meniru beberapa fungsi buffer. Jadi tidak ada banyak perbedaan untuk "menggunakan" buffer atau tab. Purists akan mengatakan bahwa tab dimaksudkan untuk mengatur tugas ke daerah yang terpisah dan tidak lebih. Yang saya katakan adalah bahwa penyangga memiliki semua kenyamanan dan bahwa saya telah menggunakan tab, menyimpannya ke sesuatu yang lain jika sesuatu yang lebih tinggi membutuhkan abstraksi :)
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

Saya menggunakan cscope dari dalam vim (memanfaatkan banyak buffer). Saya menggunakan control-K untuk memulai sebagian besar perintah (dicuri dari ctag seingat saya). Juga, saya sudah membuat file .cscope.out.

jika memiliki ("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>

berakhir jika



3

Saya menggunakan OS X, jadi beberapa di antaranya mungkin memiliki standar yang lebih baik di platform lain, tetapi terlepas dari:

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

1
Anda mungkin ingin mencari softtabstopdan menggunakannya tabstop. Membiarkan tabstopnilai default 8 akan membantu saat membaca file yang dibuat orang lain dengan tab.
Greg Hewgill

6
Apa hubungannya OSX dengan tab?
aehlke

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

= untuk memformat ulang paragraf normal. + untuk memformat ulang paragraf dalam email yang dikutip. showmatch adalah untuk menginstal kurung / kurung yang cocok ketika saya mengetik kurung kurung atau kurung.


3

Gunakan file 'tag' pertama yang tersedia di pohon direktori:

:set tags=tags;/

Kiri dan kanan adalah untuk mengganti buffer, bukan menggerakkan kursor:

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

Nonaktifkan penyorotan pencarian dengan satu kali penekanan tombol:

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>

Saya suka banyak hal yang terjadi di konfigurasi Anda. Beberapa set per baris if has("gui_running"),, dan peta keren. Saya telah menyalin sebagian besar konfigurasi Anda ke milik saya. TERIMA KASIH!
Justin Force

3

Letakkan ini di vimrc Anda:

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

dan tidak pernah berpikir tentang mengetik hashrocket lagi. Ya, saya tahu Anda tidak perlu di Ruby 1.9. Tapi tidak apa-apa.

Vmrc penuh saya ada di sini .


Ini adalah ide yang bagus, tapi saya sarankan hanya memetakannya untuk file ruby:autocmd FileType ruby imap <C-l> <Space>=><Space>
csexton

Bisakah Anda menjelaskan apa yang terjadi pada orang Emacs yang tidak mengenal Ruby?
Thomas

Ini menambahkan hotkey Control-L ke mode insert Vim untuk secara otomatis mengetik hashrocket dengan spasi (=>). Hashrocket adalah operator nilai kunci Ruby untuk hash.
dpogg1

2

Nah, Anda harus mengais konfigurasi saya sendiri. Selamat bersenang-senang. Sebagian besar itu hanya pengaturan yang saya inginkan, termasuk pemetaan dan hal-hal yang berhubungan dengan sintaksis acak, serta pengaturan lipat dan beberapa konfigurasi plugin, pengurai tex-compilation dll.

BTW, sesuatu yang saya temukan sangat berguna adalah "sorot kata di bawah kursor":

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

Perhatikan bahwa hanya ctermdan termfgdigunakan, karena saya tidak menggunakannya gvim. Jika Anda ingin itu berfungsi, gvimcukup ganti mereka dengan guidan guifg, masing-masing.


Bagaimana cara membuatnya bekerja dengan beberapa jendela yang dibuka? Tampaknya hanya berfungsi dengan buffer utama yang diluncurkan sebagai yang pertama.
ohnoes

2

Saya sudah mencoba untuk menjaga .vimrc saya agar bermanfaat secara umum.

Trik praktis di sana adalah penangan untuk file .gpg untuk mengeditnya dengan aman:

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) Saya suka baris status (dengan nama file, nilai ascii (desimal), nilai hex, dan garis standar, cols, dan%):

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) Saya juga suka pemetaan untuk windows split.

" <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

Sebenarnya tidak banyak di .vimrc saya (walaupun memiliki 850 baris). Sebagian besar pengaturan dan beberapa pemetaan umum dan sederhana yang saya terlalu malas untuk mengekstrak ke plugin.

Jika Anda maksud "file templat" oleh "kelas otomatis", saya menggunakan plugin templat expander - di situs yang sama ini, Anda akan menemukan ftplugins yang telah saya tentukan untuk pengeditan C&C ++, beberapa mungkin dapat disesuaikan dengan C # Saya kira.

Mengenai aspek refactoring, ada tip yang didedikasikan untuk subjek ini di http://vim.wikia.com ; IIRC contoh kode untuk C #. Itu mengilhami saya sebuah plugin refactoring yang masih membutuhkan banyak pekerjaan (perlu sebenarnya direactored).

Anda harus melihat arsip milis vim, khususnya subjek tentang penggunaan vim sebagai IDE yang efektif. Jangan lupa melihat: make, tag, ...

HTH,


2

.Vimrc saya mencakup (antara lain, hal-hal yang lebih bermanfaat) baris berikut:

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

Saya bosan saat belajar untuk final SMA saya.


dapatkah Anda menjelaskan apa fungsinya?
Vijay Dev

Ini menunjukkan baris status dengan nomor buffer, nama file, status modifikasi, posisi dalam buffer dan kode hex karakter di bawah kursor. Diformat dengan baik dan diwarnai.
Tadeusz A. Kadłubowski

1

Inilah .vimrc saya. Saya menggunakan Gvim 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

Apa yang ada di saya .vimrc?

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

File konfigurasi sebenarnya ada di bawah ~/.vim/ :)

Dan sebagian besar hal yang ada di parasiting pada upaya orang lain, secara terang-terangan diadaptasi dari vim.orguntuk keuntungan pengeditan saya.


2
Saya hampir memilikinya tetapi .vimrc perlu mengandung "set nocompatible" jika Anda menggunakan fitur-fitur itu, bukan? Setidaknya menghapusnya menyebabkan banyak kesalahan di sini!
richq
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.