免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1124 | 回复: 0
打印 上一主题 下一主题

vimrc 之 vim script 学习 和 "visual" [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-16 22:03 |只看该作者 |倒序浏览

                                                因为原作者写了一个函数,我发现要看懂这个函数,就需要接触一下vim script。
以下是我对vim script基本语法的总结,
1.
简单的一个vim计算脚本
let i = 1
while i 可以用 execute 来执行一个表达式的结果:
:execute "tag " . tag_name (如果tag_name是get_cmd,则执行:tag get_cmd)
2>也可以用 normal 来执行普通模式的命令,比如我想的这个无聊的命令:
:normal 11ggy13ggGp (先到11行,复制到13行,跳到最后一行,粘贴复制内容)
所以这里可以连用execute 和 normal
比如说跑到最后一行写入I love you:
:execute "normal GoI love you \"
7.
函数
1>函数用:call 来调用
2>写自己的函数(下面的例子可以看出语法来):
  function Min(num1, num2)
    if a:num1  如果要重定义一个已经存在的函数,用
:function! Min(num1, num2, num3)
8.
函数范围
在函数调用命令:call前加一个表示行范围的参数,如果是像这样调用的,会有两种情况:
1>如果函数定义时有 range 关键字,表示会自动处理。
    如:1, 10call function() 这时,
        a:firstline 会赋值为 1 ,a:lastline会赋值为10。且调用一次。
2>如果没有 range,则光标移动到范围内的每一行,对该行调用此函数。比如上面,则会调用10次。
原文
""""""""""""""""""""""""""""""
" Visual
""""""""""""""""""""""""""""""
" From an idea by Michael Naumann
" @" 是未命名的寄存器
function! VisualSearch(direction) range
  let l:saved_reg = @"
  execute "normal! vgvy"
  let l:pattern = escape(@", '\\/.*$^~[]') " escape函数是系统定义的函数,用于在第一个参数,用转义字符 \ 替换第二个参数中的字符
  let l:pattern = substitute(l:pattern, "\n$", "", "") " substitute函数是系统定义函数,这里把\n都替换成了空。
  if a:direction == 'b'
    " 运行普通模式的向前搜索命令,但这里最后结尾却用^M,作者系统不是linux?
    execute "normal ?" . l:pattern . "^M"        
  else  " 向后搜索
    execute "normal /" . l:pattern . "^M"
  endif
  let @/ = l:pattern " 将pattern存进寄存器/中
  let @" = l:saved_reg
endfunction
"Basically you press * or # to search for the current selection !! Really useful
" 在键盘映射中,所定义的键在命令行上是有回显的 加入之后没有回显。
vnoremap  * :call VisualSearch('f')
vnoremap  # :call VisualSearch('b')
               
               
               
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/103801/showart_2054066.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP