配置Vim从剪贴板读取截图自动生成到Hexo的目录中
Created At : 2024-03-03 15:59
Count:1.8k
Views 👀 :
2024-03-18 更新 发现了一个小的问题,就是插入链接后,光标停留的位置是行尾,还得移动几次才能到中括号里,这不是vim的风格,直觉肯定是可以的。但不知道怎么搞,用chatGPT吧,果然,搞成了。
在函数中加了两句代码。
1 2 3 4 5 6 7 8 9 10 11 12 " 记录当前光标位置 let save_cursor = getpos('.') " 将 Hexo 图片链接插入到当前光标位置 execute 'normal i' . hexo_image_link " 恢复光标位置并将光标移动到第二个字符后 call setpos('.', save_cursor) execute 'normal! 2l' " 进入插入模式 startinsert
搞定,gpt真的强大。 就是整个代码块怎么不能格式化,这么丑。是不是无法识别 vimrc的语法格式。 这两天本来是要写下SSL证书的,但是一时偏离了主题,想实现用vim编辑md文件的时候,因为粘贴图片不方便,就网上找相关的教程。但是发现一个问题,就是网上的教程大多不能很好的适用。原因就是,大多的时候你找到的教程,都是最后的结果,而没有这个摸索结果的过程,也许,大佬就是这么厉害。但是给后来者带来的问题,就是不知道历史,就难以借鉴。或许这个过程太过啰嗦吧。这里我就把这个过程记录下来。
网上找到一个ps1的脚本,把剪贴板的内容dump下来,生成文件,看着很不错,开始。 出错,出错信息没有截图。各种不行,后来自己想到用snipaste来试试,它有命令行,但是需要pro版才有这个命令行的功能。其实自己挺喜欢snipaste的,之前就想买个正版,但是因为免费的也够用,就没有买。这次也算支持下作者。99元。通过微软商店购买的,官网有通过其他网站购买的渠道链接。
摸索的过程中,第一,poweshell不了解,第二,vimrc不熟悉。都不懂,怎么搞?
嗯,听说人工智能很NB。
ChatGpt上场!
真的很NB,用的是3.5,就这,基本上就能满足很多的需求,并且给出额外的建议,同时自己也用了微软的coipot ,感觉功能强,但是效果没有chatgpt好。可能是colipot的侧重在于搜索,能在提供答案的同时,给出网页链接。
看到底部的“了解详细信息”,那里面就是网页的链接,但是,说真的,中文的搜索结果很一般,建议用英文,结果更准。
切入正题。先上脚本dump_clipboard_png.ps1。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 param ( [string ]$screenshot_file ) Add-Type -Assembly PresentationCore$img = [Windows.Clipboard ]::GetImage()if ($img -eq $null ) { Write-Host "Clipboard contains no image." Exit } $fcb = New-Object Windows.Media.Imaging.FormatConvertedBitmap($img , [Windows.Media.PixelFormats ]::Rgb24, $null , 0 )Write-Host ("`nFound picture. {0}x{1} pixel. Saving to {2}`n" -f $img .PixelWidth, $img .PixelHeight, $screenshot_file )$stream = [IO.File ]::Open($screenshot_file , "OpenOrCreate" )$encoder = New-Object Windows.Media.Imaging.PngBitmapEncoder$encoder .Frames.Add([Windows.Media.Imaging.BitmapFrame ]::Create($fcb ))$encoder .Save($stream )$stream .Dispose()
原文章是没有参数的,chatgpt给出了格式,另外对于chatgpt也不能全部相信,还是自己要有一定的基础,比如chatgpt第一次给出的是两个参数,用了有问题,但是怎么也搞不定,仔细想了下,根本不用,完整的路径加文件名都已经在vimrc中生成了,直接给就行了么,这里有坑,就是在网上找的很多的时候,尤其要注意不要把多个拼起来,直接用完整的,然后出问题,问chatgpt,这样好一些。这次就是把两个地方的vimrc和在一起,搞晕了。是路径的问题,多出来一个powershell的命令,并且多了(^ ^)这样的符号。
调用Powershell要开启 一些参数,关闭安全选项。先贴上vimrc吧(还有问题,行号一编辑,就倒过来了)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 " 设置编码 set encoding=utf-8 " 启用行号 set number " 启用相对行号 set relativenumber " 自动缩进 set autoindent set smartindent set tabstop=4 set shiftwidth=4 set expandtab " 显示行尾空格 set list set listchars=trail:· " 启用语法高亮 syntax enable " 设置主题 colorscheme desert " 设置字体 set guifont=Consolas:h14 " 启用搜索高亮 set hlsearch " 启用鼠标支持 set mouse=a " 设置剪贴板共享 set clipboard=unnamedplus " Markdown 相关配置 au BufNewFile,BufRead *.md set filetype=markdown " 配置 PowerShell "if has('win32') " set shell=powershell " set shellcmdflag=-NoLogo\ -NoProfile\ -NonInteractive\ -ExecutionPolicy\ RemoteSigned\ -Command "endif " 定义执行 PowerShell 命令的函数 function! RunPowerShellCommand(command) let output = system('powershell ' . a:command) return output endfunction function! SaveScreenshotToHexoImageLink() " 获取当前编辑文件的路径和文件名 let current_file = expand('%:p') let current_file_name = expand('%:t:r') " 构建保存截图的目标文件夹路径 let screenshot_folder = substitute(expand('%:p:h') . '/' . current_file_name . '/', '/', '\\', 'g') " 如果目标文件夹不存在,创建它 if !isdirectory(screenshot_folder) call mkdir(screenshot_folder, "p") endif " 构建保存截图的文件路径(按 2 位数序号命名) let screenshot_file = screenshot_folder . printf('%02d', line('.')) . '.png' " 保存剪贴板中的内容到截图文件 let save_command = 'powershell -ExecutionPolicy Bypass E:\www\dump-clipboard-png.ps1'.' -screenshot_file '. shellescape(screenshot_file) let result = RunPowerShellCommand(save_command) echo result " 将生成的截图文件名插入到 Hexo 图片链接格式 let hexo_image_link = ") . '.png)' " 将 Hexo 图片链接插入到当前光标位置 execute 'normal i' . hexo_image_link endfunction map <F9> :call SaveScreenshotToHexoImageLink()<CR>
这里的难点在于调用powershell和传递参数,中间发现了问题,就是路径,反斜杠和正斜杠,还有就是将多个\加到里面了。因为把两个地方的东西都放到里面了。
这次收获还是有的,比如markdown,正在学习,hexo的写法,也正在学,大体上挺好的。但是对于技术细节,不是很清楚,比如powershell那么复杂的语句,可能自己不会花大力气学。这里还是要感谢下自己学了Vim,确实是能用很久很久的技能,值得一学,还有正则表达式,也是如此。看来学技能就要学长周期复用,甚至跨周期,更有复利效果。
推而广之,健身、阅读、思考、英语、记笔记、博客都是可以复利的。
想起李笑来说(大意),你学一门技能,就会发现它就是刚需,你不学,就不是,要想它能用在哪,还 能用在哪
发现自己的表达能力下降好厉害,好久不写作了,手生的很,不过没有关系,感觉挺好。
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。