Có gì trong .vimrc của bạn? [đóng cửa]


157

Vi và Vim cho phép tùy chỉnh thực sự tuyệt vời, thường được lưu trữ bên trong một .vimrctệp. Các tính năng điển hình cho một lập trình viên sẽ là tô sáng cú pháp, thụt lề thông minh, v.v.

Bạn có những thủ thuật nào khác để lập trình hiệu quả, ẩn trong .vimrc của bạn?

Tôi chủ yếu quan tâm đến tái cấu trúc, các lớp tự động và các macro năng suất tương tự, đặc biệt là đối với C #.


11
Tôi nghĩ bạn nên yêu cầu mọi người đăng các tập tin cấu hình vim bình luận của họ .
innaM

Tại sao không chia sẻ những điều này trên github? Tôi có toàn bộ thư mục .vim của mình dưới git và tất cả có thể xem tại đây: github.com/lsdr/vim-folder
lsdr

1
Tôi không nghĩ rằng toàn bộ .vimrcs là hữu ích; Nếu một nhóm người đưa ra câu trả lời, bạn có định lấy toàn bộ và đưa nó vào hệ thống của bạn không? Đoạn trích hữu ích hơn nhiều, giống như một danh sách các bí danh hoặc hàm hữu ích tốt hơn nhiều so với toàn bộ tệp. (Bash | z).
Xiong Chiamiov

Câu trả lời:


104

Bạn đã yêu cầu nó :-)

"{{{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
Nhưng tại sao 3, đặt shift thong = 3, đặt softtabstop = 3 ... có thể 2 hoặc 4 nhưng tại sao 3?
Johan

1
Chỉ cần tự hỏi, nhưng sẽ không ánh xạ jj đến <Esc> cho bạn độ trễ nhẹ khi nhấn j trong chế độ chèn?
sykora

1
@sykora: có, nhưng ngay sau khi bạn gõ một char khác (không phải j) thì nó sẽ xuất hiện. Tôi làm điều tương tự, nhưng thay vì với jk, vì tôi nghĩ đánh jk nhanh hơn đánh jj. Chỉ có điều điều này ảnh hưởng đến tôi là gõ bảng chữ cái, vì vậy có lẽ kj bạn sẽ tốt hơn.
David Miani

2
@Johan: bởi vì 'ba là số ma thuật'. :) Thật ra, đó chỉ là đi xe đạp nhưng tôi cũng thích ba. :)
Robert Massaioli

4
Nếu đàn ông thực sự sử dụng gcc, tại sao bạn không? (trình biên dịch gcc được nhận xét!)
Abdulsattar Mohammed

73

Đây không phải trong tệp .vimrc của tôi, nhưng hôm qua tôi đã biết về ]plệnh này. Cái này dán nội dung của bộ đệm giống như pvậy, nhưng nó tự động điều chỉnh thụt lề để khớp với dòng con trỏ đang bật! Điều này là tuyệt vời cho việc di chuyển mã xung quanh.


Bạn có nghĩa là điều này tương tự như: set paste, p ,: set nopaste?
hyperboreean

3
Theo tôi biết, tùy chọn: set paste không có bất kỳ ảnh hưởng nào đến lệnh p, nó chỉ ảnh hưởng đến văn bản được gõ (hoặc dán qua thiết bị đầu cuối) trong chế độ chèn. Vì vậy, không, đó là một tính năng khác.
Greg Hewgill

1
Không nên ủng hộ điều này, vì nó không trả lời câu hỏi, nhưng tôi rất thích nó;)
gorsky

53

Tôi sử dụng cách sau để giữ tất cả các tệp tạm thời và sao lưu ở một nơi:

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

Lưu thư mục làm việc lộn xộn khắp nơi.

Bạn sẽ phải tạo các thư mục này trước, vim sẽ không tạo chúng cho bạn.


2
Tôi nên đề cập đến việc bạn sẽ phải tự tạo các thư mục đó, vim sẽ không làm điều đó cho bạn.
Harley Holcombe

