vim:
vim有3种模式:
命令模式:
字符串查找、移动光标、删除、复制、粘贴等
输入模式:
编辑内容。
末行模式:
设置vi的使用环境(显示行号等)、查找替换、保存、退出等。
=======================================================
命令模式:
移动光标:
方向移动:方向键(上下左右)
翻页移动:PgUp、PgDn
行内的跳转:
行首:^或Home或零
行尾:$或End
下一行的行首:回车
移动光标向下n行:n回车
文件的首行:gg
文件的尾行:G
移至屏幕上端:H
移至屏幕中端:M
移至屏幕下端:L
移至当前单词的最后一个字母:e
移至下个单词的第一个字母:w
移至上个单词的第一个字母:b
移至下个句子的第一个字母:)
移至该句子的第一个字母:(
移至该段落的最后一个字母:}
移至该段落的第一个字母:{
增加:
a:追加,在当前字符后追加,进入输入模式
i:插入,在当前字符前插入,进入输入模式
o:在当前行后面插入一空白行,并进入输入模式
删除:
x:删除光标所在字符 nx删除从当前字符开始的n个字符
dd:删除光标所在行 ndd删除从当前行开始的n行
dw:删除一个单词 ndw删除从当前单词开始的n个单词
db:删除光标所在位置前的一个单词 ndb
dG:删除光标所在位置到文件最后一行的内容
d$:删除光标所在位置到本行行尾的内容
d^:删除光标所在位置到本行行首的内容
s:删除光标所在字符,并进入输入模式
S:删除光标所在行,并进入输入模式
修改:
r:修改光标所在字符,r后是要修正的字符 nr
R:进入替换状态,输入的文本会覆盖原先的内容
cc:修改整行文字。先删除当前行,再进入输入模式。跟S效果一样。
shift+~:将当前字母改成小写或大写
ctrl+a:将阿拉伯数字递增
ctrl+x:将阿拉伯数字递减
撤销:
u:撤销最近一次的操作
ctrl+R:可以恢复使用u命令的操作
重复:
.:重复最近一次的操作
复制:
yy:(yank)复制当前整行 nyy复制n行
p:粘贴(put)
nyw:赋值n个单词
yG:从当前行复制到文件尾行。
使用可视模式进行复制粘贴:
1 定位光标要复制的行
2 键入v命令,进入可视模式,使用方向键选择要复制的内容,选中的会反色
3 键入y命令,复制
4 移动光标到要粘贴的位置,键入p命令,粘贴成功
=======================================================
末行模式:
查找;
:n 把光标定位到文件的第n行
:/string 把光标定位到string所在的行,从上往下查找
:?string 把光标定位到string所在的行,从下往上查找
/string 把光标定位到string所在的单词,从上往下查找
?string 把光标定位到string所在的单词,从下往上查找
替换:
:%s/old/new/g 全文将old替换成new
:s/old/new/ 用new替换所在行首次出现的old
:s/old/new/g 用new替换所在行所有的old
:3,15 s/old/new/g 用new替换第3行到第15行中的所有old
:.,15 s/old/new/g 用new替换当前行到第15行之间的所有old
:3,$ s/old/new/g 用new替换第3行到文件结束中的所有old
:3,10 s/^/#/g 注释掉第3行到第10行之间的所有行
保存与退出:
:q! 不保存并强制退出
:wq 保存并退出
:x 保存并退出
:w 保存
:w b.txt 另存为b.txt
多窗口编辑:
:split 水平分割窗口,打开同一份文件
:split b.txt 水平分割窗口,打开新的文件
:vsplit 垂直分割窗口,打开同一份文件
:vsplit b.txt 垂直分割窗口,打开新的文件
ctrl+w+w 多窗口时,跳转窗口
执行shell命令:
:!命令 例如::!ls 则可以不退出vim执行ls命令
模式:这些都可以写在~/.vimrc文件中(若无此文件则手动创建),这样每次进入文件就不用手动设置了
:set encoding=utf-8 设置编码为utf8,文件里有中文就不会报错了。
:set nu 显示行号,nonu则取消。
:set cindent C风格的缩进。nocindent则取消。
:set expandtab tab缩进用空格来代替,noexpandtab则反之。
:set tabstop=4 表示一个tab显示出来是4个空格的长度,默认8。
:set softtabstop=4 表示在编辑模式的时候按退格键的时候退回缩进的长度,当使用expandtab时特别有用。
:set shiftwidth=4 表示每一级缩进的长度,一般设置成跟softtabstop一样。
:set autoindent 自动缩进,每行缩进与上一行相等。noautoindent则取消。
:set fileformat=unix 其他平台编写的文件拿到unix下运行可能出错,设置这个属性即可避免。
:set cursorline 高亮当前行
:syntax on 语法高亮
:set foldmethod=indent 折叠代码
:set ignorecase 搜索忽略大小写
:set ambiwidth=double 特殊符号占两个字符,防止特殊字符乱码
:filetype plugin on 允许vim加载文件类型插件。当这个选项打开时,vim会根据检测到的文件类型,在runtimepath中搜索该类型的所有插件,并执行它们。
:set nocompatible compatible为兼容vi,nocompatible为不完全兼容,如果设置为compatible,则tab将不会变成空格
:set ai ai让vi自动对齐,noai则取消。
:set hls 搜索时高亮显示被找到的文本
:set fileencodings=utf-8,ucs-bom,cp936
:set nobomb / bomb
bomb:
被称作BOM(Byte Order Mark)的不可见字符,是Unicode用来标识内部编码的排列方式的,在UTF-16、UTF-32编码里它是必需的,而在UTF-8里是可选的。因此,才会出现有的编辑器在文件头部添加添加BOM、而有的语法解析器又不作处理的的混乱情况。所谓BOM,全称是Byte Order Mark,它是一个Unicode字符,通常出现在文本的开头,用来标识字节序 (Big/Little Endian),除此以外还可以标识编码(UTF-8/16/32),如果出现在文本中间,则解释为zero width no-break space。
这个BOM可以在编辑文本时设置的,但是,只能在第一次编辑时才能设置它为bomb还是nobomb,编辑完并保存后就无法再更改编码格式了。有关bomb命令:
#添加BOM
:set bomb
#删除BOM
:set nobomb
#查询BOM
:set bomb?
Notepad++能把编码更改为无BOM的UTF-8编码格式。
:set paste 当window系统复制的内容,粘贴到linux下的文件里,发生格式错乱,则设置成粘贴模式
:set nopaste 退出粘贴模式
=======================================================
对比两个文件的不同:
vim -d filename1 filename2
自动补全:
如果上文出现过某个单词,则按ctrl+n可以实现补全功能。
多行注释:
ctrl+v 进入视图模式,方向键上下移动,把要注释的行选上
shift+i 插入字符
shift+# 把#插入到要注释的行前面(在第一行有显示)
ESC 按至少2次esc,则会把所有选中的行都在其前面加#
多行缩进:
方法1:同多行注释的方法,在第三步的时候,按4个空格即可。
方法2:(最常用)
shift+v 进入视图模式,方向键上下移动,选中多行
shift+> 向右缩进
shift+< 向左缩进
=======================================================
如果想在vim中执行python脚本,在~/.vimrc中写入:
map <F5> :call RunPython()<CR>
func! RunPython()
exec "W"
if &filetype == 'python'
exec "!time python2.7 %"
endif
endfunc
=======================================================
如果想在创建脚本时,自动写入包含文件名、作者、邮箱、创建时间等信息的文件头。
则在~/.vimrc文件末尾写入:
autocmd BufNewFile *.py,*.sh, exec ":call SetTitle()"
let $author_name = "James"
let $author_email = "James@xxx.com"
func SetTitle()
if &filetype == 'sh'
call setline(1,"\###################################################################")
call append(line("."), "\# File Name: ".expand("%"))
call append(line(".")+1, "\# Author: ".$author_name)
call append(line(".")+2, "\# Mail: ".$author_email)
call append(line(".")+3, "\# Created Time: ".strftime("%Y年%m月%d日"))
call append(line(".")+4, "\###################################################################")
call append(line(".")+5, "\#!/bin/bash")
call append(line(".")+6, "")
else
call setline(1,"\###################################################################")
call append(line("."), "\# File Name: ".expand("%"))
call append(line(".")+1, "\# Author: ".$author_name)
call append(line(".")+2, "\# Mail: ".$author_email)
call append(line(".")+3, "\# Created Time: ".strftime("%Y年%m月%d日"))
call append(line(".")+4, "\###################################################################")
call append(line(".")+5, "\#!/usr/bin/env python")
call append(line(".")+6, "")
endif
endfunc
=======================================================