Wednesday, December 22, 2010

Commands in CMD.EXE

- appwiz.cpl – Dùng để mở cửa sổ Add/Remove Programs.
- calc – Sử dụng máy tính.
- charmap – Bảng các ký tự font chữ.
- chkdsk – Kiểm tra hệ thống và chỉnh sửa các file lỗi.
- cleanmgr – Dọn dẹp ổ đĩa.
- clipbrd – Hiển thị Clipboard của Windows.
- cmd – Lời gọi DOS.
- control mouse – Hiển thị bảng điều chỉnh thuộc tính chuột.
- control – Hiển thị Control Panel.
- debug – Tiện ích dùng cho lập trình viên hợp ngữ ( Assembly )
- defrag – Tiện ích chống phân mảnh ổ đĩa.
- drwatson – Lưu lại thông tin các chương trình lỗi.
- dxdiag – Hiển thị cấu hình hệ thống.
- explorer – Hiển thị Windows Explorer.
- fsmgmt.msc – Dùng để mở Share Folders (Folder trực thuộc My Documents )
- firewall.cpl – Dùng để thiết lập Firewall cho Windows.
- hdwwiz.cpl – Dùng để chạy chương trình thiết lập Hardware.
- Ipconfig – Hiển thị IP được thiết lập cho các kết nối.
- logoff – Dùng để logoff máy tính.
- MMC – Microft Management Cosole – Hiển thị bảng quản ly điều khiển.
- msconfig – Thiết lập để chỉnh sửa file khởi động cùng hệ thống.
- mstsc – Dùng để quản ly’ điều khiển máy tính trong hệ thống.
- msinfo32 – Hiển thị thông tin hệ thống.
- netstat – Hiển thị tất cả các tình trạng kết nối.
- osk – Hiển thị bàn phím ảo.
- perfmon.msc – Dùng để thiết lập hiệu suất màn hình.
- ping – Nhận thông tin từ host/IP được chỉ rõ.
- powercfg.cpl – Thiết lập tùy chọn tắt mở máy.
- regedit – Chỉnh sửa các Registry.
- sfc /scannow – Kiểm tra file hệ thống.
- sndrec32 - Ghi âm.
- shutdown – Dùng để shutdown Windows.
- spider – Dùng để mở game Solitaire ( có sẵn trong máy )
- sndvol32 – Điều chỉnh âm lượng.
- sysedit – Chỉnh sửa khởi động hệ thống.
- taskmgr – Mở cửa sổ Task Manager.
- telephon.cpl – Dùng để thiết lập tùy chọn modem.
- telnet – Mở cửa sổ Telnet.
-tracert – Hiển thị các kết nối đến với một host.
- winchat – Dùng để chat với Microsoft.
- wmplayer – Dùng để chạy chương trình Windows Media Player.
wab – Dùng để mở sở địa chỉ của Windows.
- winword – Mở Microsoft Word.
- winver – Dùng để kiểm tra phiên bản của Windows.
wupdmgr – Kiểm tra quá trình nâng cấp Windows (dành cho các máy sử dụng Win có bản quyền)
- write – Dùng để mở wordpad.

Wednesday, October 27, 2010

Useful web links and tools
Tet holiday:,
DD-WRT is a Linux based alternative OpenSource firmware suitable for a great variety of WLAN routers and embedded systems.

SEO tools, search engine tools and webmaster tools

notes for later

Simple real-time sharing is a simple and free web application that lets you brainstorm online

Access, backup and share
online photo editor

Store logins to all online accounts

PrintWhatYouLike is a free online editor that lets you format any web page for printing in seconds!

System Spec- Portable System Information Utility Let me Google that for you

Password Management

Label: Tet, holiday, Lunar new yeat

Friday, September 10, 2010

10 Linux distros

Sabayon/Gentoo (Live CD)
Arch Linux (Slackware)
Puppy Linux