Điều này có xử lý nhiều tập tin giống hệt nhau đúng cách? (ví dụ: nếu bạn đang chỉnh sửa một số nhánh khác nhau của cùng một mã)
yungchin

Không, điều này sẽ ghi đè lên các tệp sao lưu cũ có cùng tên. Nếu ai có cách nào khác, hãy cho tôi biết.
Harley Holcombe

3
Hãy thử điều này: au BufWritePre * let & bex = '-'. strftime ("% Y% m% d-% H% M% S"). '.Vimbackup' (Đó là một dòng.) Và tôi cũng phải đề cập đến điều này: vim.wikia.com/wiki/VimTip962
Zsolt Botykai

1
Điều này cũng khiến Vim không phàn nàn khi mở các tệp được đồng bộ hóa Dropbox trên nhiều máy.
Cody Hess

31

Ai đó (viz. Frew) đã đăng ở trên có dòng này:

"Tự động cd vào thư mục chứa tập tin:"

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

Tôi đã tự mình làm một cái gì đó cho đến khi tôi phát hiện ra điều tương tự có thể được thực hiện với một thiết lập sẵn có:

set autochdir

Tôi nghĩ điều gì đó tương tự đã xảy ra với tôi một vài lần khác nhau. Vim có rất nhiều cài đặt và tùy chọn tích hợp khác nhau, đôi khi nó nhanh hơn và dễ dàng hơn cho chính bạn hơn là tìm kiếm các tài liệu cho cách tích hợp sẵn để thực hiện.


tìm tuyệt vời tôi thích sử dụng công cụ tích hợp nhiều hơn ^ _ ^. cộng với điều này không thất bại nếu có một | trong tên tệp.
Javed Ahamed

2
autochdir có một số phiền toái mà tôi không bao giờ có thể giải quyết được (thay đổi thư mục trước khi tải một tệp được đưa ra trên dòng lệnh) và tôi đã đọc ở đây trên SO về autocmd BufEnter * silent! lcd %:p:h:gs/ /\\ /điều này làm điều cơ bản tương tự nhưng không làm tê liệt dòng lệnh.
dash-tom-bang

Tôi thích làm cho nó tùy chọn và sử dụng lệnh này để vào thư mục của tệp hiện tại: cd%: h
staackuser2

28

Bổ sung mới nhất của tôi là để làm nổi bật dòng hiện tại

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

2
Có cách nào để chọn từ nhiều màu sắc hơn?
Fzs2

Sự khác biệt giữa bộ cống và bộ con trỏ là gì?
putolaruan

Tôi chỉ sử dụng "thiết lập cống" để có được một dòng dưới hàng hiện tại của tôi. Cài đặt con trỏ bị rối quá nhiều với cú pháp tô sáng theo sở thích của tôi.
Claes Mogren

2
Tham khảo tập lệnh này ( vim.org/scripts/script.php?script_id=1349 ) để có được các màu có sẵn. Có thể cần bật hỗ trợ 256 màu cho vim để có được sự đa dạng rộng hơn.
Brian Wigginton

1
@Claes Trên thực tế, set culset cursorlinelàm điều tương tự chính xác.
Gerardo Marset

24

Cập nhật 2012 : Bây giờ tôi thực sự khuyên bạn nên kiểm tra vim-powerline đã thay thế tập lệnh trạng thái cũ của tôi, mặc dù hiện tại thiếu một số tính năng tôi bỏ lỡ.


Tôi muốn nói rằng các công cụ dòng trạng thái trong vimrc của tôi có lẽ là thú vị / hữu ích nhất trong số rất nhiều (trích từ các tác giả vimrc ở đây và bài đăng blog tương ứng ở đây ).

Ảnh chụp màn hình:

dòng trạng thái http://img34.imageshack.us/img34/849/statusline.png

Mã số:

"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

Ngoài ra, nó còn thông báo về dòng trạng thái của thông tin tệp tiêu chuẩn thông thường nhưng cũng bao gồm những thứ bổ sung như cảnh báo: đặt dán, thụt lề hỗn hợp, dấu trắng, v.v. Khá hữu ích nếu bạn đặc biệt quan tâm đến định dạng mã của mình.

