Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Function 从vim函数内部更改光标下的单词_Function_Vim - Fatal编程技术网

Function 从vim函数内部更改光标下的单词

Function 从vim函数内部更改光标下的单词,function,vim,Function,Vim,我想写一个函数,它增加/减少文本的大小。例如,当光标位于单词\footnotesize上方时,我想调用Tex\u ChangeSize(-1)将其更改为\small,调用Tex\u ChangeSize(1)将其更改为\normalsize 我所拥有的是: function! Tex_ChangeSize(direction) let sizes = ["tiny", "scriptsize", "footnotesize", "small", "normalsize", "large"

我想写一个函数,它增加/减少文本的大小。例如,当光标位于单词\footnotesize上方时,我想调用
Tex\u ChangeSize(-1)
将其更改为\small,调用
Tex\u ChangeSize(1)
将其更改为\normalsize

我所拥有的是:

function! Tex_ChangeSize(direction) let sizes = ["tiny", "scriptsize", "footnotesize", "small", "normalsize", "large", "Large", "LARGE", "huge", "Huge"] let cursize = index(sizes,expand("<cword>")) if cursize != -1 "FIXME: replace current word under cursor with the following echo sizes[cursize + a:direction] endif endfunction imap <C-h> <C-o>:call Tex_ChangeSize(-1)<Enter> imap <C-g> <C-o>:call Tex_ChangeSize(1)<Enter> 功能!Tex_ChangeSize(方向) 让大小=[“微小”、“脚本大小”、“脚注大小”、“小”、“正常大小”、“大”、“大”、“大”、“大”、“大”] 让cursize=索引(大小,展开(“”) 如果用粗体字!=-1. “修复:将光标下的当前单词替换为以下内容 回声大小[光标+a:方向] 恩迪夫 端功能 imap:调用Tex_ChangeSize(-1) imap:调用Tex_ChangeSize(1) 我不知道的是,如何替换光标下的单词(请参阅FIXME)。
更准确地说:有没有比解析
getline(line('.')
并用
setline()
将其设置回更好的方法呢?

getline+setline是一个更整洁的选择,因为它不会弄乱任何寄存器(既不是
@
也不是
@/
),但是,在utf-8环境中,也可以使用制表符(\t),查找当前单词的限制有点棘手。(
col('.)
+
match()
将执行此操作;有关示例,请参阅)

您还可以有一个nnoremapping,它使用
s:ChangeSize()
执行一个简单的
cw=ChangeSize(1)
,该函数测试
@
以查看下一个要返回的符号——在这种情况下,不弄乱
@
很简单

您还可以正常使用
:exe!如果您不希望函数返回任何内容,请在函数中使用“\u cw”.new\u word