Function 为什么';光标不在同一个地方吗?

Function 为什么';光标不在同一个地方吗?,function,vim,map,cursor,Function,Vim,Map,Cursor,我有一个很奇怪的问题,我试了一上午都解决不了 这是我的函数和映射: nnoremap ,zz :call SwapAW("2-2","5")<CR> nnoremap ,zc :call SwapAW("2-2","5")<CR> function! SwapAW(keyw,number) let li = line('.') let co = col('.') exe "call cursor(li,co)" let linew= line('

我有一个很奇怪的问题,我试了一上午都解决不了

这是我的函数和映射:

nnoremap ,zz :call SwapAW("2-2","5")<CR>
nnoremap ,zc :call SwapAW("2-2","5")<CR> 


function! SwapAW(keyw,number)
  let li = line('.')
  let co = col('.')  

 exe "call cursor(li,co)" 
 let linew= line('.')
 let conew= col('.')
 echo linew conew
endfunction
nnoremap,zz:callswapaw(“2-2”、“5”)
北卡罗来纳州:呼叫SwapAW(“2-2”、“5”)
功能!SwapAW(键,编号)
设li=直线('.'))
设co=col(‘.)
exe“调用游标(li,co)”
设linew=line('.'))
设conew=col('.'))
回声线
端功能
,zc-->将光标向右移动
,zz-->光标停留在原来的位置

我更改了所有内容,但无法找到光标在这两种情况下不保持在原来位置的原因。
我将p.e.映射从、zc更改为、zd和、zz更改为、zw(也尝试了其他映射),并将leaderkey从
更改为
\
,并尝试交换两条映射行。 没有什么变化。 发生了什么事? 我做错了什么


提前谢谢

、zc
映射中有一个尾随
字符(在
之后)。在函数调用后移动光标的

对于映射,必须小心隐藏字符。因此,当您实际需要包含一个特殊表单时,建议您(有时,例如,在映射开始时,有必要)直接编写特殊表单



我将突出显示这些尾随空格和制表符,因为许多代码准则都不喜欢它们。插件页面还包含指向备选方案的链接。

您的
,zc
映射中有一个尾随
字符(在
之后)。在函数调用后移动光标的

对于映射,必须小心隐藏字符。因此,当您实际需要包含一个特殊表单时,建议您(有时,例如,在映射开始时,有必要)直接编写特殊表单



我将突出显示这些尾随空格和制表符,因为许多代码准则都不喜欢它们。插件页面还包含指向备选方案的链接。

+1表示英雄点。我没有使用过这个插件,但是
set list
是另一个可以轻松显示尾随空格的选项(在中有更多介绍)。谢谢。我认为空格after对exec没有影响。@gokcehan后面的空格是使用
fo=a
的唯一正常方式,并且可以使用
gq
重新格式化(=正确且可预测的段落检测),这对注释和文档中的文本很方便。使用
set list lcs+=trail:-
不具有侵入性,并且会显示尾随空格,此插件不可能与使用
matchadd()突出显示空格的唯一方法相同,因为它正在更改背景色,这可能具有侵入性(如ctermbg=Red)或容易错过。在这种情况下,忽略
列表
突出显示比配置插件忽略空白更容易。我在
BufWritePre
autocmd
中做了一些事情:call
站点是
%s/\s\+$//e
。我没有在.txt文件上执行此autocmd,原因正是@ZyX提到的。:)@雷蒙:在命令行中,空格确实是无害的;但是请记住,在
之后,您将返回到正常模式,并且
有一个实际的移动命令。+1表示英雄点。我没有使用过这个插件,但是
set list
是另一个可以轻松显示尾随空格的选项(在中有更多介绍)。谢谢。我认为空格after对exec没有影响。@gokcehan后面的空格是使用
fo=a
的唯一正常方式,并且可以使用
gq
重新格式化(=正确且可预测的段落检测),这对注释和文档中的文本很方便。使用
set list lcs+=trail:-
不具有侵入性,并且会显示尾随空格,此插件不可能与使用
matchadd()突出显示空格的唯一方法相同,因为它正在更改背景色,这可能具有侵入性(如ctermbg=Red)或容易错过。在这种情况下,忽略
列表
突出显示比配置插件忽略空白更容易。我在
BufWritePre
autocmd
中做了一些事情:call
站点是
%s/\s\+$//e
。我没有在.txt文件上执行此autocmd,原因正是@ZyX提到的。:)@雷蒙:在命令行中,空格确实是无害的;但是请记住,在
之后,您将返回到正常模式,并且那里有一个实际的移动命令。