Workflow Vim:更改脚本中变量的格式
我正在使用vim编辑一个shell脚本(没有使用正确的编码标准)。我需要将所有变量从驼峰符号Workflow Vim:更改脚本中变量的格式,workflow,vim,Workflow,Vim,我正在使用vim编辑一个shell脚本(没有使用正确的编码标准)。我需要将所有变量从驼峰符号startTime更改为大写和下划线符号START\u TIME 我不想改变方法名称的表示方式 我在想这样做的一种方法是编写一个函数并将其映射到一个键。该函数可以执行类似于在命令行上生成的操作: s/<word under cursor>/<leave cursor here to type what to replace with> s// 我认为这个功能可以应用于其他方便的
startTime
更改为大写和下划线符号START\u TIME
我不想改变方法名称的表示方式
我在想这样做的一种方法是编写一个函数并将其映射到一个键。该函数可以执行类似于在命令行上生成的操作:
s/<word under cursor>/<leave cursor here to type what to replace with>
s//
我认为这个功能可以应用于其他方便的情况。两个问题:
问题1:我将如何创建该函数
- 在vim中创建函数之前,我最不清楚的是如何捕捉运动。即,如果在vim中按
,它将删除一个单词的其余部分。你如何捕捉到这一点dw
- 您还可以在vim命令行上保留未完成的命令吗
问题2:有更好的解决方案吗?你将如何完成这项任务 我不确定你对“捕捉动作”的理解。那个 比如说,作为一个初学者,我会使用类似这样的函数:
fu! ChangeWord()
let l:the_word = expand('<cword>')
" Modify according to your rules
let l:new_var_name = toupper(l:the_word)
normal b
let l:col_b = col(".")
normal e
let l:col_e = col(".")
let l:line = getline(".")
let l:line = substitute(
\ l:line,
\ '^\(' . repeat('.', l:col_b-1) . '\)' . repeat('.', l:col_e - l:col_b+1),
\ '\1' . l:new_var_name,
\ '')
call setline(".", l:line)
endfu
然后可在正常模式下通过按,x
调用
更新
仔细考虑后,下面的函数稍微短了一点:
fu! ChangeWordUnderCursor()
let l:the_word = expand('<cword>')
"" Modify according to your rules
let l:new_var_name = '!' . toupper(l:the_word) . '!'
normal b
let l:col_b = col(".")
normal e
let l:col_e = col(".")
let l:line = getline(".")
exe 's/\%' . l:col_b . 'c.*\%' . (l:col_e+1) .'c/' . l:new_var_name . '/'
endfu
fu!ChangeWordUndersor()
让l:单词=展开(“”)
“”根据您的规则进行修改
让l:new_var_name='!'。图珀(l:这个词)。”
正常b
设l:col_b=col(“.”)
正态e
设l:col_e=col(“.”)
设l:line=getline(“.”)
exe的/\%。l:上校c、 *\%”。(l:col_e+1)。'c/'。l:新名字。'/'
恩德福
使用插件
检查页面底部的强制部分:
将:s命令放到命令行中
:nnoremap\c:%s/
将光标下的单词获取到命令行
用:s更改光标下的单词
:nnoremap\c lb:s/\%\\/\=toupper(替换(子匹配(0))'\
fu! ChangeWordUnderCursor()
let l:the_word = expand('<cword>')
"" Modify according to your rules
let l:new_var_name = '!' . toupper(l:the_word) . '!'
normal b
let l:col_b = col(".")
normal e
let l:col_e = col(".")
let l:line = getline(".")
exe 's/\%' . l:col_b . 'c.*\%' . (l:col_e+1) .'c/' . l:new_var_name . '/'
endfu