Labels: Ubuntu, Fedora, Mint, openSUSE, PCLinuxOS, Debian, Mandriva, Sabayon Gentoo Live CD, Arch Linux, Slackware, Puppy Linux

Makefile setup

make --include-dir=../src clean

Labels: make, make clean, Makefile

Tuesday, May 18, 2010

Wednesday, May 12, 2010

Colorize unix shell prompt

Color Prompts

BASH shell:
alias ll='/opt/sfw/bin/ls -althp --color=auto'


alias toolbox='toolbox-MSC_R-14 &'
alias goplex='cd /home/xviengu/workspace/doPLEX/'
alias goperl='cd /home/xviengu/workspace/doPERL/'
alias gos37='ssh'
alias gos74='ssh'

alias pm=''
alias pb=''
alias csrv=''
alias cpf=''

#alias ana=''
#alias gen=''
#alias com=''
#alias pb=''

if [ $CLEARCASE_ROOT ]; then
    export PS1='\e[0;31m[\u@\e[1;32m\h \e[0;36m`basename $CLEARCASE_ROOT` \e[0;35m${PWD#${PWD%/*/*/*}/}]\\$ \e[m';
    export PS1='\e[0;31m[\u@\e[1;32m\h \e[0;35m${PWD#${PWD%/*/*/*}/}]\\$ \e[m';


alias vim='/home/xviengu/bin/vim'
alias ctags='/home/xviengu/bin/ctags'
alias cscope='/home/xviengu/bin/cscope'


export CSCOPE_DB

export VPATH

Tuesday, May 11, 2010

Monday, May 10, 2010

Autologin with ssh key

Login auto
./instkey.bash dekt1 xviengu
ssh dekt1

SSH Without a Password

The following steps can be used to ssh from one system to another without specifying a password.


  • The system from which the ssh session is started via the ssh command is the client.
  • The system that the ssh session connects to is the server.
  • These steps seem to work on systems running OpenSSH.
  • The steps assume that a DSA key is being used. To use a RSA key substitute 'rsa' for 'dsa'.
  • The steps assume that you are using a Bourne-like shell (sh, ksh or bash)
  • Some of this information came from:


  1. On the client run the following commands:
    $ mkdir -p $HOME/.ssh
    $ chmod 0700 $HOME/.ssh
    $ ssh-keygen -t dsa -f $HOME/.ssh/id_dsa -P ''
    This should result in two files, $HOME/.ssh/id_dsa (private key) and $HOME/.ssh/ (public key).
  2. Copy $HOME/.ssh/ to the server.
  3. On the server run the following commands:
    $ cat >> $HOME/.ssh/authorized_keys2
    $ chmod 0600 $HOME/.ssh/authorized_keys2
    Depending on the version of OpenSSH the following commands may also be required:
    $ cat >> $HOME/.ssh/authorized_keys
    $ chmod 0600 $HOME/.ssh/authorized_keys
    An alternative is to create a link from authorized_keys2 to authorized_keys:
    $ cd $HOME/.ssh && ln -s authorized_keys2 authorized_keys
  4. On the client test the results by ssh'ing to the server:
    $ ssh -i $HOME/.ssh/id_dsa server
  5. (Optional) Add the following $HOME/.ssh/config on the client:
    Host server
             IdentityFile ~/.ssh/id_dsa
    This allows ssh access to the server without having to specify the path to the id_dsa file as an argument to ssh each time.

Testing environment

How virtualization will improve your code

Friday, May 7, 2010

vim with ctags



augroup vimrc
  au BufReadPre * setlocal foldmethod=indent
  au BufWinEnter * if &fdm == 'indent' | setlocal foldmethod=manual | endif
augroup END

Color scheme
:colorscheme koehler

" An example for a vimrc file.
" Maintainer:   Bram Moolenaar
" Last change:  2008 Jul 02
" To use it, copy it to
"     for Unix and OS/2:  ~/.vimrc
"             for Amiga:  s:.vimrc
"  for MS-DOS and Win32:  $VIM\_vimrc
"           for OpenVMS:  sys$login:.vimrc

