以前一直使用vscode为主,scite辅助的编辑器,最近爱上了vim,以前对vim的了解仅仅是hjkl,所以现在准备在根据我学习用vim来编辑ahk脚本的过程来写文章记录.
vim配置适应ahk的操作
无论gvim还是nvim都要稍微做一些调整才能舒服的使用,所以会花几篇文章进行说明
本文解决的问题——代码缩进
使用vscode和scite的时候都配置好了ahk的代码缩进,比如在{之间进行一次缩进,当然在vim里面是没有这样的预设的
目前我总结了两个解决方案
1. imap一个补全括号的按键来解决,最简单,但是简单写只能解决ahk,想要功能更多适应别的语言也不简单,
2. 因为目前没有发现有发布的比较完美indent文件,所以这玩意只能靠自己写
不过后来发现有tc群的td大佬写了ahk的indent文件,不得不说大佬牛逼
下面分享源码
语言viml,作者td大佬
"=============================================================================
" FileName: autohotkey.vim
" Desc: autohotkey#Format
" Author: Troy Daniel
" Email: Troy_Daniel@163.com
" HomePage: https://www.cnblogs.com/troy-daniel
" Version: 0.0.1
" LastChange: 2020-12-28 21:42:31
" History:
" 2020-12-28 [+] Add function indent, one level up
"=============================================================================
if exists("b:did_indent") "{
finish
endif
let b:did_indent = 1
set indentexpr=autohotkey#Indent(v:lnum)
let s:regex_function='^\s*[a-z_]\+([a-z_*,]\{-\})\s*{\s*$'
" Splitting a Long Line into a Series of Shorter Ones
let s:regex_split_lines='^\s*\([?:,.]\|and \|or \|||\|&&\)'
function! autohotkey#Indent(lnum)
if a:lnum <= 1
return 0
endif
let l:cur_line = getline(a:lnum) " current line
let lnum = prevnonblank(a:lnum - 1)
let l:pre_line = getline(lnum) " previous line
let l:pre_indent = indent(lnum) " previous indent
let ind = indent(lnum) " default current indent
let lnum = prevnonblank(lnum - 1)
let l:pp_line = getline(lnum) " 2nd previous line
" echo l:cur_line
" echo l:pre_line
" echo l:pre_indent
" echo l:pp_line
" echo l:cur_line
" echo ind
if or(l:pre_line =~ '\(^\s*{\s*$\|[^{]\=[{:]\s*$\)',and(l:pre_line =~ '^\s*\(if\|else\|loop\)', l:cur_line !~ '^\s*{\s*'))
let ind += shiftwidth()
endif
" echo ind
if (and(l:pp_line =~ '^\s*\(if\|else\|loop\)', l:pre_line !~ '{\s*$' )
\ || l:cur_line =~ s:regex_function)
\ || l:cur_line =~ '\(^\s*}\|::\=\s*$\)'
" echo 'second'
let ind -= shiftwidth()
endif
" if l:cur_line =~ '\(^\s*}\|::\=\s*$\)'
" " echo 'thirid'
" let ind -= shiftwidth()
" endif
" echo ind
return ind
endfun
" vim: fdm=marker ts=8 sw=2 tw=78
问一下大佬,用vim写ahk支持代码跳转吗,比如跳到定义和跳到引用