Chinaunix首页 | 论坛 | 博客
  • 博客访问: 28577
  • 博文数量: 14
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 150
  • 用 户 组: 普通用户
  • 注册时间: 2011-03-27 04:53
文章分类

全部博文(14)

文章存档

2013年(14)

我的朋友

分类: LINUX

2013-08-21 10:12:44




AIX vi 常用操作 (aix v6.1命令参考大全, 卷 6: v - z.pdf)


AIX操作系统有详细的操作手册: 


:!man vi 


vi Editing Modes


The vi editor operates in the following modes:


command mode
     When you start the vi editor, it is in command mode. You can enter any subcommand except those designated
     for use only in the text input mode. The vi editor returns to command mode when subcommands and other
     modes end. Press the Esc key to cancel a subcommand.


text-input mode
     You use the vi editor in this mode to add text. Enter text input mode with any of the following
     subcommands: the a subcommand, A subcommand, i subcommand, I subcommand, o subcommand, O subcommand, cx
     subcommands (where the x represents the scope of the subcommand), C subcommand, s subcommand, S
     subcommand, and R subcommand. After entering one of these subcommands, you can enter text into the editing
     buffer. To return to command mode, press the Esc key for normal exit or press Interrupt (the Ctrl-C key
     sequence) to end abnormally.


last-line mode
     Subcommands with the prefix : (colon), / (slash), ? (question mark), ! (exclamation point), or !! (two
     exclamation points) read input on a line displayed at the bottom of the screen. When you enter the initial
     character, the vi editor places the cursor at the bottom of the screen, where you enter the remaining
     characters of the command. Press the Enter key to run the subcommand, or press Interrupt (the Ctrl-C key
     sequence) to cancel it. When the !! prefix is used, the cursor moves only after both exclamation points
     are entered. When you use the : prefix to enter the last-line mode, the vi editor gives special meaning to
     the following characters when they are used before commands that specify counts:
              
       %       All lines regardless of cursor position
       
       $       Last line
       
       .       Current line


     Note: The history of last line mode subcommands can be navigated using the Up and Down Arrow keys.






:help tutor   查看vim教程
:help 关键字  查看命令帮助信息






text-input mode 输入模式


i  在游标左方进入输入模式
I  在游标所在行的首行进入输入模式
a  在游标右方进入输入模式
A  在游标所在行的行尾进入输入模式
o  在游标下一行另起新行, 并进入输入模式
O  在游标上一行另起新行, 并进入输入模式




a  在当前光标后追加
A  在行末追加 


o  在当前行下打开一行 
O  在当前行上插入一行 


r     替换当前光标处字符
R     从光标处开始替换 
rx    用 x 指定的字符替换当前字符
RText 用 Text 参数指定的文本覆盖字符


s     替代字符
S     替代行
数字s 替换指定数量字符 


J  联接两行


~  转换字母大小写
<< 字符左移
>> 字符右移


撤消 重复


.  重复前一个操作. 


u  撤消前一个操作. (undo)


U  撤消该行之前的所有修改操作. 


ctrl + r  重做 redo (撤消u的反操作) 重绘屏幕并消除以 @ (位于符号)标记的空行




K  函式查詢. 
   若您在 VIM 中写 C/C++ 代码, 可以在 C/C++ 标准函数库提供的函数名字上按"K", 
   便可以呼叫出 man page 查詢该函数的用法. 


=  自动程式缩排对齐. 
   若您在 VIM 中写 C/C++ 代码, 可以利用"gg"指令将游标移到视窗最上方, 利用"v"切换到选取模式, 
   再用"G"将游标移到档案尾端 (即达到全选的功能), 最后按"=", VIM 便会帮你的程式做自动对齐.








移动游标


k  向上移动游标一个字元, 也就是方向键的"↑" 相同功能键: -
j  向下移动游标一个字元, 也就是方向键的"↓" 相同功能键: + 
h  向左移动游标一个字元, 也就是方向键的"←"
l  向右移动游标一个字元, 也就是方向键的"→"


H  将游标移至屏幕顶端
M  将游标移至屏幕中央
L  将游标移至屏幕底端


:0     将光标移至文件首 
:$     将光标移至文件尾
:数字  将光标移至文档 第 n 行. 如输入 :45 即移到文档第 45 行