:set wrap                                                 " Text wrapping
:set number                                             " Line numbering
:set mouse=a                                           " Mouse active
:set tabstop=3                                         " Tab as 4 spaces
:set expandtab                                         " All tabs are spaces
":set autoindent                                         " automatically indenting your code in structures like loops and procedures.
:set shiftwidth=4                                      " select a block of code and change its indentation level
:set shiftround                                          " indent/outdent to nearest tabstops
syntax on
set noswapfile
set nobackup
:set noai
:setlocal noautoindent
:setlocal nocindent
:setlocal nosmartindent

filetype plugin on

let Tlist_Ctags_Cmd = "/home/xviengu/bin/ctags"
let Tlist_WinWidth = 50
map :TlistToggle
:nnoremap :setl noai nocin nosi inde=

":set tags=~/vobs/HW/Project/tags
:set tags=./tags,tags,~/vobs/HW/Project/tags

" show matching brackets
autocmd FileType perl set showmatch

let perl_fold=1
let perl_fold_blocks=1

" Note, perl automatically sets foldmethod in the syntax file
autocmd Syntax c,cpp,cxx,vim,xml,html,xhtml setlocal foldmethod=syntax
autocmd Syntax c,cpp,cxx,vim,xml,html,xhtml,perl normal zR

" When started as "evim", evim.vim will already have done these settings.
if v:progname =~? "evim"

" Use Vim settings, rather then Vi settings (much better!).
" This must be first, because it changes other options as a side effect.
set nocompatible

" allow backspacing over everything in insert mode
set backspace=indent,eol,start

if has("vms")
  set nobackup          " do not keep a backup file, use versions instead
  set backup            " keep a backup file
set history=50          " keep 50 lines of command line history
set ruler               " show the cursor position all the time
set showcmd             " display incomplete commands
set incsearch           " do incremental searching

" For Win32 GUI: remove 't' flag from 'guioptions': no tearoff menu entries
" let &guioptions = substitute(&guioptions, "t", "", "g")

" Don't use Ex mode, use Q for formatting
map Q gq

" CTRL-U in insert mode deletes a lot.  Use CTRL-G u to first break undo,
" so that you can undo CTRL-U after inserting a line break.
inoremap u

" In many terminal emulators the mouse works just fine, thus enable it.
if has('mouse')
  set mouse=a

" Switch syntax highlighting on, when the terminal has colors
" Also switch on highlighting the last used search pattern.
if &t_Co > 2 || has("gui_running")
  syntax on
  set hlsearch

" Only do this part when compiled with support for autocommands.
if has("autocmd")

  " Enable file type detection.
  " Use the default filetype settings, so that mail gets 'tw' set to 72,
  " 'cindent' is on in C files, etc.
  " Also load indent files, to automatically do language-dependent indenting.
  filetype plugin indent on

  " Put these in an autocmd group, so that we can delete them easily.
  augroup vimrcEx

  " For all text files set 'textwidth' to 78 characters.
  autocmd FileType text setlocal textwidth=78

  " When editing a file, always jump to the last known cursor position.
  " Don't do it when the position is invalid or when inside an event handler
  " (happens when dropping a file on gvim).
  " Also don't do it when the mark is in the first line, that is the default
  " position when opening a file.
  autocmd BufReadPost *
    \ if line("'\"") > 1 && line("'\"") <= line("$") |
    \   exe "normal! g`\"" |
    \ endif

  augroup END


  set autoindent                " always set autoindenting on

endif " has("autocmd")

" Convenient command to see the difference between the current buffer and the
" file it was loaded from, thus the changes you made.
" Only define it when not defined already.
if !exists(":DiffOrig")
  command DiffOrig vert new | set bt=nofile | r # | 0d_ | diffthis
                  \ | wincmd p | diffthis


ctags -R *

ctrl ]  ===> jump from function call to function definition
ctrl t  ===> go back
ctrl i and ctrl o ===> travel to forward and backward of the check points

