vimfiles
文件大小: unknow
源码售价: 5 个金币 积分规则     积分充值
资源说明:my vim config
# vim configuration

this repository contains configurations for linux,mac and windows

## Plugin Management

I use [vim-plug](https://github.com/junegunn/vim-plug) to install plugins and keep them up to date.
Before I used Vundle but found that I could bring down my startup time 25% by loading some plugins
lazy. Merely switching to vim-plug without any lazy loading already gave a 10% boost.

The drawback is that it requires +ruby (Neovim works out-of-the-box).

## needed 3rd party tools

* fzf (will be installed automatically)
* rust

    curl https://sh.rustup.rs -sSf | sh
    rustup component add rust-src

* ripgrep

    cargo install ripgrep

* clang++

    sudo apt install clang

### ruby

make sure ruby is installed (here I'm using rbenv and ruby-build):

* rbenv

    git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
    echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
    echo 'eval "$(rbenv init -)"' >> ~/.bashrc
    . ~/.bashrc

If you've installed rbenv manually using git, you can upgrade your installation to the cutting-edge version at any time.

    $ cd ~/.rbenv
    $ git pull

* ruby-build

On Ubuntu ruby has some prerequisites:

    sudo apt-get install libc6-dev libssl-dev libmysql++-dev libsqlite3-dev make build-essential
    sudo apt-get install libffi-dev libreadline6-dev zlib1g-dev libyaml-dev

    git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
    rbenv install 2.2.0
    rbenv rehash
    rbenv global 2.2.0

## Now clone the vim config

first clone the git repo:

    git clone https://github.com/marcmo/vimfiles.git ~/.config/nvim

alternatively over ssh:

    git clone git@github.com:marcmo/vimfiles.git ~/.config/nvim

the `init.vim` file will work per default for linux systems, for MacOS change it to:

    source $HOME/.config/nvim/_vimrc_universal
    source $HOME/.config/nvim/_vimrc_mac

Install the awesome plug plugin-manager:

    curl -fLo ~/.config/nvim/autoload/plug.vim --create-dirs \
      https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim

to setup vim with all plugins: start vim and install plugins using

    :PlugInstall


enable Python3 interface with pip

    sudo pip3 install neovim

enable remote plugins for neovim

    :UpdateRemotePlugins

# Trouble Shooting

## neovim python interface

make sure the python plugin is up to date for both pip2 and pip3

    pip2 show neovim
    pip3 show neovim

has to be the same. Upgrade with:

    sudo pip2 install neovim --upgrade
    sudo pip3 install neovim --upgrade

# VIM cheatsheet

## Recently added

### count occurrences of pattern

    :%s/pattern//gn

### delete all lines with 2 consecutive repeated words

    g/\v(^[a-zA-Z_\/0-9]+),\1/d

# From vimgolf

## challenge 51459ef6b94aa50002000002

### registers

    ":	Contains the most recent executed command-line.  Example: Use
      "@:" to repeat the previous command-line command.

    "= (Expression register)
    It inserts the result from an expression
    e.g. evaluate math expression:
      * in insert mode: =pow(4,2)/3
      * in normal mode: "=pow(4,2)/3p


### add comma to end of each line

    :'<,'>norm A,

### copy last command to clipboard

    let @*=@:

### copy last search to clipboard

    let @*=@/

### copy all lines + the 2 following that match a pattern

this will first clear the register a, append every line containing
the pattern + the folling 2 lines into register a

    :let @a=""
    :g/pattern/y A 3

## Window Commands

    Ctrl-W t     -- makes the first (topleft) window current
    Ctrl-W K     -- moves the current window to full-width at the very top
    Ctrl-W H     -- moves the current window to full-height at far left

### switch from vertical split to horizontal split fast

    Ctrl-W t Ctrl-W H   -- horizonal split -> vertical split
    Ctrl-W t Ctrl-W K   -- vertical split -> horizonal split

### movement

    g_                  -- move to the last non-blank character of the current line

### hex value

    ga                  -- display hex,ascii value of char under cursor

### Normal

* The :normal command takes a set of characters and performs whatever action they would do if they were typed in normal mode
* normal! doesn't recognize "special characters" like 

    :normal >>          -- Vim will indent the current line.

### Execute

The execute takes a string and performs it as a command. Run this:

    :execute "write"    -- Vim will write your file, just as if you had typed :write

## making list of numbers

### insert a list of ascending numbers

    :put =range(11,13)      -- inserts 3 lines after the current line:

will result in:

    11
    12
    13

### with a for loop

    :for i in range(1,3) | put ='192.168.0.'.i | endfor
    192.168.0.1
    192.168.0.2
    192.168.0.3

### Substitute with ascending numbers

    :let i=1 | g/abc/s//\='xyz_'.i/ | let i=i+1
    -- replaces abc's with xyz_1,xyz_2,...

## Vim Regex (regular expressions)

\v or very magic (usually) reduces backslashing

### span newlines in regex: use \_. instead of .

    :\vstart\_.+end     -- will select multiple lines from [start] to [end]

### use ruby regex for string replacement

    :rubydo gsub /pattern/,'replacement'  -- Equivalent to s/pattern/replacement/g (also works on visual selections):

### convert decimal numbers to hex

    :%s/\d\+/\=printf("0x%04x", submatch(0))/gc

### repeat command-line

    @:      -- repeat last : command (then @@)

### When replacing:

    & is the text that matches the search pattern
    \& is ampersand
    \r is newline
    \n is a null byte (0x00).
    \1 inserts the text of the 1. backreference a.s.o.

### delete all whitespaces up to next word

    dw

### paste in visual mode

block has to be selected visually

    I               -- put cursor at the start of the first row of the block
    A               -- put cursor at the end of the first row of the block
    Ctrl-R + [Reg]  -- puts the content of [Register] at cursor position
    Esc             -- propagates the paste to all lines of visual selection

### Copy content of registers

    :let @+=@"  -- will copy the content of the '"'-register to the global '+'-register

### Using normal-mode motions in command-line mode

    Ctrl-F  -- open command-line window when in Vim command-line
     -- will run the command
    Ctrl-C  -- return to standard command-line

###  append to a named register use it's corresponding upper case character

    "ayy  -- yank line to register a
    "Ayy  -- yank line and append to reg a
    "ap

### replace/substitute in visual selection

    :s/\%Vred/blue/g

### replace/substitute using magic regular expression extension

    :%s/\v"(\S*)"/*|\1|*/g      --  replace all strings in quotes

### GOTO Column

    80| -- go to the 80th column

### move cursor beyond end of line

    set virtualedit=all

### Save a file you edited in vim without the needed permissions (e.g. readonly file) (force write)

    :w !sudo tee %

### display vim runtime information

    :mess     -- display recent error messages of vim
    :reg      -- display contents of all registers

### go to previous/next edited file/position

    Ctrl-o
    Ctrl-i

### display lines that do not contain a pattern

    /\v^(.*Warning)@!.*$      -- will find all lines that do not include Warning

### remove ^M from windows file

    :s%/^V^M//g -- i.e. Ctrl-V,Ctrl-m

### node.js for jslint

    curl -L http://github.com/strager/node-jslint/tarball/master | tar xz --strip 1 -C .
    npm install .

in vimrc:

    augroup js
        set makeprg=jslint\ %
        set efm=%f:%l:%c:%m
    augroup END

add config file for jslint: ~/.jslint

    {
      "predef":   [
          "exports",
          "global",
          "process",
          "require",
          "__filename",
          "__dirname",
          "module"
      ],
      "browser" : false,
      "devel" : false,
      "rhino" : false,
      "es5" : false,
      "widget": false,
      "windows" : false,
      "onvar" : true
    }
### convert to match the current tab settings

    :retab

### display key mapping/binding

    :map          -- normal, visual, select and operator pending mode
    :map!         -- insert and command-line mode.
    :nmap         -- normal mode maps
    :imap         -- insert mode maps
    :vmap         -- visual and select mode maps
    :smap         -- select mode maps
    :xmap         -- visual mode maps
    :cmap         -- command-line mode maps
    :omap         -- operator pending mode maps

### edit previous file

    CTRL-6 or :e#

#### when the plugin is a git repo:

    cd ~/.vim && mkdir ~/.vim/bundle
    git submodule add http://github.com/tpope/vim-fugitive.git bundle/fugitive
    git add .
    git commit -m "Install Fugitive.vim bundle as a submodule."

### setting up vim in new environment:

    git clone git://github.com/marcmo/vimfiles.git ~/.vim
    ln -s ~/.vim/_vimrc_universal ~/.vimrc
    ln -s ~/.vim/gvimrc ~/.gvimrc
    cd ~/.vim

#### install plugins via vundle (in vim)

    :BundleInstall

### use vim from irb

  * in irb, enter: vi + Enter
  * to store file: :w myfile.rb
  * to continue irb with a file: vi 'myfile.rb' + Enter

### command line window

    q/            -- show history of search patterns
    q:            -- show history of commands
    C-f           -- switch to command line window while in command line mode

### ctags

    C-T           -- ctags, jump back from the definition
    :tn           -- next
    :tp           -- previous

### run vim without plugins

    vim -u "NONE" hugefile.log


# Other useful things

## surround plugin

    csw'          -- surround word with '
    yssb or yss)  -- wrap the entire line in parentheses
    cs"'          -- change from "xyz" to 'xyz'
    cs'        -- change from 'xyz' to xyz
    cst'          -- change from xyz to 'xyz'

## external filters

    :%!xargs -L1 cmd -- execute cmd for several lines (from http://stackoverflow.com/questions/6762531/execute-command-for-several-lines-in-vim)
    :'<,'>w !sh     -- execute visual selection as shell command
    :!rake -T       -- show all rakefile targets
    :%!filter       -- put whole file through filter  (e.g. :%!sort)
    :!filter        -- put (visual) selection through filter   (for reversing lines looks like this: '<,'>!tac )
    :,!command      -- replace current line with command output
    :read !command  -- insert command output in next line
    !!sh        -- execute line (e.g. "date") in shell and replace with result: (equivalent to :r!date)
    map  :w:!python %   -- run current file with external program
    :%!nl

## capture output in register (e.g. :history)

    :redir @a       -- redirect output of a command to register
    :set all        -- command that has some output
    :redir END

## vi as command line editor:

* in e.g. .bashrc: set -o vi
* on command line: esc to normal mode, v drops into vi

## undo/redo

    u                       -- Undo the last action.
    U                       -- Undo all the latest changes that were made to the current line
    Ctrl + r                -- Redo
    'g+' and 'g-'           -- go "back in time"
    ':earlier' and ':later' -- take a time descriptor like 7m or 1h
    :undo n                 -- jump to specific nodes in the tree using
                            -- (n is a number of an action, all actions are numbered sequentially as you do them.)
    :undolist               -- look up the number of the actions on the leaves of the undo tree via.
                            -- This will let you jump between branches easily.
                            -- You can then use u and Ctrl-R to move up and down that branch.

## search and replace

    :%s/,/\r/g            -- replace "," with newlines (nice!)
    :g/pattern/p          -- print all lines that contain "pattern".
    :g/pattern            -- is equivalent.
    :v/pattern/d          -- filter text: delete all lines that do not contain a pattern, e.g. use with regex mode \v: :v/\v\s(cpp|h)/d
    :%s/foo/a/g      -- Replace each occurrence of 'foo' with the contents of register 'a'. (useful if the register contains many lines of text)
    :%s/foo/\=@a/g        -- Replace each occurrence of 'foo' with the contents of register 'a'. (useful if the register contains many lines of text)
    :%s//bar/g            -- Replace each match of the last search pattern with 'bar'.
    /\(yes\|no\)          -- regex OR operator, finds yes or no
    :g/gladiolli/#        -- display with line numbers (YOU WANT THIS!)
    :vmap // y/" -- search for visually highlighted text
    /fred\_s*joe/         -- multiline search (any whitespace including newline)
    :%s/search/replace/gc -- When you run this search, Vim will give you a prompt that looks something like this: replace with foo (y/n/a/q/l/^E/^Y)?
    '*'                   -- searches forward for the next occurrence of the word under the cursor ('#' does the same backwards
    n                     -- search again with the last search string
    N                     -- search backwards with the last search string

    [I                    -- show lines matching word under cursor  (super)

## Misc

    :Bonly      -- close all buffers but the current one (BufOnly plugin)
    [I          -- show lines matching word under cursor  (super)
    :set list   -- display invisible characters (:set list!  will "unset" the option)
    d/while     -- delete everything from cursor position to the next occurence of "while"
    gf          -- open file name under cursor (SUPER)
    ~           -- changes case of current letter
    :cd %:h     -- change to the dir of the current file

## insert mode commands

     and    -- change indent level (increment/decrement)
            -- word completion in insert mode
    q            -- display contents of register q (insert mode)
                 -- delete previous word

## works only on command line:

          -- pull word under the cursor into a command line or search
          -- pull WORD under the cursor into a command line or search
     -         -- pull small register
     [0-9a-z]  -- pull named registers
     %         -- pull file name (also #)

## entering/leaving ex-mode:

    Q       -- enter 'ex'
    visual  -- leave 'ex'

## ex commands:

    delete  d   -- Delete lines
    move    m   -- Move lines
    copy    co  -- Copy lines
    :3,18d                    -- Delete lines 3 through 18.
    :160,224m23               -- Move lines 160 through 244 to follow line 23. (Like delete and put in vi.)
    :23,29co100               -- Copy lines 23 through 29 and put after line 100. (Like yank and put in vi.)
    :1,100w newfile           -- copy lines 1 through 100 to a new file
    :/pattern/d               -- Delete the next line containing pattern.
    :/pattern1/,/pattern2/d   -- Delete from the first line containing pattern1 through the first line containing pattern2.
    :.,/pattern/m23           -- Take text from current line (.) through the first line containing pattern and put after line 23.

## quickfixes:

    ccl       -- close quickfix window
    cc[nr]    -- jump to error nr
    cn        -- jump to next error
    cp        -- jump to previous error
    cw        -- open quickfix window with current error list

## vimdiff

    vim -d file1 file2        : vimdiff (compare differences)
    :vert diffsplit other.txt  -- view diff to other file
    :diffthis                 -- use diff on current buffer
    :diffoff                  -- turn diff off on current buffer
    :diffoff!                 -- turn diff off on all buffers
    dp                        -- "put" difference under cursor to other file
    do                        -- "get" difference under cursor from other file
    ]c                        -- jump to next difference
    [c                        -- jump to prev. difference
    :windo diffthis           -- diff for all open windows

### complex diff parts of same file *N*

    :1,2yank a | 7,8yank b
    :tabedit | put a | vnew | put b

## Recording macros

    qq      -- record to register 'q' your complex series of commands
    q       -- end recording
    @q      -- execute
    @@      -- Repeat
    5@@     -- Repeat 5 times

## recreate past state

    gv   -- reselect last visual area (ultra)
    gi   -- go to last edited location and enter insert mode
    '.   -- jump to last modification line (SUPER)
    `.   -- jump to exact spot in last modification line
    g;   -- cycle thru recent changes (oldest first)
    g,   -- reverse direction

## numbers

    ,         -- increment,decrement number under cursor
    =4*5           -- insert 25 into text (mini-calculator)

## movement

    gg      -- Goto start of file
    G       -- Goto end of file
    :54     -- Goto line 54
    Ctrl-E  -- scroll up, 'e'xtra lines
    Ctrl-Y  -- scroll down
    Ctrl-D  -- scroll window down
    Ctrl-U  -- scroll window up
    Ctrl-B  -- move one screen 'b'ackward
    Ctrl-F  -- move one screen 'f'orward
    %       -- Goto matching #if #else,{},(),[],/* */
    'f' + any character -- find its next occurrence in the line
    'H', 'M' and 'L'    -- take the cursor directly to the 'H'ighest, 'M'iddle, or 'L'ower line on the screen
    'zt', 'zz' and 'zb' -- keep the cursor at the current position, but scroll the view so that it falls at the 't'op, 'z' center, or 'b'ottom of the screen

### change word till

    ctu  -- change word up to character 'u' (Change To 'u')

## completion

    C-p, C-x C-p        -- Autocompletion
              -- word completion in insert mode
              -- Line complete SUPER USEFUL
              -- insert name of a file in current directory
    'q:' or ':' -- gives the command history window

## file stuff

    :sp or :vsp for vertical split    -- open new view on same file
    vim -p fred.php joe.php           -- open files in tabs

## buffers

    ctrl+w ctrl+w     -- jump to other buffer

## haskell

    execute ghci:
    :set makeprg=ghci\ %
    :make

### haskellmode

    :make                 -- load into GHCi, show errors (|quickfix| |:copen|)
    _ct                   -- create |tags| file
    CTRL-]                -- jump to definition
    CTRL-W_CTRL_]         -- open definition in split window
    :copen                -- open error browser
    :cclose               -- close error browser
    :GHCi take 5 [1..]    -- evaluates expression in ghci

## using terminal e.g.

    :!term ghci Main.hs   -- prerequisite: provide term script that opens terminal!

## editing

    ZZ          -- save and quit
    yiw         -- copy current word
    viw         -- select current word
    D           -- (Delete up to end of line. )(short for "d$")
    d0          -- delete to beginning of line
    dk          -- delete current line and line above
    dj          -- delete current line and line below
    diw         -- delete word under the cursor (excluding white space)
    daw         -- delete word under the cursor (including white space)
    dG          -- delete u or change command.
    'o'         -- to create a new line below, 'O' to enter one above
    '>>' '<<'   -- shift line right/left
    >           -- indent section  useful with Shift+v%
    <           -- unindent section  remember . to repeat and u to undo
    di>         -- to extract everything within  or di" for "hello"
                'i'         -- to any of them for the 'inside' contents, or
                'a'         -- to include the delimiting characters too.
    '>aB' or '>iB'  -- ("indent a Block")
    yyp         -- duplicate current line

## Joining Lines

    J     -- Join Lines to One. Ex J,3J
    gJ    -- Join Lines without Spaces

## spellchecking

    :set spell  -- enter spell checker, after :set spelllang=en_GB.UTF-8 (mapped to F4)
    ]s          -- " next spelling error after the cursor
    [s          -- " jump backwards
    z=          -- " over a misspelled word you'll be presented with a list of suggested spellings
    zg          -- " add it to your personal dictionary
    zw          -- " add it to the bad word list with

## Replacing Charcter

    r (Replace Charater Under Cursour. Ex. ru,5ra,3r )
    R

## marks

    ma    -- to set mark 'a'
    'a    -- to jump to this mark
    `a	  -- jump to position (line and column) of mark a

## folding

    zf#j        -- creates a fold from the cursor down # lines.
    zf/string   -- creates a fold from the cursor to string .
    zj          -- moves the cursor to the next fold.
    zk          -- moves the cursor to the previous fold.
    zo          -- opens a fold at the cursor.
    zO          -- opens all folds at the cursor.
    zm          -- increases the foldlevel by one.
    zM          -- closes all open folds.
    zr          -- decreases the foldlevel by one.
    zR          -- decreases the foldlevel to zero -- all folds will be open.
    zd          -- deletes the fold at the cursor.
    zE          -- deletes all folds.
    [z          -- move to start of open fold.
    ]z          -- move to end of open fold.

本源码包内暂不包含可直接显示的源代码文件,请下载源码包。