数字G  将光标移至文档 第 n 行. 如输入 45G 即移到文档第 45 行
数字   将光标处下移 n 行. 如: 输入 5 即在光标处向下移动 5 行
数字+  将光标处下移 n 行. 如: 输入 5+ 即在光标处向下移动 5 行
数字-  将光标处上移 n 行. 如: 输入 5- 即在光标处向上移动 5 行


数字|  将光标移到指定列. 如: 25| 移动到当前行的第25列 






gg  将游标移至档案第一行
G   将游标移至档案最后一行


gj  跨行移动光标
gk  跨行移动光标


^   移动游标至该行第一个非空白字母
0   移动游标至行首 
$   移动游标至行尾


b   移动游标至上一个单词的第一个字母.
e   移动游标至该单词的最后一个字母.
w   移动游标至下一个单词的第一个字母.




guu     行小写
gUU     行大写
ggguG   将全文中的大写转换成小写
g~~     行翻转(指字母大小写)
ga      在状态栏显示光标处字母的10 16 8进制的值
ggVGgq  重新格式化整个文章








卷动视窗 组合键 统计功能


+f  将视窗向下卷动一页
+b  将视窗向上卷动一页
+d  将视窗往下卷动一半 功能类似键盘中的
+u  将视窗往上卷动一半 功能类似键盘中的
+e  向前滚动一行 光标位置保持不变
+y  向后滚动一行 光标位置保持不变




+g  统计行数, 显示光标所在位置. 


+l  清除和重绘屏幕
+r  重做(撤消u的反操作) 重绘屏幕并消除以 @ (位于符号)标记的空行


+?  中断一条子命令








搜索文字 查找字符




%  查找对应括号 


/字串  向下搜寻字串 n 跳到下一个"字串"所在地
                    N 跳到上一个"字串"所在地


另外, 把游标停在想要搜寻的字串上, 按下 "*" 也可以达到向下搜寻的效果. 


?字串  向上搜寻字串 n 跳到上一个"字串"所在地
                    N 跳到下一个"字串"所在地


另外, 把游标停在想要搜寻的字串上, 按下"#"也可以达到向上搜寻的效果. 




行内搜索 (仅在当前行执行搜索, 命令中的 x 可以为任何字符)


fx  从光标所在处向后查找字符 x, 并把光标移动到字符 x 上
Fx  从光标所在处向前查找字符 x, 并把光标移动到字符 x 上
tx  从光标所在处向后查找字符 x, 并把光标移动到 x 前一个字符上
Tx  从光标开始处向前查找字符 x, 并把光标移动到 x 后一个字符上
;   在同一个方向重复执行前一个行内搜索命令
,   在相反方向重复执行前一个行内搜索命令






复制文字


yy  将该行文字复制, 与指令 Y 有相同的功能.


复制某一行中的3个字符


3yl  复制光标后的   
3yh  复制光标前的   l 和 h是用来指明方向




p   将所剪切或复制的文字粘贴光标处的下一行. 




删除文字 剪切文字 


x     删除光标处字符 
xp    交换两个字符位置


dd    将该行文字删除(或剪切) 此项指令可与指令 p (粘贴)配合使用
d^    删除光标处到该行首不为空的第一个字符. 
d0    删除光标前半行
d$    删除光标后半行 
dw    删除(或剪切)该单词
dn    删除当前光标下的n行
dG    删除当前光标到文件尾
ddp   上下两行调换




删除列: 


:%s/\%1c...//   删除前3列
:%s/^...//


%s/.*\%20c//g   删除前20列的字符






删除一个文件的1-1000行的前3列


gg            到文件首
ctrl+v        可视块模式 (window: ctrl+q)
1000j,2l      注意是小写的j和l (方向键向下和向右也可以)
d             删除










C   剪切或更改行的剩余部分 (同 c$ 一样)
cc  剪切该行文字. 当输入此指令時, 游标所在该行会被剪切, 并自动进入"输入模式"
cw  剪切该单词. 当输入此指令時, 该单词在游标之后的字元会被剪切, 并自动进入"输入模式"
D   将游标所在该行中右边的所有文字全部删除(剪切)








command mode 命令模式


q:           命令行与命令历史的窗口
q/           命令行与搜索命令历史的窗口