refers the curses.h which is located at /usr/include/ by using symbolic link
ln -s /usr/include/curses.h curses.h

and run ctags -R * again

ref more, more (perl tag, sh tag)

ref vim, ctags more

How should I set up tag files for a multi-level directory hierarchy?

Taglist: Source Code Browser

Vim cmd: ctags, tags file, Moving through a program...

Thursday, May 6, 2010

Bash shell configuration

alias ll='/opt/sfw/bin/ls -alt --color=auto'

export PS1='\e[0;31m[\u@\e[0;34m\h \e[0;36m`basename $CLEARCASE_ROOT` \e[0;35m${PWD#${PWD%/*/*/*}/}]\\$ \e[m';

more PS1

Wednesday, May 5, 2010

Vim for developers

set nobackup       #no backup files
set nowritebackup  #only in case you don't want a backup file while editing
set noswapfile     #no swap files

good for ref::

To turn off autoindent when you paste code, there's a special "paste" mode.
:set paste
Then paste your code. Note that the text in the tooltip now says -- INSERT (paste) --.
After you pasted your code, turn off the paste-mode, so that auto-indenting when you type works correctly again.
:set nopaste
Put the following in your vimrc (change to whatever key you want):
set pastetoggle=

Using VIM which terminal type is dtterm
syntax enable
"colorscheme darkblue
"colorscheme morning
colorscheme desert                 <<<<< good

Make sure ~/.vim/colors has desert.vim

show full path: press 1 then Ctrl + g


set title
set laststatus=2
"""""""set statusline+=%F
set statusline+=%f

General Startup
 To use vi: vi filename
 To exit vi and save changes: ZZ   or  :wq
 To exit vi without saving changes: :q!
 To enter vi command mode: [esc]

        A number preceding any vi command tells vi to repeat
 that command that many times.

Cursor Movement

 h       move left (backspace)

 j       move down

 k       move up

 l       move right (spacebar)

 [return]   move to the beginning of the next line

 $       last column on the current line

 0       move cursor to the first column on the 
  current line

 ^       move cursor to first nonblank column on the
  current line

 w       move to the beginning of the next word or 
  punctuation mark

 W       move past the next space

 b       move to the beginning of the previous word 
  or punctuation mark

 B       move to the beginning of the previous word,
  ignores punctuation

        e       end of next word or punctuation mark

        E       end of next word, ignoring punctuation

        H       move cursor to the top of the screen 

        M       move cursor to the middle of the screen

        L       move cursor to the bottom of the screen 

Screen Movement

       G        move to the last line in the file

       xG       move to line x

       z+       move current line to top of screen

       z        move current line to the middle of screen

       z-       move current line to the bottom of screen

       ^F       move forward one screen

       ^B       move backward one line

       ^D       move forward one half screen

       ^U       move backward one half screen

       ^R       redraw screen 
  ( does not work with VT100 type terminals )

       ^L       redraw screen 
  ( does not work with Televideo terminals )


       r        replace character under cursor with next 
  character typed

       R        keep replacing character until [esc] is hit

       i        insert before cursor

       a        append after cursor

       A        append at end of line

       O        open line above cursor and enter append mode


 x       delete character under cursor

 dd      delete line under cursor

        dw      delete word under cursor

        db      delete word before cursor

Copying Code

        yy      (yank)'copies' line which may then be put by
  the p(put) command. Precede with a count for
  multiple lines.

Put Command
        brings back previous deletion or yank of lines,
 words, or characters

        P       bring back before cursor

        p       bring back after cursor

 Find Commands

 ?       finds a word going backwards

 /       finds a word going forwards

        f       finds a character on the line under the
  cursor going forward

        F       finds a character on the line under the
  cursor going backwards

        t       find a character on the current line going
  forward and stop one character before it

 T       find a character on the current line going
  backward and stop one character before it

 ; repeat last f, F, t, T

