最近突然编译需求来了。每一个文件的依赖库都不同,以前vim的编译函数都是扯谈了。干脆写了一个通用的方法的函数。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
"============ <F5> 运行前五行注释中的命令 =========
map <F5> :call RunComment()<CR>
func RunComment()
let n = 1
while n < 5
let l=getline(n)
if l =~ '//!'
echo strpart(l, stridx(l, "!"))
exec strpart(l, stridx(l, "!"))
if v:shell_error
echo "=================== exec error !!! =================="
break
endif
endif
let n = n + 1
endwhile
endfunc
|
源码里面类似这样的,直接写编译命令。反正只认包含"//!“的行。
1
2
3
4
5
6
|
▶ head -n 5 ~/bin/showit/showsvgpngtxt.vala
//▶ valac --pkg gtk+-3.0 --pkg librsvg-2.0 showsvgpngtxt.vala
//!valac --pkg gtk+-3.0 --pkg librsvg-2.0 %
//!./%<
using Gtk;
using Cairo;
|
又找到一个v:shell_error
,类似shell的$?
可判断编译时候成功。
gedit动态执行编译
外部工具真强大,通过管道调用各种脚本,再管道返回。
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
|
⭕ cat ~/.config/gedit/tools/F5执行前5行内的命令
#!/bin/perl
# [Gedit Tool]
# Name=F5执行前5行内的命令
# Input=nothing
# Output=output-panel
# Applicability=titled
# Save-files=nothing
# Shortcut=F5
# Languages=
# https://wiki.gnome.org/Apps/Gedit/Plugins/ExternalTools
use 5.010;
chdir $ENV{GEDIT_CURRENT_DOCUMENT_DIR};
open IN,"<$ENV{GEDIT_CURRENT_DOCUMENT_PATH}" or die $!;
@_ = split '\n', <IN>.<IN>.<IN>.<IN>.<IN>;
for(@_){
next if ! m'//!';
$cmd = $';
$cmd =~ s/%f/$ENV{GEDIT_CURRENT_DOCUMENT_NAME}/;
print "当前目录:".`pwd`;
say "执行命令:".$cmd;
say "-----------------------------------------";
say `$cmd`;
say "输出无错误" if $? eq 0;
}
|