Hơn thế nữa và như trong ảnh chụp màn hình, kết hợp nó với syntastic cho phép bất kỳ lỗi cú pháp được đánh dấu trên nó (giả sử ngôn ngữ của bạn lựa chọn có kiểm tra cú pháp liên quan kèm.


Tôi đang gặp rắc rối với những điều trên. Có một điều kiện bị thiếu trong LongLines (). Tôi đã thay đổi nó thành "trong khi tôi <ngưỡng" tuy nhiên len cũng bị thiếu đang được gọi trong điều kiện đó. Bất cứ ý tưởng về len?
Ali

Không sao, tôi đã tìm thấy đồ thật ở đây: dotfiles.org/~gregf/.vimrc
Ali

@pug Lỗi máy chủ nội bộ hiện có. = (Bạn có thể đưa ra gợi ý hoặc dán phần có liên quan của .vimrc ở đâu đó không?
Anton Strogonoff

@Anton đã sửa lỗi dán bị rối bởi định dạng mã. Nên tốt bây giờ. Tôi cũng khuyên bạn nên dán nó vào tệp plugin / statusline.vim để giữ cho nó không làm lộn xộn .vimrc của bạn nếu bạn sẽ sử dụng nó.
Gavin Gilmour

@Gavin Hoạt động tuyệt vời, cảm ơn bạn đã sửa chữa và cho tiền boa! Tôi đã từng có một cái gì đó giống như autocmd BufEnter *.py match OverLength /\%81v.\+/trong .vimrc để làm nổi bật các dòng dài, nhưng cách tiếp cận của bạn có thể ít gây mất tập trung hơn. Ngoài ra, kết quả kiểm tra cú pháp trong thanh trạng thái là một điều tuyệt vời!
Anton Strogonoff

19

Phiên bản mini của tôi:

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

Phiên bản lớn, được thu thập từ nhiều nơi khác nhau:

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' đã lỗi thời (cindent thay thế nó) và không làm gì khi bạn sử dụng thụt lề filetype và sẽ chỉ hoạt động khi không hữu ích
Graywh

13

Đôi khi những điều đơn giản nhất lại có giá trị nhất. 2 dòng trong .vimrc của tôi hoàn toàn không thể thiếu:

không làm lại ; :
không làm lại , ;

Tôi đã làm nore \ ;thay vì kể từ khi tôi sử dụng ,như<leader>
aehlke

3
Nhưng nó làm gì? :)
Henrik Bjørnskov

6
bán đại tràng là một lệnh hiếm khi được sử dụng. dấu hai chấm là một lệnh cực kỳ phổ biến, được sử dụng để vào chế độ dòng lệnh. Việc ánh xạ lại từ cái này sang cái khác cho phép bạn vào chế độ dòng lệnh mà không cần nhấn phím shift, do đó tiết kiệm các cơ trong ngón tay út của bạn.
William Pursell

7
Trên bàn phím tiếng Pháp, bạn không cần 'shift' để viết ',', ';' và ':' ... Nhưng '\', '[' và ']' là một nỗi đau thực sự.
Olivier Pons

12

Linh tinh cài đặt:

  1. Tắt chuông báo lỗi gây phiền nhiễu:

    set noerrorbells
    set visualbell
    set t_vb=
    
  2. Làm cho con trỏ di chuyển như mong đợi với các dòng được bọc:

    inoremap <Down> <C-o>gj
    inoremap <Up> <C-o>gk
    
  3. Tra cứu ctags"thẻ" tập tin thư mục, cho đến khi tìm thấy một:

    set tags=tags;/
    
  4. Hiển thị tệp SCons với cú pháp Python:

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

Thêm #! / Usr / bin / python vào tệp SConstruct, nó sẽ kích hoạt ma thuật phát hiện loại tệp tích hợp của Vim
richq

Có cách nào tốt hơn để thực hiện j/ kdi chuyển như mong đợi với các đường bao bọc không? Tôi không muốn nhấn gmỗi lần.
puk

8

Tôi không phải là vim'er tiên tiến nhất trên thế giới, nhưng đây là một vài người tôi đã chọn

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>

Làm cho tab tự động hoàn thành tìm hiểu xem bạn muốn đặt một từ ở đó hay một tab thực tế (4 khoảng trắng).

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

Xóa tất cả các khoảng trắng mở từ đây đến cuối tệp. Đối với một số lý do tôi thấy điều này hữu ích rất nhiều.

set nu! 
set nobackup

Hiển thị số dòng và không tạo các tệp sao lưu gây phiền nhiễu. Tôi chưa bao giờ khôi phục bất cứ thứ gì từ một bản sao lưu cũ.

imap ii <C-[>

Trong khi chèn, nhấn i hai lần để chuyển sang chế độ lệnh. Tôi chưa bao giờ bắt gặp một từ hoặc biến với 2 i liên tiếp và theo cách này tôi không phải dùng ngón tay rời khỏi hàng nhà hoặc nhấn nhiều phím để chuyển đổi qua lại.


3
Bản đồ thú vị của ii ... rất thú vị. Đó là một ý tưởng khá tuyệt vời - mặc dù tôi lo lắng rằng nó sẽ ảnh hưởng nghiêm trọng đến khả năng sử dụng vim 'vanilla' của tôi.
thomasrutter

Tôi đã làm điều tương tự với ;; trong một thời gian dài và không gặp phải bất kỳ vấn đề nào. Khi buộc phải sử dụng vanilla vi / vim, tôi ngay lập tức nhớ sử dụng phím [esc] ngu ngốc (đó là một lý do khiến tôi ghét vim trong nhiều năm qua!). Đối với tôi, thiết lập này là hoàn toàn cần thiết. Tôi sẽ không bao giờ sẵn sàng sử dụng vi (m) mà không có nó. <br> Và tôi thích ý tưởng sử dụng 'ii' thay vì ';;': trực quan hơn, gần giống như chuyển đổi.
iconoclast

Một khả năng khác là sử dụng Ctrl-C để thoát khỏi chế độ chèn. Nó gần giống như Escape (sự khác biệt duy nhất làm phiền tôi là khi hoạt động trên các đường của một khối trực quan).
a3nm

8

Vimrc nhận xét nặng nề của tôi, với các 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' đã lỗi thời (cindent thay thế nó) và không làm gì khi bạn sử dụng thụt lề filetype và sẽ chỉ hoạt động khi không hữu ích
Graywh

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

Một số cách khắc phục lỗi chính tả đã giúp tôi tiết kiệm thời gian đáng kinh ngạc:

: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
Tôi không thích điều này - nó chỉ đào tạo lỗi.
Svante

Tôi thích nó vì các từ: và, ở đó, nhưng không phải vì tiết kiệm và bỏ cuộc
sixty feetersdude

3
@Svante, thông thường tôi sẽ đồng ý, ngoại trừ tôi cũng có lệnh này, tôi có xu hướng lưu thường xuyên hoặc lưu / thoát thường xuyên. Thường thì Pinkie của tôi chỉ là một phần của một giây quá chậm khi nhấc phím shift và BAM một hoặc cuối cùng bị viết hoa, thật khó chịu!
Pharaun

1
vi được viết trên và cho thiết bị đầu cuối ADM3A, có một phím được chỉ định cho dấu hai chấm (:) vì vậy bạn không cần phải nhấn shift. Nếu bạn sắp xếp lại một khóa mà thường không được sử dụng ở chế độ bình thường / trực quan, như thanh không gian, bạn sẽ không gặp phải vấn đề này nhiều. nnoremap <Space>: và vnomap <Space>: en.wikipedia.org/wiki/File:KB_Terminal_ADM3A.svg
aoeu

Tôi thích điều này cho các lệnh lưu / thoát, nhưng không phải cho các từ. Nếu bạn mắc lỗi khi mạng lưới an toàn không có, Vim sẽ cho bạn biết lỗi của bạn. Nếu bạn đánh vần là "teh" khi không tự động sửa lỗi, bạn sẽ không nhận thấy và bạn sẽ trông không được học.
Robert Martin

5

Tôi đã không nhận ra có bao nhiêu trong số 3200 dòng .vimrc của tôi chỉ dành cho nhu cầu kỳ quặc của tôi và sẽ khá là không mệt mỏi khi liệt kê ở đây. Nhưng có lẽ đó là lý do tại sao Vim rất hữu ích ...

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

Dòng 242 của tôi .vimrckhông thú vị lắm, nhưng vì không ai đề cập đến nó, tôi cảm thấy như mình phải chia sẻ hai ánh xạ quan trọng nhất đã nâng cao quy trình làm việc của tôi bên cạnh các ánh xạ mặc định:

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

Nghiêm túc, chuyển đổi bộ đệm là những điều cần làm rất thường xuyên. Windows, chắc chắn, nhưng mọi thứ không phù hợp với màn hình rất độc đáo.

Bộ bản đồ tương tự để duyệt nhanh các lỗi (xem quickfix) và kết quả grep:

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

Đơn giản, dễ dàng và hiệu quả.


Tôi chưa chuyển đổi giữa các bộ đệm nhiều, vì Vim có hỗ trợ tab. Tôi có các phím phụ "quay lại" và "chuyển tiếp" trên bàn phím được ánh xạ tới các lệnh điều hướng tab.
Don Reba

@Don Reba, bạn biết đấy, các tab chỉ sao chép một số chức năng của bộ đệm. Vì vậy, không có nhiều sự khác biệt để "sử dụng" bộ đệm hoặc tab. Những người theo chủ nghĩa thuần túy sẽ nói rằng các tab có nghĩa là tổ chức các nhiệm vụ để phân tách các khu vực và không có gì hơn. Tất cả những gì tôi nói là bộ đệm có tất cả sự tiện lợi và tôi đã sử dụng các tab, đặt chúng vào một thứ khác nếu cần một sự trừu tượng cao hơn. :)
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

Tôi sử dụng cscope từ bên trong vim (sử dụng nhiều bộ đệm). Tôi sử dụng control-K để khởi tạo hầu hết các lệnh (bị đánh cắp từ ctags khi tôi nhớ lại). Ngoài ra, tôi đã tạo tệp .cscope.out.

nếu có ("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

Tôi đang dùng OS X, vì vậy một số trong số này có thể có mặc định tốt hơn trên các nền tảng khác, nhưng bất kể:

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

1
Bạn có thể muốn tìm kiếm softtabstopvà sử dụng nó thay vì tabstop. Để lại tabstopgiá trị mặc định là 8 sẽ giúp ích khi đọc các tệp mà người khác đã tạo bằng các tab.
Greg Hewgill

6
OSX phải làm gì với các tab?
aehlke

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

= là để định dạng lại các đoạn bình thường. + là để định dạng lại các đoạn văn trong các email được trích dẫn. showmatch là để flash dấu ngoặc đơn / ngoặc phù hợp khi tôi nhập dấu ngoặc đơn hoặc dấu ngoặc gần.


3

Sử dụng tệp 'tags' có sẵn đầu tiên trong cây thư mục:

:set tags=tags;/

Trái và phải là để chuyển đổi bộ đệm, không di chuyển con trỏ:

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

Vô hiệu hóa đánh dấu tìm kiếm bằng một lần nhấn phím:

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>

Tôi thích rất nhiều những gì đang diễn ra trong cấu hình của bạn. Nhiều bộ trên mỗi dòng,if has("gui_running") và bản đồ mát mẻ. Tôi đã sao chép hầu hết cấu hình của bạn vào của tôi. CẢM ƠN!
Justin Force

3

Đặt cái này trong vimrc của bạn:

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

và không bao giờ nghĩ về việc gõ một hashrocket một lần nữa. Có, tôi biết bạn không cần phải có trong Ruby 1.9. Nhưng đừng bận tâm điều đó.

Toàn bộ vimrc của tôi là ở đây .


Đây là một ý tưởng tuyệt vời, nhưng tôi khuyên bạn chỉ nên ánh xạ nó cho các tệp ruby:autocmd FileType ruby imap <C-l> <Space>=><Space>
csexton

Bạn có thể giải thích những gì nó làm cho một người Emacs không biết Ruby?
Thomas

Điều này thêm một phím nóng Control-L vào chế độ chèn của Vim để tự động nhập mã băm có dấu cách (=>). Hashrocket là toán tử khóa-giá trị của Ruby cho băm.
dpogg1

2

Vâng, bạn sẽ phải nhặt rác của tôi configs mình. Chúc vui vẻ. Chủ yếu chỉ là thiết lập mong muốn của tôi, bao gồm ánh xạ và các công cụ liên quan đến cú pháp ngẫu nhiên, cũng như thiết lập gấp và một số cấu hình plugin, trình phân tích cú pháp biên dịch tex, v.v.

BTW, một thứ tôi thấy cực kỳ hữu ích là "đánh dấu từ dưới con trỏ":

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

Lưu ý rằng chỉ ctermtermfgđược sử dụng, vì tôi không sử dụng gvim. Nếu bạn muốn nó hoạt động gvimchỉ cần thay thế chúng bằng guiguifg, tương ứng.


Làm thế nào để làm cho nó hoạt động với nhiều cửa sổ mở? Nó dường như chỉ hoạt động với chính, khởi chạy như bộ đệm đầu tiên.
ohnoes

2

Tôi đã cố gắng giữ .vimrc của mình nói chung hữu ích nhất có thể.

Một mẹo hữu ích trong đó là một trình xử lý cho các tệp .gpg để chỉnh sửa chúng một cách an toàn:

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) Tôi thích một dòng trạng thái (với tên tệp, giá trị ascii (thập phân), giá trị hex và các dòng tiêu chuẩn, cols và%):

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) Tôi cũng thích ánh xạ cho các cửa sổ chia.

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