Miscellaneous Commands

 . repeat last command

 u undoes last command issued

 U undoes all commands on one line

 xp deletes first character and inserts after
  second (swap)

 J join current line with the next line

 ^G display current line number

 % if at one parenthesis, will jump to its mate

 mx mark current line with character x

 'x find line marked with character x

 NOTE: Marks are internal and not written to the file.

Line Editor Mode
 Any commands form the line editor ex can be issued 
 upon entering line mode.

 To enter: type ':'

 To exit: press[return] or [esc]

ex Commands
 For a complete list consult the 
 UNIX Programmer's Manual

 copies (reads) filename after cursor in file 
 currently editing

 :r filename


 :w  saves the current file without quitting


 :# move to line #

 :$ move to last line of file

 executes 'cmd' as a shell command.


Vim for Perl developers

Vim tutorial

      1 "set cursorline
      3 nnoremap QQ :q!
      4 nnoremap :set invpaste paste?
      5 set pastetoggle=F3
      6 set showmode
      8 " enable the plugin for Vim editor.
      9 filetype plugin on
      1 " Sets how many lines of history VIM has to remember
      2 set history=1700
      4 " line number
      5 set number
      7 " Set to auto read when a file is changed from the outside
      8 set autoread
     10 "Always show current position
     11 set ruler
     13 " Configure backspace so it acts as it should act
     14 set backspace=eol,start,indent
     15 set whichwrap+=<,>,h,l
     17 " Highlight search results
     18 set hlsearch
     20 " Makes search act like search in modern browsers
     21 set incsearch
     23 " Show matching brackets when text indicator is over them
     24 set showmatch
     25 " How many tenths of a second to blink when matching brackets
     26 set mat=2
     28 " Enable syntax highlighting
     29 syntax enable
     31 " Turn backup off, since most stuff is in SVN, git et.c anyway...
     32 set nobackup
     33 set nowb
     34 set noswapfile
     36 " Use spaces instead of tabs
     37 set expandtab
     39 " Be smart when using tabs ;)
     40 set smarttab
     42 " 1 tab == 3 spaces
     43 set shiftwidth=3
     44 set tabstop=3
     46 " Always show the status line
     47 set laststatus=2
     46 " Always show the status line
     47 set laststatus=2
     49 " Format the status line
     50 " set statusline=\ %{HasPaste()}%F%m%r%h\ %w\ \ CWD:\ %r%{getcwd()}%h\ \ \ Line:\ %1

     61 " Taglist variables
     62 " Display function name in status bar:
     63 let g:ctags_statusline=1
     64 " Automatically start script
     65 let generate_tags=1
     66 " Displays taglist results in a vertical window:
     67 let Tlist_Use_Horiz_Window=0
     68 " Shorter commands to toggle Taglist display
     69 nnoremap TT :TlistToggle
     70 map :TlistToggle
     71 " Various Taglist diplay config:
     72 let Tlist_Use_Right_Window = 0
     73 let Tlist_Compact_Format = 1
     74 let Tlist_Exit_OnlyWindow = 1
     75 let Tlist_GainFocus_On_ToggleOpen = 1
     76 let Tlist_File_Fold_Auto_Close = 1

Sample .vimrc:

:set wrap " Text wrapping

:set number " Line numbering
:set mouse=a " Mouse active
:set tabstop=4 " Tab as 4 spaces
:set expandtab " All tabs are spaces
:set autoindent " automatically indenting your code in structures like loops and procedures.
:set shiftwidth=4 " select a block of code and change it’s indentation level
:set shiftround " indent/outdent to nearest tabstops
syntax on

hi LineNr ctermfg=darkcyan
hi LineNr ctermfg=darkred

set noswapfile

set nobackup

" show matching brackets
autocmd FileType perl set showmatch
"set foldmethod=marker
"nmap 0v/{%zf

let perl_fold=1
let perl_fold_blocks=1

Example .vimrc


A collection of .vimrc files

Update VIM plugin