gg=G         自动格式化代码








last-line mode 执行命令模式


:            命令行与历史命令记录的窗口


:history     查看命令历史
:history /


:nohlsearch  取消搜索后的单词高亮




宏录制命令 (注: 记录键盘上的所有操作.)


qq   录制命令放入q寄存器 (q为寄存器名)
..   输入命令集 (如: x dd / :%s/,/./g)
q    录制结束 
@q   执行放入寄存器q中的内容
@@   重复执行寄存器q中的内容
5@@  重复5次




列出寄存器


:reg    显示当前所有的寄存器
:reg a  显示寄存器a中的内容
qqq     清空寄存器 "q"










last-line mode 复制 插入 移动 删除  替换


搜索替换命令
--------------------------------------------------------------------------------
g  全局搜索   用于开头, 代表搜索所有行, 用于末尾, 代表搜索整行. 


s  替代命令   如果出现在命令行中, 应与其他命令用"/"隔开. 


p  显示命令   显示命令的结果.  


c  提问命令   对要替代的内容用符号"^"提示, 若按下"y"才发生替换, 否则不替换. 


v  不匹配命令


&  重复最后的:s命令


注: 被搜索替代的字符串两边要加斜线"/". 如果不使用全局命令"g", 则只对第一个
    找到的字符串起作用. 命令前面也可以加地址范围的选择. 
--------------------------------------------------------------------------------






复制


:3,4 copy 5  把3-4行拷贝到第5行


插入


:r date.txt  在当前光标处插入指定文本内容
:r !Command  将命令输出的结果插入到光标下面


移动


:1,4 move 7  将1-4行移动到第7行






删除


:6,8 del     删除6-8行
:3,$ d       删除第3至文件尾的所有行




替换


:g/被替代的字串/s//新字串/g    用"新字串"取代"被替代的字串"


:g/str/s/str1/str2/g           第一个g表示对每一个包括s1的行都进行替换
                               第二个g表示对每一行的所有进行替换 
                               包括str的行所有的str1都用str2替换 




:%s/A/B/g    %s  表示全部取代, 如果想只取代一部分, 可以設置行数. 
                 如 
                    :14,16 s/www/ggg/g   
                    :14,16s/ggg/ooo/
        
             A/B 表示用B替换A
             /g  表示全局替换, 不需要提示.


:%s/。/. /g | %s/,/, /g  两条替换命令一起工作, 但是要两条命令都执行成功, 否则失败. 


:1,$ s/string1/string2/g  全文件查找string1并替换为string2
:1,$ s/$/maal/            给每行的末尾加上"maal" 1表示第一行, $表示最后一行   


:. s/req/kkk/g            将当前行的"req"替换为"kkk"


:s/p1/p2/g        将当前行中所有p1均用p2替代 
:n1,n2 s/p1/p2/g  将第n1至n2行中所有p1均用p2替代 


:g/p1/s//p2/g     将文件中所有p1均用p2替换 


:s/oldtext/newtext      用newtext替换oldtext
:m,n s/oldtext/newtext  在m行通过n, 用newtext替换oldtext


:g/text1/s/text2/text3  查找包含text1的行, 用text3替换text2
:g/aaaa/>>              在所有包含"aaaa"的行运行命令">>"右移字符串


:v/aaaa/>>              在所有不包含"aaaa"的行运行命令">>"右移字符串
:v/maal/d   只保留匹配内容行而删除其他行


:s/abc/xyz/        用xyz替换当前行找到的第一个abc
:s/ab/x/g          用x替换当前行所有的ab


:3,7s/this/THIS/   第3行到第7行中第一个"this"都用"THIS"替代. 


:3,7s/this/THIS/g  第3行到第7行中所有的"this"都用"THIS"替代. 


:1,$s/this/THIS/g  第一行到最后一行(全文)中所有的"this"都用"THIS"替代. 




:g/22/s//456/      每行找到的第一个字符串"22"都用字符串"456"替换
                          
:g/22/s//456/g     全文找到的所有字符串"22"都用串"456"替换, 第一个"g"代表"每行", 第二个"g"代表一行中的全部. 


:g/^/s//abc/g      在文件每一行开头插入abc, "^"代表行首. 