Thực sự không có nhiều trong .vimrc của tôi (ngay cả khi nó có 850 dòng). Chủ yếu là các cài đặt và một vài ánh xạ phổ biến và đơn giản mà tôi quá lười để trích xuất thành các plugin.

Nếu bạn có nghĩa là "tệp mẫu" của "lớp tự động", thì tôi đang sử dụng plugin mở rộng mẫu - trên cùng trang web này, bạn sẽ tìm thấy các ftplugins mà tôi đã xác định để chỉnh sửa C & C ++, một số có thể được điều chỉnh theo Tôi đoán là C #

Về khía cạnh tái cấu trúc, có một mẹo dành riêng cho chủ đề này trên http://vim.wikia.com ; IIRC mã ví dụ là cho C #. Nó truyền cảm hứng cho tôi một plugin tái cấu trúc vẫn cần rất nhiều công việc (nó cần phải được cấu trúc lại thực sự).

Bạn nên xem qua kho lưu trữ của danh sách gửi thư vim, đặc biệt là các chủ đề về việc sử dụng vim như một IDE hiệu quả. Đừng quên xem qua: make, tags, ...

HTH


2

.Vimrc của tôi bao gồm (trong số những thứ khác, hữu ích hơn) dòng sau:

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

Tôi đã chán khi học cho trận chung kết cấp ba của tôi.


bạn có thể giải thích điều này không?
Vijay Dev

Nó hiển thị một dòng trạng thái với số bộ đệm, tên tệp, trạng thái sửa đổi, vị trí trong bộ đệm và mã hex của ký tự dưới con trỏ. Định dạng độc đáo và màu sắc.
Tadeusz A. Kadłubowski

1

Đây là .vimrc của tôi. Tôi sử dụng 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

Có gì trong tôi .vimrc?

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

Các tập tin cấu hình thực sự nằm dưới ~/.vim/ :)

Và hầu hết những thứ ở đó đang ký sinh vào những nỗ lực của người khác, được điều chỉnh một cách trắng trợn từ vim.orglợi thế chỉnh sửa của tôi.


2
Tôi gần như có cái này nhưng .vimrc cần chứa "set không tương thích" nếu bạn sử dụng các tính năng này phải không? Ít nhất là loại bỏ nó gây ra vô số lỗi ở đây!
richq
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.