dva*_*ria 4 vim character count
我正在尝试学习如何使用自己的函数配置我的.vimrc文件.
我想编写一个遍历文件中每一行的函数并计算字符总数,但忽略所有空格.这是一个编程练习,也是更复杂程序的踏脚石(我知道还有其他方法可以使用Vim或外部程序获得这个示例值).
这是我到目前为止所拥有的:
function countchars()
let line = 0
let count = 0
while line < line("$")
" update count here, don't count whitespace
let line = getline(".")
return count
endfun
Run Code Online (Sandbox Code Playgroud)
我可以用哪个功能代码替换该注释行?
如果我正确理解了这个问题,那么你需要计算一行中非空白字符的数量.一个相当简单的方法是删除空格并查看结果行的长度.因此,这样的事情:
function! Countchars()
let l = 1
let char_count = 0
while l <= line("$")
let char_count += len(substitute(getline(l), '\s', '', 'g'))
let l += 1
endwhile
return char_count
endfunction
Run Code Online (Sandbox Code Playgroud)
问题答案的关键部分是使用替代品.命令是:
substitute(expr,pattern,repl,flags)
Run Code Online (Sandbox Code Playgroud)
expr在这种情况下getline(l),l迭代的行数在哪里. getline()返回行的内容,因此这是正在解析的内容.模式是\s匹配任何单个空白字符的正则表达式.它被替换为'',即一个空字符串.该标志g使其重复替换次数,因为该行上有空格.
替换完成后,len()给出非空白字符的数量,并将其添加到char_countwith 的当前值+=.
我从您的示例中更改了一些内容:
:help user-functions)count,char_count因为您不能拥有与函数同名的变量,并且count()是内置函数line:我将其重命名为ll为1<=而不是<while需要一个endwhilelet line = getline('.')!在function定义上添加了一个,因为它使得增量开发变得更加容易(每次重新获取文件时,它将使用新版本覆盖函数,而不是吐出有关它已经存在的错误消息).在你的功能中,你有let line = getline('.').忽略变量名称,此实现仍存在一些问题.我想你的意思是let l = line('.'),它给出了当前行的行号. getline('.')给出当前行的内容,因此while行的比较将比较当前行的内容与最后一行的数量,这将失败.另一个问题是你实际上并没有在文件中移动,因此当你调用函数时,当前行将是你所在的行,并且永远不会改变,从而导致无限循环.我用一个简单+= 1的步骤来替换它.
有一些方法可以使当前行成为一种有用的方法,例如,如果你正在编写一个带有一系列行的函数,但我认为我已经写了足够的内容了,上面的内容将有希望得到你现在去 stackoverflow上有很多人可以帮助解决任何问题!
看一下:
:help usr_41.txt
:help function-list
:help user-functions
:help substitute()
Run Code Online (Sandbox Code Playgroud)
沿着:help接着我在函数(所使用的各种事情getline(),line(),let+=等等).
希望这很有帮助.
| 归档时间: |
|
| 查看次数: |
1086 次 |
| 最近记录: |