cscope for vim:
cscope for large project: Using Cscope on large projects

Cursor movement

  • h - move left
  • j - move down
  • k - move up
  • l - move right
  • w - jump by start of words (punctuation considered words)
  • W - jump by words (spaces separate words)
  • e - jump to end of words (punctuation considered words)
  • E - jump to end of words (no punctuation)
  • b - jump backward by words (punctuation considered words)
  • B - jump backward by words (no punctuation)
  • 0 - (zero) start of line
  • ^ - first non-blank character of line
  • $ - end of line
  • G - Go To command (prefix with number - 5G goes to line 5)
Note: Prefix a cursor movement command with a number to repeat it. For example, 4j moves down 4 lines.


Insert Mode - Inserting/Appending text

  • i - start insert mode at cursor
  • I - insert at the beginning of the line
  • a - append after the cursor
  • A - append at the end of the line
  • o - open (append) blank line below current line (no need to press return)
  • O - open blank line above current line
  • ea - append at end of word
  • Esc - exit insert mode


  • r - replace a single character (does not use insert mode)
  • J - join line below to the current one
  • cc - change (replace) an entire line
  • cw - change (replace) to the end of word
  • c$ - change (replace) to the end of line
  • s - delete character at cursor and subsitute text
  • S - delete line at cursor and substitute text (same as cc)
  • xp - transpose two letters (delete and paste, technically)
  • u - undo
  • . - repeat last command

Marking text (visual mode)

  • v - start visual mode, mark lines, then do command (such as y-yank)
  • V - start Linewise visual mode
  • o - move to other end of marked area
  • Ctrl+v - start visual block mode
  • O - move to Other corner of block
  • aw - mark a word
  • ab - a () block (with braces)
  • aB - a {} block (with brackets)
  • ib - inner () block
  • iB - inner {} block
  • Esc - exit visual mode

Visual commands

  • > - shift right
  • < - shift left
  • y - yank (copy) marked text
  • d - delete marked text
  • ~ - switch case

Cut and Paste

  • yy - yank (copy) a line
  • 2yy - yank 2 lines
  • yw - yank word
  • y$ - yank to end of line
  • p - put (paste) the clipboard after cursor
  • P - put (paste) before cursor
  • dd - delete (cut) a line
  • dw - delete (cut) the current word
  • x - delete (cut) current character


  • :w - write (save) the file, but don't exit
  • :wq - write (save) and quit
  • :q - quit (fails if anything has changed)
  • :q! - quit and throw away changes


  • /pattern - search for pattern
  • ?pattern - search backward for pattern
  • n - repeat search in same direction
  • N - repeat search in opposite direction
  • :%s/old/new/g - replace all old with new throughout file
  • :%s/old/new/gc - replace all old with new throughout file with confirmations

Working with multiple files

  • :e filename - Edit a file in a new buffer
  • :bnext (or :bn) - go to next buffer
  • :bprev (of :bp) - go to previous buffer
  • :bd - delete a buffer (close a file)
  • :sp filename - Open a file in a new buffer and split window
  • ctrl+ws - Split windows
  • ctrl+ww - switch between windows
  • ctrl+wq - Quit a window
  • ctrl+wv - Split windows vertically

" Maintainer: 
"       Amir Salihefendic
" -
" Version: 
"       5.0 - 29/05/12 15:43:36
" Blog_post: 
" Awesome_version:
"       Get this config, nice color schemes and lots of plugins!
"       Install the awesome version from:
" Syntax_highlighted:
" Raw_version: 
" Sections:
"    -> General
"    -> VIM user interface
"    -> Colors and Fonts
"    -> Files and backups
"    -> Text, tab and indent related
"    -> Visual mode related
"    -> Moving around, tabs and buffers
"    -> Status line
"    -> Editing mappings
"    -> vimgrep searching and cope displaying
"    -> Spell checking
"    -> Misc
"    -> Helper functions

" => General
" Sets how many lines of history VIM has to remember
set history=700

