[20251212]混合16,10进制计算建立vim For windows插件遇到的问题.txt
--//前几天在linux下建立一个插件,就是混合16,10进制计算,利用bash shell的$[ ]的计算功能。
--//linux下很容易建立,执行脚本或者map=如下:
"" computer && convert hexadecimal or convert to hexadecimal or convert
noremap <Leader>jd YpIecho $[ <ESC>A ]<ESC>!!bash<CR>kA = <ESC>J
noremap <Leader>jh YpIprintf "0x%x\n" $[ <ESC>A ]<ESC>!!bash<CR>kA = <ESC>J
vnoremap <Leader>jd mz"fy'><ESC>o<ESC>"fpIecho $[ <ESC>A ]<ESC>!!bash<CR>y$d$`za = <ESC>pJ
vnoremap <Leader>jh mz"fy'><ESC>o<ESC>"fpIprintf "0x%x\n" $[ <ESC>A ]<ESC>!!bash<CR>y$d$`za = <ESC>pJ
--//但是移植到windows遇到一些问题,首先必须安装bash,而且版本不能太低,一般windows我都会安装UnxUtils软件包。
--//检查发现里面没有bash,仅仅存在zsh。使用zsh替换bash。
1.方法1,使用zsh代替bash。
"" computer && convert hexadecimal or convert to hexadecimal or convert
noremap <Leader>jd YpIecho $[ <ESC>A ]<ESC>!!zsh<CR>kA = <ESC>J
noremap <Leader>jh YpIprintf "0x%x\n" $[ <ESC>A ]<ESC>!!zsh<CR>kA = <ESC>J
vnoremap <Leader>jd mz"fy'><ESC>o<ESC>"fpIecho $[ <ESC>A ]<ESC>!!zsh<CR>y$d$`za = <ESC>pJ
vnoremap <Leader>jh mz"fy'><ESC>o<ESC>"fpIprintf "0x%x\n" $[ <ESC>A ]<ESC>!!zsh<CR>y$d$`za = <ESC>pJ
--//测试偶尔遇到如下问题:
^M
abnormal program termination^M
zsh: fork failed: no child processes
--//似乎打入\jh特别容易出现问题,感觉子进程很快终结,不太稳定。
2.使用Oracle VM VirtualBox虚拟软件包自带的bash.exe。
--//扫描查询bash.exe文件,发现安装Oracle VM VirtualBox自带一个bash.exe,在如下目录,只不过不在PATH环境变量里面。
C:\>dir "C:\Program Files (x86)\Vagrant\embedded\usr\bin\bash.exe"
驱动器 C 中的卷没有标签。
卷的序列号是 1239-66E3
C:\Program Files (x86)\Vagrant\embedded\usr\bin 的目录
2024/01/18 06:02 2,157,448 bash.exe
1 个文件 2,157,448 字节
0 个目录 181,978,406,912 可用字节
--//尝试加入PATH环境变量测试看看,加入以上路径到PATH结尾。
--//多次测试没有问题。
3.使用cygwin的bash:
--//安装cygwin,安装过程略。
--//测试使用\jd正常,而\jh报错。登录cygwin环境,执行如下:
$ printf "0x%x\n" $[0xa + 0x2 ]
0xc
--//没有任何问题。
$ printf 0x%x $[0xa + 0x2 ]
0xc
--//没有双引号也没有问题。
--//而在vim文本写入如下:
printf "0x%x\n" $[0xa + 0x2 ]
--//打入!!bash<CR>,出现如下:
0xD:\tools\linux\usr\local\wbin\printf.exe: 12^M: value not completely converted
--//注:该执行文件是UnxUtils软件包,开始以为应该使用cygwin自带的printf.exe才行,修改PATH路径,问题依旧。
--//注意里面^M,才想起回车换成的问题。
:set ff=unix
--//转换文本为unix格式,也就是结尾没有\r字符,再次测试,一切ok。
--//这样修改快捷键定义加入tr删除\r字符,再打开文件切换为dos格式,再测试就不存在该问题了。
"" computer && convert hexadecimal or convert to hexadecimal or convert
noremap <Leader>jd YpIecho $[ <ESC>A ]<ESC>!!bash<CR>kA = <ESC>J
noremap <Leader>jh YpIprintf 0x%x $[ <ESC>A ]<ESC>!!tr -d '\r' \|bash<CR>kA = <ESC>J
vnoremap <Leader>jd mz"fy'><ESC>o<ESC>"fpIecho $[ <ESC>A ]<ESC>!!bash<CR>y$d$`za = <ESC>pJ
vnoremap <Leader>jh mz"fy'><ESC>o<ESC>"fpIprintf "0x%x\n" $[ <ESC>A ]<ESC>!!tr -d '\r' \|bash<CR>y$d$`za = <ESC>pJ
--//实际上当时在1个空行上输入!!bash时,提示出现\r,就很容易理解问题在那里了。
bash: 行 1: $'\r': 未找到命令
4.小结:
--//测试几种方式,方法2最稳定与简单,只要安装Oracle VM VirtualBox。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/267265/viewspace-3105152/ ,如需转载,请注明出处,否则将追究法律责任。