ITPub博客

首页 > Linux操作系统 > Linux操作系统 > [20251212]混合16,10进制计算建立vim For windows插件遇到的问题.txt

[20251212]混合16,10进制计算建立vim For windows插件遇到的问题.txt

原创 Linux操作系统 作者:lfree 时间:2025-12-12 20:23:35 621 删除 编辑

[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/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
熟悉oracle相关技术,擅长sql优化,rman备份与恢复,熟悉linux shell编程。

注册时间:2008-01-03

  • 博文量
    4006
  • 访问量
    7969157