:g/this/p          显示所有含"this"的行
:v/this/p          显示所有不含"this"的行
:g!/this/p         显示所有不含"this"的行
:g/this/s//THIS/gp 全文所有"this"都用"THIS"替代, 并且显示发生替代的行. 




:%s= *$==          将所有行尾多余的空格删除


:%s/\s\+$//g       删除行尾空格


:%s/^M$//g                  去掉行尾的^M
:%s/^M//g                   去掉所有的^M
:%s/^M/[ctrl-v]+[enter]/g   将^M替换成回车
:%s/^M/\r/g                 将^M替换成回车


注意: 这里的"^M"要使用"CTRL-V CTRL-M" + [enter] 生成, 而不是直接键入"^M"




:g/^\s*$/d         删除所有空行, 包括含空格的行
:g/^[ |\t]*$/d     删除以空格或tab开头到结尾的空行




:set expandtab     使用空格替换所有tab键
:%retab or :retab




:source F:\scriptfile.vim  执行一个vim脚本


:source $VIMRUNTIME/syntax/sql.vim  加载语法高亮文件
:source $VIMRUNTIME/syntax/sh.vim   


:set filetype=sql 设置语法高亮 (语法高亮文件: $VIMRUNTIME/indent)




重复匹配:


pattern         match count
/{,4}           0, 1, 2, 3 or 4
/{3,}           3, 4, 5, etc.
/{0,1}          0 or 1, same as /=
/{0,}           0 or more, same as *
/{1,}           1 or more, same as /+
/{3}            3






匹配


/\     完全匹配查找 acnchor 单词  \转义字符


/Normal\|Warn   匹配两个单词 Normal Warn 






输入shell命令


:sh               进入shell以便能运行多条命令. 通过按+d按键顺序可以返回到vi编辑器. 
                  如果正在ex编辑器中使用这条子命令, 则不需要 :(冒号) . 


:!Command         运行指定的命令然后返回到vi编辑器. 
                  如果正在ex编辑器中使用这条子命令, 则不需要 :(冒号) . 
                  注:
                  当跟着 :! 子命令时, #(备用文件)  %(当前文件)  和 ! (前面的命令) 特殊字符都会扩展. 
                  要避免这些字符中的任意字符被扩展, 可使用 \ (反斜杠). 


:!!               重复最近一次的 :!Command 子命令


Number !!Command  运行指定的命令并用命令输出替代由 Number 指定的行. 
                  如果没有指定数目, 则缺省值是 1. 如果命令需要标准输入, 则指定的行用作输入. 


!Object Command  运行指定命令, 并用命令输出替代由 Object 参数指定的对象. 
                  如果命令需要标准输入, 则指定的对象用作输入. 










保存/退出文件


:q   不保存修改而退出 VI. 若是沒有对文件做任何修改, 使用 :q 即可跳出, 
     但若修改過文件內容则必須使用 :q! 指令才能成功地不保存离开. 
:q!  不储存修改地离开 VI.
:w   保存当前所编辑的文件.
:w 文件名  将当前所编辑的文件另存至新的"文件名称"
:wq  保存当前所编辑的文件, 并离开 VI. 
:x   保存当前所编辑的文件, 并离开 VI. 功能与 :wq 相同. 
ZZ   保存当前修改并退出VI. 




vim标记功能


在vim设置标记, 目的就是为了快速定位, 提高效率. 


1. 标记命令mark
   在vim命令行模式下用 help mark 查看mark命令的帮助手册


2. 标记符
  在文本中使用 26 个标记符(a到z). 这些标记是不可见的, 只是一个由 vim 记住的位置. 


3. 设置标记
  在普通模式下命令格式 m [a-z]
  例如: ma 在光标所在位置设置一个标记