" Enable filetype plugins
filetype plugin on
filetype indent on

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

" With a map leader it's possible to do extra key combinations
" like w saves the current file
let mapleader = ","
let g:mapleader = ","

" Fast saving
nmap <leader>w :w!<cr>

" => VIM user interface
" Set 7 lines to the cursor - when moving vertically using j/k
set so=7

" Turn on the WiLd menu
set wildmenu

" Ignore compiled files
set wildignore=*.o,*~,*.pyc

"Always show current position
set ruler

" Height of the command bar
set cmdheight=2

" A buffer becomes hidden when it is abandoned
set hid

" Configure backspace so it acts as it should act
set backspace=eol,start,indent
set whichwrap+=<,>,h,l

" Ignore case when searching
set ignorecase

" When searching try to be smart about cases 
set smartcase

" Highlight search results
set hlsearch

" Makes search act like search in modern browsers
set incsearch

" Don't redraw while executing macros (good performance config)
set lazyredraw

" For regular expressions turn magic on
set magic

" Show matching brackets when text indicator is over them
set showmatch
" How many tenths of a second to blink when matching brackets
set mat=2

" No annoying sound on errors
set noerrorbells
set novisualbell
set t_vb=
set tm=500

" => Colors and Fonts
" Enable syntax highlighting
syntax enable

colorscheme desert
set background=dark

" Set extra options when running in GUI mode
if has("gui_running")
    set guioptions-=T
    set guioptions+=e
    set t_Co=256
    set guitablabel=%M\ %t

" Set utf8 as standard encoding and en_US as the standard language
set encoding=utf8

" Use Unix as the standard file type
set ffs=unix,dos,mac

" => Files, backups and undo
" Turn backup off, since most stuff is in SVN, git et.c anyway...
set nobackup
set nowb
set noswapfile

" => Text, tab and indent related
" Use spaces instead of tabs
set expandtab

" Be smart when using tabs ;)
set smarttab

" 1 tab == 4 spaces
set shiftwidth=4
set tabstop=4

" Linebreak on 500 characters
set lbr
set tw=500

set ai "Auto indent
set si "Smart indent
set wrap "Wrap lines

" => Visual mode related
" Visual mode pressing * or # searches for the current selection
" Super useful! From an idea by Michael Naumann
vnoremap <silent> * :call VisualSelection('f')<CR>
vnoremap <silent> # :call VisualSelection('b')<CR>

" => Moving around, tabs, windows and buffers
" Treat long lines as break lines (useful when moving around in them)
map j gj
map k gk

" Map  to / (search) and Ctrl- to ? (backwards search)
map <space> /
map <c-space> ?

" Disable highlight when  is pressed
map <silent> <leader><cr> :noh<cr>

" Smart way to move between windows
map <C-j> <C-W>j
map <C-k> <C-W>k
map <C-h> <C-W>h
map <C-l> <C-W>l

" Close the current buffer
map <leader>bd :Bclose<cr>

" Close all the buffers
map <leader>ba :1,1000 bd!<cr>

" Useful mappings for managing tabs
map <leader>tn :tabnew<cr>
map <leader>to :tabonly<cr>
map <leader>tc :tabclose<cr>
map <leader>tm :tabmove

" Opens a new tab with the current buffer's path
" Super useful when editing files in the same directory
map <leader>te :tabedit <c-r>=expand("%:p:h")<cr>/

" Switch CWD to the directory of the open buffer
map <leader>cd :cd %:p:h<cr>:pwd<cr>

" Specify the behavior when switching between buffers 
  set switchbuf=useopen,usetab,newtab
  set stal=2

" Return to last edit position when opening files (You want this!)
autocmd BufReadPost *
     \ if line("'\"") > 0 && line("'\"") <= line("$") |
     \   exe "normal! g`\"" |
     \ endif
" Remember info about open buffers on close
set viminfo^=%

" => Status line
" Always show the status line
set laststatus=2