4. 跳转到标记
  命令格式:  `标记符 
  `不是单引号, 此命令可跳转到标记所在行列位置. 
  移到标记a的命令是: 
        `a


  命令格式: '标记符
  '是单引号, 此命令只移到标记所在行的行首. 
  移到标记a所在行首的命令是: 
        'a
5. 查看以设定标记
  命令行模式下
  :marks
  你可以用如下命令取得所有的标记的列表, vim自己会记录的一写标记也会列出. 
        
6. vim自动设置的的一些标记
  '       跳转前的位置 
  "       最后编辑的位置 
  [       最后修改的位置的开头 
  ]       最后修改的位置的结尾


7. 删除标记
  命令: delmarks 标记名










vim启动设置: 


在windows下设置gvim启动后将窗口最大化, 在vim启动脚本加入: 


autocmd GUIEnter * simalt ~x


or


if has('gui_running') && has("win32")
  au GUIEnter * simalt ~x
endif




vim设置窗大小: 


:set lines=28
:set columns=130
:set lines=28 columns=130 
:winsize 130 28


vim设置启动位置


:winpos 235 235


vim分割窗口:


:split   水平分割窗口
:vsplit  垂直分割窗口




标签窗口操作: 


:tabnew [++opt选项] [+cmd] filename  在新的标签窗口中打开指定文件
:tabclose        关闭当前的标签窗口
:tabonly         关闭所有其他的标签窗口
:tabprevious     前一个标签窗口
:tabnext         后一个标签窗口
:tabfirst        转到第一个标签窗口
:tablast         转到最后一个标签窗口


标准模式下:


gt   后一个标签窗口
gT   前一个标签窗口








vim设置字体/游标/高亮颜色


:hi 显示默认颜色的设置(vim) 


设置CursorLine(高亮当前行)颜色 


Window Gvim:


:hi CursorLine term=underline cterm=underline guibg=Grey20


Redhat command vim: 


set cursorline
hi CursorLine  cterm=NONE ctermbg=DarkGreen ctermfg=white
hi CursorColumn cterm=NONE ctermbg=darkred ctermfg=white
















set命令  ex命令状态(在输入模式下按 ":" 就会出现ex命令状态)


若想要让VIM在每次启动时, 都能夠自动载入用户的设定, 可以在用户主目录下, 建立一个$HOME/.vimrc的文件来
存放个人VIM的设定.


:set <== 查看当前的set设定


ignorecase redraw showmode term=vt100


:set all <== 查看所有set的可选项


autoindent <== 自动缩排
autoprint
background <== 设定keyword字体颜色模式
               使用[:set background=dark]  指令可以让VIM中的keyword以较亮眼的颜色表现出來, 
                                           适用于暗色系的背景. 
               使用[:set background=light] 指令可以让VIM中的keyword以较暗沉的颜色表现出來, 
                                           适用于亮色系的背景.


cursorline       高亮显示当前行 (vim)


nocursorline     关闭当前行高亮


cursorcolumn     打开当前列高亮


nocursorcolumn   关闭当前列高亮




guifont=fixedsys:h12  设置字体及字符大小


guifont=Lucida_Console:h11:b
             字体名称:大小:粗体  






closepunct='".,;)]}
directory=/var/tmp
flash


guioptions=mrb <== vim打开水平滚动栏, 右侧垂直滚动栏. (注: 要先用:set nowrap取消自动换行.)


hardtabs=8




history=32


hlsearch <== 高亮搜索结果, 所有结果都高亮显示, 而不是只显示一个匹配.


ignorecase <== 忽略字母大小写


lines=28 columns=130 <== 窗口默认行列数(vim)


linelimit=1048560 <== 缺省能编辑的最大文件不能超过1048560行. 
                      如果需要编辑更大的文件, 用-y参数可以指定行数, 
                      如 vi -y 2000000


magic
mesg






noautoindent <== 关闭自动缩排功能
noautowrite


nobackup        不备份文件
nowritebackup   不写备份文件
noswapfile      禁止产生swap文件


dir=D:\vim\tmp         设置swap文件的目录
backupdir=D:\vim\bak   设置备份文件的目录


nobeautify
nocursorline <== 取消高亮当前行(vim)
noedcompatible
noerrorbells
noexrc
nohlsearch <== 关闭高亮搜索显示
nolisp
nolist
nomodeline
number <== 显示行数
nonumber <== 隐藏行数
nonovice
nooptimize
noshowmatch
noslowopen
noterse
nowrap <== 取消自动换行
paragraphs=IPLPPPQPP LIpplpipbp
partialcharacter=-
prompt
noreadonly
redraw
remap
report=5
scroll=12
sections=NHSHH HUuhsh+c
shell=/usr/bin/ksh
shiftwidth=8
showmode <== 显示状态信息. 如:  INPUT MODE    REPLACE 1 CHARACTER
tabstop=8 <== TAB键宽度
taglength=0
tags=tags /usr/lib/tags
backtag
term=vt100
timeout
ttytype=vt100
warn
window=24
winpos 0 0 <== 窗口位置(vim)
wrapscan
wrapmargin=0
nowriteany
wraptype=word


















Vim中高亮显示当前行


Vim 的官方站点Tips栏里, 找到一小段还不错的设置脚本, #263. 


Tip #263: color active line


created:    June 18, 2002 7:05                       complexity:     basic
author:     Armin Rehm (rehm.armin@schwenk.de)        as of Vim:     6.0


该tip作者推荐使用他提供的方法二, 我试用后发现方法二最为直接有效, 因此只对其加以解释. 方法一请见原文. 


开启该高亮功能:


1 :highlight CurrentLine guibg=darkgrey guifg=white  (or whatever colors you want)
2 :au! Cursorhold * exe 'match CurrentLine /\%' . line('.') . 'l.*/'
3 :set ut=100


关闭该高亮功能, 注意执行的顺序:


1 :au! Cursorhold
2 :match none




注意以上是在Ex command下逐条输入, 如果要使 Vim 运行后即启动此项功能, 必须将
这三行加到vimrc(windows下即_vimrc)文件中, 开头的三个":"应去掉. 


说明: 


该方法使用"match"来高亮显示一个字符串, 但并不会干扰当前搜索匹配. 


match的用法在Ex下简单用法为:


match highlight-group-name string-match-some-pattern, 


如: match ErrorMsg "This" 会把文件里的"This"字符串都显示成红底白字


行1: 定义一个highlight group(此处用法为: hi[ghlight] [default] {group-name} {key}={arg} ..), 
     名为CurrentLine, 设定高亮文本背景色(guibg)和前景色(guifg), 此处可自行设定高亮颜色. 


行2: 一有Cursorhold事件(:h Cursorhold查看详细解释, 注意该事件在插入模式下不发生, 
     故这个tip在插入模式无法工作:(), 
     便在Ex command里执行(exe)'match CurrentLine /\%' . line('.') . 'l.*/'
     CurrentLine 是行1定义的 highlight group;
     第二个参数指定要高亮的字符串, 先:h /\%l看看/\%{line-number}l的用法, 
     而line('.')则是取得光标所在行的行号, .*即该行的所有字符(包括控制符). 


行3: ut即updatetime, 单位ms, 表示经多少ms不按键盘即表明Cursorhold发生. 








Vim可以通过 :set nu[mber] 显示行号, 但并不是在文本里实际插入行号, 而有
时又有这方面的需求, 如把代码片段插入网页, 要求有行号, 如何解决呢? 见#65. 


Tip #65: Insert line number into the actuall text of the file.


created:    April 5, 2001 16:59                      complexity:     basic
author:     Devin Weaver        as of Vim:     5.7


:set number虽然可以在 Vim 中显示漂亮的行号, 不过并不会在文件中加入行号. 
在GNU Linux中可以借助cat -n file > new_file达此目的, 那么 Vim 如何做到这点呢? 


:g/^/exec "s/^/".strpart(line(".")."    ", 0, 4)


说明: :[range]g[lobal]/{pattern}/[cmd]可知, 此处pattern为/^/, 即全部文本;cmd为exec命令, 
其后部分都是exec的内容, :[range]s[ubstitute]/{pattern}/{string}/[&][c][e][g][p][r][i][I] [count]可知, 
pattern为/^/, 即每行文本的起始处;string为strpart(line(".")."    ", 0, 4)函数返回值. 


line(".")."    "返回当前行的行号, 再加上4个空格, 假定一具体值"123    "(双引号内的部分);
strpart("123    ", 0, 4)返回前四个字符("123 "), "s/^/123 "即把每行开头部分替换成"123 ". 


Vim 6中更简便的写法: :%s/^/\=strpart(line('.')."    ", 0, 4), :h \=查看细节. 


Visual模式下写法: :s/^/\=strpart((line('.')-line("'<")+1)."   ", 0, 4), 
其中line("'<")即Visual模式下, 被选中文本首行的(在原文本中)行号. 










阅读(258) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~