" Format the status line
set statusline=\ %{HasPaste()}%F%m%r%h\ %w\ \ CWD:\ %r%{getcwd()}%h\ \ \ Line:\ %l

" => Editing mappings
" Remap VIM 0 to first non-blank character
map 0 ^

" Move a line of text using ALT+[jk] or Comamnd+[jk] on mac
nmap <M-j> mz:m+<cr>`z
nmap <M-k> mz:m-2<cr>`z
vmap <M-j> :m'>+<cr>`mzgv`yo`z
vmap <M-k> :m'<-2 class="Special" span="span" style="color: #e0c060;"><
cr>`>my`if has("mac") || has("macunix") nmap <D-j> <M-j> nmap <D-k> <M-k> vmap <D-j> <M-j> vmap <D-k> <M-k> endif " Delete trailing white space on save, useful for Python and CoffeeScript ;) func! DeleteTrailingWS() exe "normal mz" %s/\s\+$//ge exe "normal `z" endfunc autocmd BufWrite *.py :call DeleteTrailingWS() autocmd BufWrite *.coffee :call DeleteTrailingWS() """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => vimgrep searching and cope displaying """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " When you press gv you vimgrep after the selected text vnoremap <silent> gv :call VisualSelection('gv')<CR> " Open vimgrep and put the cursor in the right position map <leader>g :vimgrep // **/*.<left><left><left><left><left><left><left> " Vimgreps in the current file map <leader><space> :vimgrep // <C-R>%<C-A><right><right><right><right><right><right><right><right><right> " When you press r you can search and replace the selected text vnoremap <silent> <leader>r :call VisualSelection('replace')<CR> " Do :help cope if you are unsure what cope is. It's super useful! " " When you search with vimgrep, display your results in cope by doing: " cc " " To go to the next search result do: " n " " To go to the previous search results do: " p " map <leader>cc :botright cope<cr> map <leader>co ggVGy:tabnew<cr>:set syntax=qf<cr>pgg map <leader>n :cn<cr> map <leader>p :cp<cr> """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Spell checking """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Pressing ,ss will toggle and untoggle spell checking map <leader>ss :setlocal spell!<cr> " Shortcuts using map <leader>sn ]s map <leader>sp [s map <leader>sa zg map <leader>s? z= """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Misc """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " Remove the Windows ^M - when the encodings gets messed up noremap <Leader>m mmHmt:%s/<C-V><cr>//ge<cr>'tzt'm " Quickly open a buffer for scripbble map <leader>q :e ~/buffer<cr> " Toggle paste mode on and off map <leader>pp :setlocal paste!<cr> """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " => Helper functions """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" function! CmdLine(str) exe "menu Foo.Bar :" . a:str emenu Foo.Bar unmenu Foo endfunction function! VisualSelection(direction) range let l:saved_reg = @" execute "normal! vgvy" let l:pattern = escape(@", '\\/.*$^~[]') let l:pattern = substitute(l:pattern, "\n$", "", "") if a:direction == 'b' execute "normal ?" . l:pattern . "^M" elseif a:direction == 'gv' call CmdLine("vimgrep " . '/'. l:pattern . '/' . ' **/*.') elseif a:direction == 'replace' call CmdLine("%s" . '/'. l:pattern . '/') elseif a:direction == 'f' execute "normal /" . l:pattern . "^M" endif let @/ = l:pattern let @" = l:saved_reg endfunction " Returns true if paste mode is enabled function! HasPaste() if &paste return 'PASTE MODE ' en return '' endfunction " Don't close window, when deleting a buffer command! Bclose call <SID>BufcloseCloseIt() function! BufcloseCloseIt() let l:currentBufNum = bufnr("%") let l:alternateBufNum = bufnr("#") if buflisted(l:alternateBufNum) buffer # else bnext endif if bufnr("%") == l:currentBufNum new endif if buflisted(l:currentBufNum) execute("bdelete! ".l:currentBufNum) endif endfunction