mirror of
https://github.com/neovim/neovim.git
synced 2025-09-07 20:08:17 +00:00
Compare commits
1430 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
44c6deb91a | ||
![]() |
fe5675ba0a | ||
![]() |
feaefdfba2 | ||
![]() |
51961da511 | ||
![]() |
f72f638f97 | ||
![]() |
c69ea3b4b8 | ||
![]() |
dc5fdbc758 | ||
![]() |
0191061e34 | ||
![]() |
b8363283fa | ||
![]() |
23d172a948 | ||
![]() |
3fddd04565 | ||
![]() |
7cc9d2b2b2 | ||
![]() |
bbb88607c9 | ||
![]() |
e17728a632 | ||
![]() |
d87e5d7016 | ||
![]() |
b94b59e4e8 | ||
![]() |
392b3396fd | ||
![]() |
3bcbf802ce | ||
![]() |
aaece78492 | ||
![]() |
cca29112d5 | ||
![]() |
77192889f0 | ||
![]() |
c7e6bb2467 | ||
![]() |
f85cbea725 | ||
![]() |
c500f22f3c | ||
![]() |
be68f218ff | ||
![]() |
4871f26c22 | ||
![]() |
bd736a98e3 | ||
![]() |
231539cf3c | ||
![]() |
451c48a092 | ||
![]() |
34c0688790 | ||
![]() |
db68d1d638 | ||
![]() |
e0d39d8e53 | ||
![]() |
3abf17ae88 | ||
![]() |
5a82afa17a | ||
![]() |
7f6c1d256f | ||
![]() |
2d456f84d1 | ||
![]() |
36ac80d5dd | ||
![]() |
f795c3ce7c | ||
![]() |
ec29eeef43 | ||
![]() |
b7032cf1e3 | ||
![]() |
90e3dd9220 | ||
![]() |
7303dd3e54 | ||
![]() |
420379330e | ||
![]() |
21c9db1861 | ||
![]() |
5861dc5966 | ||
![]() |
078202d6f8 | ||
![]() |
d9d91bbfef | ||
![]() |
6ffcc2b800 | ||
![]() |
ae927a49f7 | ||
![]() |
b2633bba73 | ||
![]() |
f274b84e1e | ||
![]() |
2ab7165214 | ||
![]() |
21aa4bc428 | ||
![]() |
fe5c891fe0 | ||
![]() |
d8c7ff1335 | ||
![]() |
1f300e08b8 | ||
![]() |
4211255c75 | ||
![]() |
63058fb5b0 | ||
![]() |
787ae1b38b | ||
![]() |
d00ef758c3 | ||
![]() |
4b70ebe013 | ||
![]() |
905d4d78fc | ||
![]() |
51e817dc1b | ||
![]() |
fad748dffa | ||
![]() |
488f6ecdda | ||
![]() |
a1f562b044 | ||
![]() |
cf92a76285 | ||
![]() |
7795829767 | ||
![]() |
807a16dbc1 | ||
![]() |
32935c8612 | ||
![]() |
a80f73f043 | ||
![]() |
90f9f8af6c | ||
![]() |
f8eb5c83ed | ||
![]() |
611e379685 | ||
![]() |
a93690bceb | ||
![]() |
54f72efa70 | ||
![]() |
513804ed91 | ||
![]() |
3818a47211 | ||
![]() |
8652458184 | ||
![]() |
402a797d08 | ||
![]() |
7b53b5380a | ||
![]() |
1ef585d6dc | ||
![]() |
803baf3631 | ||
![]() |
b8331e1a1c | ||
![]() |
dad7882cac | ||
![]() |
9cd75ce73e | ||
![]() |
37e00c6e65 | ||
![]() |
1efe65a155 | ||
![]() |
245b1ad7fa | ||
![]() |
39a03c0fe7 | ||
![]() |
49a497a67c | ||
![]() |
5be3865ce7 | ||
![]() |
c7350f542a | ||
![]() |
4339fdd802 | ||
![]() |
2a30a71596 | ||
![]() |
27694577c3 | ||
![]() |
3585df3f0b | ||
![]() |
77a2eaf08b | ||
![]() |
6a0c727a0b | ||
![]() |
bce3e95691 | ||
![]() |
f711b63513 | ||
![]() |
2bfdceba37 | ||
![]() |
5b2cee03c8 | ||
![]() |
47fa9de580 | ||
![]() |
438f2b6474 | ||
![]() |
e21f454e11 | ||
![]() |
05282069db | ||
![]() |
51db8ebf67 | ||
![]() |
64177e3e98 | ||
![]() |
209f05b487 | ||
![]() |
d2c460638c | ||
![]() |
c67139f8aa | ||
![]() |
2ca6223967 | ||
![]() |
333679ad0e | ||
![]() |
65e7f6f0b9 | ||
![]() |
0bee3925ab | ||
![]() |
ad151847f1 | ||
![]() |
8ef3fb4e73 | ||
![]() |
491efc89d2 | ||
![]() |
3866137eed | ||
![]() |
e7451f8a91 | ||
![]() |
de5d1e863c | ||
![]() |
5aa8af7cdb | ||
![]() |
2106bada5b | ||
![]() |
6bdcbef2f5 | ||
![]() |
a1d831a49c | ||
![]() |
995a2fad8c | ||
![]() |
ec215a1962 | ||
![]() |
61f467499b | ||
![]() |
0476e0aef3 | ||
![]() |
37b8e95fd6 | ||
![]() |
8bcc011959 | ||
![]() |
71816e584c | ||
![]() |
bafae1c427 | ||
![]() |
9e97f14de2 | ||
![]() |
79184809bb | ||
![]() |
db15a3b8f7 | ||
![]() |
edcc73e766 | ||
![]() |
418abfc9d0 | ||
![]() |
6da4548f0e | ||
![]() |
7f0095cc94 | ||
![]() |
d337965e09 | ||
![]() |
655e3167ee | ||
![]() |
fefb67fa88 | ||
![]() |
f1bc152fa0 | ||
![]() |
fdf17e33d5 | ||
![]() |
5000c9dc1f | ||
![]() |
828c9baad2 | ||
![]() |
1642917f9b | ||
![]() |
a93658502c | ||
![]() |
35cc15e157 | ||
![]() |
ff0350d2ed | ||
![]() |
efa10881e5 | ||
![]() |
5284b85d07 | ||
![]() |
e24d338194 | ||
![]() |
8e20b77bd1 | ||
![]() |
7e9afca990 | ||
![]() |
fd5cc7dd0a | ||
![]() |
4dd614e51a | ||
![]() |
3046f4499b | ||
![]() |
d0e07c043b | ||
![]() |
9af2e144a6 | ||
![]() |
725400d75d | ||
![]() |
fdd59ef901 | ||
![]() |
39f16a0fee | ||
![]() |
a5de6770c5 | ||
![]() |
0ea685ed9e | ||
![]() |
fb28b0c734 | ||
![]() |
d995825c66 | ||
![]() |
a82ac8accb | ||
![]() |
e3707c312a | ||
![]() |
50ec030b26 | ||
![]() |
3de81ea351 | ||
![]() |
2ed2939597 | ||
![]() |
91c4de83c9 | ||
![]() |
23f052edac | ||
![]() |
26d5a981eb | ||
![]() |
0ed297bdb4 | ||
![]() |
a676c658cc | ||
![]() |
e121b1dbe7 | ||
![]() |
d2944e6a29 | ||
![]() |
c2d1684e05 | ||
![]() |
189a5f2b95 | ||
![]() |
aea70b4404 | ||
![]() |
32df42549a | ||
![]() |
b44b533ada | ||
![]() |
2aa308c685 | ||
![]() |
de7a0bdc35 | ||
![]() |
efb6caa39b | ||
![]() |
021c5875c1 | ||
![]() |
11b55aa004 | ||
![]() |
36b2e3f743 | ||
![]() |
137eedb4ed | ||
![]() |
cb6672853a | ||
![]() |
738bffea2c | ||
![]() |
9fa7727ce0 | ||
![]() |
25b6304840 | ||
![]() |
273d2cd5d5 | ||
![]() |
e31d8ed36a | ||
![]() |
8d40b3617c | ||
![]() |
1cd8517344 | ||
![]() |
966e7abc49 | ||
![]() |
3a6b80f2f4 | ||
![]() |
f1a3075553 | ||
![]() |
cb8ea55d71 | ||
![]() |
79a0d82755 | ||
![]() |
2326a4ac3a | ||
![]() |
32b0470b03 | ||
![]() |
c9f3174075 | ||
![]() |
33bfea31b0 | ||
![]() |
34b6a3d944 | ||
![]() |
ebb1acb3c0 | ||
![]() |
cabffb0182 | ||
![]() |
fe7ab60af7 | ||
![]() |
19c2ce1901 | ||
![]() |
124275dd58 | ||
![]() |
f46f138fb6 | ||
![]() |
8abd677d82 | ||
![]() |
f8575fd1e4 | ||
![]() |
8ce6393048 | ||
![]() |
bcc9a74e48 | ||
![]() |
5009317525 | ||
![]() |
ec1a7791b0 | ||
![]() |
16ce2e006b | ||
![]() |
0a349fd77d | ||
![]() |
0d037ad978 | ||
![]() |
7170de1971 | ||
![]() |
e46534b423 | ||
![]() |
c9e340b7be | ||
![]() |
d5da357925 | ||
![]() |
58b210e114 | ||
![]() |
5d6732ff09 | ||
![]() |
1f2301eacf | ||
![]() |
7d8327fd30 | ||
![]() |
87d3f265bc | ||
![]() |
4744142fad | ||
![]() |
6208c7fb98 | ||
![]() |
7e7c3111b6 | ||
![]() |
bd17ef75b3 | ||
![]() |
d6a1640260 | ||
![]() |
34f29ac858 | ||
![]() |
53f11dcfc7 | ||
![]() |
009ccfe170 | ||
![]() |
a369385009 | ||
![]() |
ad60927d09 | ||
![]() |
77cb14cc6d | ||
![]() |
32f3937477 | ||
![]() |
4ce8521ee4 | ||
![]() |
a37819dbb1 | ||
![]() |
953d167015 | ||
![]() |
76c2a60ff3 | ||
![]() |
03c2844b53 | ||
![]() |
4bab9d34e6 | ||
![]() |
ffb8904913 | ||
![]() |
4b41680828 | ||
![]() |
c8648daab3 | ||
![]() |
d9c010e45d | ||
![]() |
a90672fc3d | ||
![]() |
43df2edd20 | ||
![]() |
6c2b442ee0 | ||
![]() |
f50670aeff | ||
![]() |
f9b728e2f8 | ||
![]() |
9da2e7b021 | ||
![]() |
3f4ec1aed2 | ||
![]() |
e724667ef4 | ||
![]() |
2a951d16a4 | ||
![]() |
5ba267722c | ||
![]() |
0eaecbaf47 | ||
![]() |
b9b17a58da | ||
![]() |
fb0c35105f | ||
![]() |
f45df71081 | ||
![]() |
0ba2ec0bae | ||
![]() |
60577eeaf5 | ||
![]() |
9f3e67a814 | ||
![]() |
2cdf9d1388 | ||
![]() |
db1c9b625c | ||
![]() |
b144a77f38 | ||
![]() |
3c7cc03f34 | ||
![]() |
4ff4e66fd7 | ||
![]() |
9c981f5a19 | ||
![]() |
e3bffa47a6 | ||
![]() |
d42f934bcb | ||
![]() |
adfc1212b5 | ||
![]() |
190cc43cf3 | ||
![]() |
3ee187b770 | ||
![]() |
4d43ce85f1 | ||
![]() |
d05712fbe7 | ||
![]() |
51af911a27 | ||
![]() |
b71697bc67 | ||
![]() |
9139bf81cf | ||
![]() |
498731615c | ||
![]() |
a02d22cca8 | ||
![]() |
fe5f38d8bd | ||
![]() |
be2a3ddd58 | ||
![]() |
c10a207a20 | ||
![]() |
d29c243bef | ||
![]() |
b7a46f2299 | ||
![]() |
be1448213c | ||
![]() |
a1530ece87 | ||
![]() |
522443d6bf | ||
![]() |
1dc497398e | ||
![]() |
c8189096e8 | ||
![]() |
7a13611ba2 | ||
![]() |
8cdaac0d80 | ||
![]() |
cb3bb0becb | ||
![]() |
57c66bc168 | ||
![]() |
eba61fbc97 | ||
![]() |
4a1251206a | ||
![]() |
48967695c4 | ||
![]() |
0cec184cd6 | ||
![]() |
84359a467f | ||
![]() |
9a1f57b488 | ||
![]() |
fab09ea0d6 | ||
![]() |
d0850586df | ||
![]() |
6a5b9de546 | ||
![]() |
61b6eb926d | ||
![]() |
d66217ab6d | ||
![]() |
0eb1d7ca4c | ||
![]() |
95cc2507c9 | ||
![]() |
ed6a113804 | ||
![]() |
fc1ebb060e | ||
![]() |
dae1975394 | ||
![]() |
2b7a8ceeb6 | ||
![]() |
4a145f2036 | ||
![]() |
3b32e717d9 | ||
![]() |
cb3230776e | ||
![]() |
2940af8321 | ||
![]() |
a2f9188418 | ||
![]() |
24ee261317 | ||
![]() |
b8f69b6b9a | ||
![]() |
3189841984 | ||
![]() |
cd27198526 | ||
![]() |
1fb4282f1c | ||
![]() |
11f6411771 | ||
![]() |
d084628c4b | ||
![]() |
a20261fae7 | ||
![]() |
bc235bf1f6 | ||
![]() |
6196738a3b | ||
![]() |
17e21eae24 | ||
![]() |
092b4d9774 | ||
![]() |
469ba2fb49 | ||
![]() |
c90e9df5b5 | ||
![]() |
cad616c94e | ||
![]() |
d7e4449adb | ||
![]() |
103be37f42 | ||
![]() |
b2c066409d | ||
![]() |
142ac021ac | ||
![]() |
8fa0b8051d | ||
![]() |
c8f409c2f2 | ||
![]() |
7598e6cf17 | ||
![]() |
aa5008c1f0 | ||
![]() |
db7f80302b | ||
![]() |
1df9ac1c03 | ||
![]() |
f8d574225b | ||
![]() |
1e71978cf0 | ||
![]() |
1e7d5e8cdf | ||
![]() |
5abfa94ed2 | ||
![]() |
a7e7f7bd83 | ||
![]() |
ee4e1fd8ec | ||
![]() |
387fbcd95c | ||
![]() |
ad999eaa77 | ||
![]() |
ef4feab0e7 | ||
![]() |
51b9d85bb4 | ||
![]() |
ad30907814 | ||
![]() |
8e87d89a99 | ||
![]() |
27e26b10a2 | ||
![]() |
1c3a849881 | ||
![]() |
5e18550ddd | ||
![]() |
0865adbbc2 | ||
![]() |
aea079a25d | ||
![]() |
2cbeb7ca56 | ||
![]() |
f44fb5b1a5 | ||
![]() |
d48df146d1 | ||
![]() |
714e0f8bf0 | ||
![]() |
bc43d2559f | ||
![]() |
7c8122f36d | ||
![]() |
49e86cebf0 | ||
![]() |
4bbe51b79e | ||
![]() |
6245b4873d | ||
![]() |
fa0e32fba2 | ||
![]() |
e3687165a7 | ||
![]() |
979569356f | ||
![]() |
79a8d905ab | ||
![]() |
87f4d2592c | ||
![]() |
f96d99ad11 | ||
![]() |
777d34ec37 | ||
![]() |
704ba4151e | ||
![]() |
507bda1c95 | ||
![]() |
7362ca4430 | ||
![]() |
9f598e5765 | ||
![]() |
b11b681289 | ||
![]() |
f19db1b9ba | ||
![]() |
6f19b9f4e1 | ||
![]() |
4d1b3bf317 | ||
![]() |
07b67f9eff | ||
![]() |
536d9a6168 | ||
![]() |
ef57cd81fe | ||
![]() |
84bac9f507 | ||
![]() |
d4688add96 | ||
![]() |
c28dbede27 | ||
![]() |
5acda03576 | ||
![]() |
db29fa8164 | ||
![]() |
1edb4894dc | ||
![]() |
f8a44b73f0 | ||
![]() |
92759ef34f | ||
![]() |
840027c7f5 | ||
![]() |
93be2ba542 | ||
![]() |
58a5699a44 | ||
![]() |
2a6491cdf8 | ||
![]() |
0d7daaad98 | ||
![]() |
e670756676 | ||
![]() |
414ef75ee6 | ||
![]() |
fa6415f13f | ||
![]() |
929a732d00 | ||
![]() |
1ca138f236 | ||
![]() |
2ec94eb23f | ||
![]() |
7034feb666 | ||
![]() |
de0d1a0d2a | ||
![]() |
d49c1dda8b | ||
![]() |
1fd54f29c1 | ||
![]() |
e8c39f72fd | ||
![]() |
224ebc0078 | ||
![]() |
8b8a75b2cf | ||
![]() |
e40e300c16 | ||
![]() |
e25e552a3d | ||
![]() |
eb00fc0cf0 | ||
![]() |
b982f0e654 | ||
![]() |
411d578137 | ||
![]() |
04f5062978 | ||
![]() |
60e96a45b4 | ||
![]() |
cb5cde6e2b | ||
![]() |
0c59ac1a2c | ||
![]() |
4b26e365ae | ||
![]() |
9b7ce00486 | ||
![]() |
5d9bb16d66 | ||
![]() |
ec459965f5 | ||
![]() |
1b898d7af5 | ||
![]() |
57fef8b49b | ||
![]() |
1fc09b5b98 | ||
![]() |
5660482406 | ||
![]() |
bf160dd668 | ||
![]() |
6b84f7813c | ||
![]() |
65d0b8ed32 | ||
![]() |
7eceac218e | ||
![]() |
bdf5f57989 | ||
![]() |
dd1b493f75 | ||
![]() |
f5373e2cdc | ||
![]() |
200898546e | ||
![]() |
1ac1f520f0 | ||
![]() |
98e7112390 | ||
![]() |
362346f563 | ||
![]() |
c8fd7ce08b | ||
![]() |
30f6ff7021 | ||
![]() |
f21867a15c | ||
![]() |
868b84199e | ||
![]() |
e54ff10d44 | ||
![]() |
b5a47f4907 | ||
![]() |
e9cf40f2b6 | ||
![]() |
bbca3142e8 | ||
![]() |
79f9c2d9c6 | ||
![]() |
3f3de9b1a9 | ||
![]() |
8d5a46e77b | ||
![]() |
3df11cfbca | ||
![]() |
920c582320 | ||
![]() |
aa728798b4 | ||
![]() |
30e7fb2e32 | ||
![]() |
7941aaa3bf | ||
![]() |
0bfc91be96 | ||
![]() |
17ea0f2214 | ||
![]() |
393935c32d | ||
![]() |
c7caca60b9 | ||
![]() |
cffdc1da02 | ||
![]() |
ab6051331c | ||
![]() |
afe6b4881f | ||
![]() |
afd46b78c5 | ||
![]() |
51f5cfc16e | ||
![]() |
ad6d577314 | ||
![]() |
e6ee06ee11 | ||
![]() |
03e69a5d9c | ||
![]() |
3bd555f1e6 | ||
![]() |
cf4fbb6f04 | ||
![]() |
607e0d2202 | ||
![]() |
a9c94f7bb0 | ||
![]() |
ce5c2030bf | ||
![]() |
9ebe2ad331 | ||
![]() |
201a4ef11c | ||
![]() |
79b4b6fc86 | ||
![]() |
f8d2aef4f2 | ||
![]() |
5fecd59c26 | ||
![]() |
8d64a2fb1d | ||
![]() |
29395fd304 | ||
![]() |
f50ce7d510 | ||
![]() |
131aad953c | ||
![]() |
be67d926c5 | ||
![]() |
6a7c904648 | ||
![]() |
1b61167373 | ||
![]() |
0ecf7e3a2d | ||
![]() |
7ae4144208 | ||
![]() |
998a16c926 | ||
![]() |
84a25770ac | ||
![]() |
82cd0be2ea | ||
![]() |
189c5abeba | ||
![]() |
d407a48665 | ||
![]() |
9627325684 | ||
![]() |
ce3bc12e25 | ||
![]() |
535bf89597 | ||
![]() |
519ff2ad42 | ||
![]() |
10008f7d49 | ||
![]() |
739fb93a90 | ||
![]() |
1fb44676cd | ||
![]() |
1c0a2a39b6 | ||
![]() |
3bf57c1171 | ||
![]() |
c49dac7cd3 | ||
![]() |
feee814b30 | ||
![]() |
229604213e | ||
![]() |
15c53a44d3 | ||
![]() |
bf789b04f3 | ||
![]() |
4e02f1ab87 | ||
![]() |
0848add488 | ||
![]() |
ae409b5042 | ||
![]() |
167898a517 | ||
![]() |
72e4c9d8e7 | ||
![]() |
65b66bc332 | ||
![]() |
26b84a8b3e | ||
![]() |
960f093625 | ||
![]() |
66a8b593e7 | ||
![]() |
8f82f95c1c | ||
![]() |
a034d4b69d | ||
![]() |
b0e5187e49 | ||
![]() |
f407a94032 | ||
![]() |
330e5acbce | ||
![]() |
12af7016e2 | ||
![]() |
dbad797edd | ||
![]() |
de86f82483 | ||
![]() |
8d90171f8b | ||
![]() |
de47515477 | ||
![]() |
cca407b43e | ||
![]() |
0093c25dd3 | ||
![]() |
338664e96c | ||
![]() |
9058a5a19a | ||
![]() |
cc58ec9a80 | ||
![]() |
3b304fc04a | ||
![]() |
d989051220 | ||
![]() |
e01f35c4bb | ||
![]() |
9beaf84d2f | ||
![]() |
8e71a26e19 | ||
![]() |
20bfe0f2a3 | ||
![]() |
1aefbff641 | ||
![]() |
5ce8158a5d | ||
![]() |
f5b0f5e17f | ||
![]() |
e24e98534b | ||
![]() |
4e5e6506b5 | ||
![]() |
8bd1bbcec8 | ||
![]() |
c7f95fde1b | ||
![]() |
241c380da9 | ||
![]() |
a2d1e9cc79 | ||
![]() |
b0b656dd37 | ||
![]() |
9a0147754c | ||
![]() |
45e81e03f8 | ||
![]() |
968c7ab17e | ||
![]() |
ffad8d4c51 | ||
![]() |
de919b9b94 | ||
![]() |
90963a9c55 | ||
![]() |
496b0f944f | ||
![]() |
fd4021387e | ||
![]() |
d554a6c7f0 | ||
![]() |
2bf0869160 | ||
![]() |
9154782386 | ||
![]() |
9dc3cc2c68 | ||
![]() |
e1f27cdb4c | ||
![]() |
b0d08998f5 | ||
![]() |
d53aa0e94f | ||
![]() |
9cefd83cc7 | ||
![]() |
d82621877b | ||
![]() |
5ec0a6d13f | ||
![]() |
0adf950ccf | ||
![]() |
8ba8d7244f | ||
![]() |
c29a82c45f | ||
![]() |
e0d55f2871 | ||
![]() |
7612ba5ad9 | ||
![]() |
fb3667cd16 | ||
![]() |
cfb713b5c6 | ||
![]() |
353ca83f73 | ||
![]() |
d7ee323326 | ||
![]() |
773f23e00d | ||
![]() |
01fc02beee | ||
![]() |
8e30598115 | ||
![]() |
1d5eec2c62 | ||
![]() |
b615192a37 | ||
![]() |
544cef0155 | ||
![]() |
b22d3385b9 | ||
![]() |
cee9a8ce8a | ||
![]() |
a98736b9c0 | ||
![]() |
90fc7c6ad0 | ||
![]() |
c21cf6d3cc | ||
![]() |
9f994bb699 | ||
![]() |
37b755ab47 | ||
![]() |
de3a833ec7 | ||
![]() |
adfad73d8e | ||
![]() |
b3d0241416 | ||
![]() |
305673e923 | ||
![]() |
fa6f892055 | ||
![]() |
3d2f4154b1 | ||
![]() |
f2b6145d74 | ||
![]() |
cb245a71ca | ||
![]() |
3a6ee8819e | ||
![]() |
0169872fd3 | ||
![]() |
9aec64c34e | ||
![]() |
8f39e96d21 | ||
![]() |
60a341a05f | ||
![]() |
2c414fbbb1 | ||
![]() |
f04b53aa24 | ||
![]() |
d99f8feea3 | ||
![]() |
d520e2590a | ||
![]() |
69da692b0a | ||
![]() |
ba87a2cde7 | ||
![]() |
611351677d | ||
![]() |
e237cff0c8 | ||
![]() |
81a520e60e | ||
![]() |
ff8c848128 | ||
![]() |
9938196298 | ||
![]() |
f588113191 | ||
![]() |
c19ff66bfd | ||
![]() |
158f8b7ce3 | ||
![]() |
f72630b784 | ||
![]() |
e18177692a | ||
![]() |
f3f1970597 | ||
![]() |
384a39479a | ||
![]() |
0c930c2969 | ||
![]() |
15670ca1ad | ||
![]() |
8b05da1577 | ||
![]() |
8c8cf46c71 | ||
![]() |
4696a5a10e | ||
![]() |
830b5819a0 | ||
![]() |
1eb4aff57a | ||
![]() |
c8074e3792 | ||
![]() |
ef0a07c073 | ||
![]() |
8851903434 | ||
![]() |
4a8f081971 | ||
![]() |
471d6d4db5 | ||
![]() |
464ac8fe2a | ||
![]() |
54c0bf6429 | ||
![]() |
ec02d9aad6 | ||
![]() |
c57d315963 | ||
![]() |
04fdbfe17d | ||
![]() |
6bbec71fde | ||
![]() |
e215b6cb85 | ||
![]() |
e177c186e4 | ||
![]() |
4b81f627c6 | ||
![]() |
06b7561e78 | ||
![]() |
7fa69fb288 | ||
![]() |
795da343bb | ||
![]() |
07dfe0f5ea | ||
![]() |
8dcfd58e2c | ||
![]() |
d80bf3c656 | ||
![]() |
df99ab461e | ||
![]() |
55ce6bfffb | ||
![]() |
6beb7ee77a | ||
![]() |
f1e6828b7b | ||
![]() |
2943056f75 | ||
![]() |
44dc8b4753 | ||
![]() |
10fbae086a | ||
![]() |
18a53b6502 | ||
![]() |
c5a7f451ce | ||
![]() |
3c0cc9c2fb | ||
![]() |
e55de56a99 | ||
![]() |
f4d82c1438 | ||
![]() |
4f65cd7c0a | ||
![]() |
bde32edefe | ||
![]() |
0fd899aa07 | ||
![]() |
3e19e18f4c | ||
![]() |
00665d3c70 | ||
![]() |
eccd60aaf4 | ||
![]() |
44071fe77a | ||
![]() |
71e89cec23 | ||
![]() |
7973847d02 | ||
![]() |
e72ecdb7ca | ||
![]() |
8b543d09d8 | ||
![]() |
2f018b1833 | ||
![]() |
3af3515e74 | ||
![]() |
6fbb8d6739 | ||
![]() |
48dc1f3f90 | ||
![]() |
e9134421ab | ||
![]() |
09b51bbf87 | ||
![]() |
77286915a8 | ||
![]() |
d9497053e8 | ||
![]() |
674cb2afde | ||
![]() |
0daa45bd44 | ||
![]() |
6e5cb0debd | ||
![]() |
0f1bc5ddce | ||
![]() |
9e9e4431c1 | ||
![]() |
7da4d1561b | ||
![]() |
418947fcb3 | ||
![]() |
c68d89521f | ||
![]() |
6bcee20806 | ||
![]() |
5191f963bf | ||
![]() |
ef39f854d7 | ||
![]() |
04993f220a | ||
![]() |
2929dbf223 | ||
![]() |
3ffeceb851 | ||
![]() |
43631675d8 | ||
![]() |
aaff91d925 | ||
![]() |
85e240c045 | ||
![]() |
67e3b1e0c5 | ||
![]() |
e3cfe7853d | ||
![]() |
1257b04747 | ||
![]() |
ff4a628081 | ||
![]() |
f389196a34 | ||
![]() |
f26a4d484b | ||
![]() |
22173a64dd | ||
![]() |
fda2b1e906 | ||
![]() |
7a91177bc9 | ||
![]() |
840a2bb67d | ||
![]() |
bef505c158 | ||
![]() |
44f275d518 | ||
![]() |
1be0107168 | ||
![]() |
bcd8541863 | ||
![]() |
8dd63dbe31 | ||
![]() |
e4952ee006 | ||
![]() |
f69e0d314f | ||
![]() |
82a9051857 | ||
![]() |
5c05cd43cb | ||
![]() |
9bf9cc69c1 | ||
![]() |
163b2b241b | ||
![]() |
66f5e5c7d7 | ||
![]() |
9af9ea6099 | ||
![]() |
d285d6ca0d | ||
![]() |
abed6a0b1a | ||
![]() |
4b7f7be301 | ||
![]() |
9b6ed6c71c | ||
![]() |
348193f49c | ||
![]() |
48af5991b9 | ||
![]() |
e15f2b4b96 | ||
![]() |
6ab9e87599 | ||
![]() |
9c14a78afd | ||
![]() |
9baf60c617 | ||
![]() |
16a4168364 | ||
![]() |
a1ee06a099 | ||
![]() |
cebf31cf70 | ||
![]() |
2de447b60c | ||
![]() |
0a531ddf87 | ||
![]() |
bbdb074aec | ||
![]() |
6df80e8762 | ||
![]() |
77bfbc3006 | ||
![]() |
e247dd2535 | ||
![]() |
070f8df4dd | ||
![]() |
b5acf6e0c1 | ||
![]() |
6116af02ef | ||
![]() |
5ae90c84ea | ||
![]() |
e578d586f2 | ||
![]() |
fd58863eb6 | ||
![]() |
2d151f7739 | ||
![]() |
61f9a7b0d0 | ||
![]() |
ce92e784e1 | ||
![]() |
c9aafda6ac | ||
![]() |
4c83567da3 | ||
![]() |
4c1afd1e83 | ||
![]() |
fafe23cad7 | ||
![]() |
cbecae46f4 | ||
![]() |
4fe4b5abb6 | ||
![]() |
54b9510e05 | ||
![]() |
7d12597d29 | ||
![]() |
ca24ad0b95 | ||
![]() |
c8356e1151 | ||
![]() |
b67ce84c45 | ||
![]() |
e69a71427c | ||
![]() |
2cfc1b055b | ||
![]() |
ed0d135247 | ||
![]() |
564ad60c06 | ||
![]() |
dd068928c1 | ||
![]() |
5d8da126d0 | ||
![]() |
c205360f00 | ||
![]() |
d929a41f5f | ||
![]() |
34b99bc06b | ||
![]() |
c03a847884 | ||
![]() |
f75c4b39ec | ||
![]() |
01cdeff626 | ||
![]() |
60ce7d9e0a | ||
![]() |
a6052c7307 | ||
![]() |
7229493eb1 | ||
![]() |
a265334406 | ||
![]() |
dc53629587 | ||
![]() |
a6136e8b0b | ||
![]() |
f66ebcd0a2 | ||
![]() |
d071578ed0 | ||
![]() |
366528130e | ||
![]() |
35a7892781 | ||
![]() |
ed37136c5c | ||
![]() |
352a51e831 | ||
![]() |
9fdd5d7f03 | ||
![]() |
6e2bb564e1 | ||
![]() |
538361955d | ||
![]() |
b1412dc412 | ||
![]() |
d73dd1588c | ||
![]() |
2a4c9c6e45 | ||
![]() |
6744f48d88 | ||
![]() |
4e7d85e635 | ||
![]() |
9af14506e5 | ||
![]() |
5f5caa367a | ||
![]() |
2d99b81ab5 | ||
![]() |
0851057a8d | ||
![]() |
ab35caf9cf | ||
![]() |
40d6a95670 | ||
![]() |
de10ea55f3 | ||
![]() |
2316a38dd1 | ||
![]() |
a2dfeb8a16 | ||
![]() |
e243dbdc32 | ||
![]() |
5da6f0e903 | ||
![]() |
86ee92f2a2 | ||
![]() |
e34f2897d5 | ||
![]() |
71190f1f34 | ||
![]() |
204ec6337e | ||
![]() |
4487657576 | ||
![]() |
e2afcfb020 | ||
![]() |
709a87d194 | ||
![]() |
6710164c2c | ||
![]() |
f8010ea3ec | ||
![]() |
648fed975e | ||
![]() |
ec7cbabf01 | ||
![]() |
dfcd09dc22 | ||
![]() |
3a5721e91b | ||
![]() |
6452831cf9 | ||
![]() |
649123d07c | ||
![]() |
5d2dd2ebe2 | ||
![]() |
8728a5d50b | ||
![]() |
2a1a624878 | ||
![]() |
397ff2c35b | ||
![]() |
ca31f81a31 | ||
![]() |
b55f831678 | ||
![]() |
41b3c7850f | ||
![]() |
1813c53e8d | ||
![]() |
2eb8dc40ac | ||
![]() |
be7990bb49 | ||
![]() |
caf87f597f | ||
![]() |
60d0353119 | ||
![]() |
d2ff5d5bb0 | ||
![]() |
0376874c32 | ||
![]() |
9a36337d32 | ||
![]() |
2569fabf04 | ||
![]() |
b251c42195 | ||
![]() |
f9b738235e | ||
![]() |
0578087e5e | ||
![]() |
5c09f37d4a | ||
![]() |
7ac21332cf | ||
![]() |
28236867a0 | ||
![]() |
c08c09add7 | ||
![]() |
5a39d2d00e | ||
![]() |
984a93df96 | ||
![]() |
eb59dd6547 | ||
![]() |
273c7cfa2a | ||
![]() |
534abe4aaf | ||
![]() |
ec5af91b90 | ||
![]() |
e39be42c09 | ||
![]() |
909c967f35 | ||
![]() |
a619c3fcf9 | ||
![]() |
afbdafffc2 | ||
![]() |
499c9a1553 | ||
![]() |
8821579baa | ||
![]() |
6f4c4be952 | ||
![]() |
16a6f44570 | ||
![]() |
c6fe06bbc0 | ||
![]() |
300d3651e2 | ||
![]() |
df4f9342b9 | ||
![]() |
f2ea15f364 | ||
![]() |
87e03c2b85 | ||
![]() |
9bc1410ee1 | ||
![]() |
cd59577d57 | ||
![]() |
997fc8b133 | ||
![]() |
660bfb3fb3 | ||
![]() |
cd973be11b | ||
![]() |
41394d8236 | ||
![]() |
0a56bd3330 | ||
![]() |
83880cced3 | ||
![]() |
8b1f7d8774 | ||
![]() |
a3daa8cb13 | ||
![]() |
3ff92ba1ee | ||
![]() |
5d88830d51 | ||
![]() |
090cd10975 | ||
![]() |
15119f943a | ||
![]() |
6762c20af8 | ||
![]() |
7dd97eb597 | ||
![]() |
3308b76339 | ||
![]() |
41a91af5cf | ||
![]() |
84d4e4a7ef | ||
![]() |
59ac170340 | ||
![]() |
dbcdd29139 | ||
![]() |
17b21eae52 | ||
![]() |
b69fa866db | ||
![]() |
872ee4259a | ||
![]() |
d6cbe6ca87 | ||
![]() |
fb855feb52 | ||
![]() |
154822933e | ||
![]() |
a5d33d5e90 | ||
![]() |
a185ab70fd | ||
![]() |
52778d62fc | ||
![]() |
2820860ba3 | ||
![]() |
53749e1749 | ||
![]() |
e2eff5269f | ||
![]() |
ab279c6fb8 | ||
![]() |
456cf72974 | ||
![]() |
ce09d4134b | ||
![]() |
9c92eed86f | ||
![]() |
9db4dc971d | ||
![]() |
72422b0748 | ||
![]() |
eb4aab7173 | ||
![]() |
ada1956206 | ||
![]() |
6bf359fa79 | ||
![]() |
db346b5b48 | ||
![]() |
0daaa49586 | ||
![]() |
ee84da358c | ||
![]() |
5a96a9eba2 | ||
![]() |
6a826fce91 | ||
![]() |
ecf851bc60 | ||
![]() |
b00fd49640 | ||
![]() |
10b1738f59 | ||
![]() |
82adba0f2f | ||
![]() |
e76c6e2ee8 | ||
![]() |
2408a05151 | ||
![]() |
94f4469638 | ||
![]() |
20e0cb8d47 | ||
![]() |
72a7a884b4 | ||
![]() |
6acbd76b00 | ||
![]() |
421f2605c0 | ||
![]() |
23102bc18e | ||
![]() |
43833af53c | ||
![]() |
3632f02564 | ||
![]() |
5a594091dc | ||
![]() |
15334dcd89 | ||
![]() |
12acf0f7a7 | ||
![]() |
bac86a1941 | ||
![]() |
06994e0e21 | ||
![]() |
bc17ad31dc | ||
![]() |
8fc437ef43 | ||
![]() |
1c6e956079 | ||
![]() |
fed928b438 | ||
![]() |
1be315de37 | ||
![]() |
60d6a8b13d | ||
![]() |
514a51ef3e | ||
![]() |
c06995b34d | ||
![]() |
9cabe826ba | ||
![]() |
b558f750bf | ||
![]() |
6020e8b69e | ||
![]() |
fe7a53f3cf | ||
![]() |
682d5ff8e6 | ||
![]() |
34cc04d753 | ||
![]() |
3f9f7cfab1 | ||
![]() |
2b1bcd446b | ||
![]() |
26251d6d06 | ||
![]() |
f8f7f9d5f5 | ||
![]() |
de0a9548f7 | ||
![]() |
726197d890 | ||
![]() |
f09a30d5b0 | ||
![]() |
900708f93b | ||
![]() |
7dd3910f47 | ||
![]() |
ac87d9de69 | ||
![]() |
423d7af3df | ||
![]() |
808f504305 | ||
![]() |
28998cfd81 | ||
![]() |
63bb7198df | ||
![]() |
b9f3805447 | ||
![]() |
770ec228c7 | ||
![]() |
fc97e9fbdf | ||
![]() |
fe4ba69958 | ||
![]() |
7faeaf9f24 | ||
![]() |
4b8d6caf48 | ||
![]() |
a8cb510a2e | ||
![]() |
6a1557f2f4 | ||
![]() |
c10ae4bc85 | ||
![]() |
9ea1752d60 | ||
![]() |
8eb0888a5d | ||
![]() |
9ddeb6e187 | ||
![]() |
624ac8aede | ||
![]() |
18d244eded | ||
![]() |
911b1e49ab | ||
![]() |
5055d4a755 | ||
![]() |
c095f83116 | ||
![]() |
f0845197d8 | ||
![]() |
34de6d33c9 | ||
![]() |
b23fc444b5 | ||
![]() |
e888439f55 | ||
![]() |
7f70c5f7b7 | ||
![]() |
889bc3c20c | ||
![]() |
b58c17f8df | ||
![]() |
a8ad6b4d51 | ||
![]() |
59888b68ab | ||
![]() |
0ed31303b5 | ||
![]() |
e182a8c836 | ||
![]() |
b61a305039 | ||
![]() |
9370a0e5d8 | ||
![]() |
ccdbcfea0b | ||
![]() |
46a9600d0e | ||
![]() |
6fa0a0a516 | ||
![]() |
8c2cb81d7e | ||
![]() |
4fedad6c5b | ||
![]() |
ab1e11e44f | ||
![]() |
d4485f7cc0 | ||
![]() |
8d58012786 | ||
![]() |
7311fb7cad | ||
![]() |
e9b5616eaf | ||
![]() |
c82e7c75fe | ||
![]() |
a18db72a36 | ||
![]() |
b616ef9b22 | ||
![]() |
7c4bb23ff3 | ||
![]() |
dc4a9cbe85 | ||
![]() |
0a881575da | ||
![]() |
5898a1dcbb | ||
![]() |
d2bc610d64 | ||
![]() |
d55881d278 | ||
![]() |
88d643eb36 | ||
![]() |
1bbe6d0a30 | ||
![]() |
2e630d2611 | ||
![]() |
65ec4ea629 | ||
![]() |
dea7a41138 | ||
![]() |
d63c3d9d10 | ||
![]() |
5f5011e8f6 | ||
![]() |
b86e44aa35 | ||
![]() |
09b9f9b7ce | ||
![]() |
dd0fa4fd0e | ||
![]() |
d162815ca9 | ||
![]() |
dc1444e112 | ||
![]() |
90aae43984 | ||
![]() |
60716371e9 | ||
![]() |
6a9f2cdc68 | ||
![]() |
95a8af093f | ||
![]() |
c5f9762b7e | ||
![]() |
321a46b724 | ||
![]() |
1d8c612f78 | ||
![]() |
f4e372c8ab | ||
![]() |
907b2f18f7 | ||
![]() |
9fe6c12e81 | ||
![]() |
d0c4bd23f7 | ||
![]() |
3efc50d1d4 | ||
![]() |
6742fd8aea | ||
![]() |
89d1b36084 | ||
![]() |
9ad557fb2d | ||
![]() |
8ac7c23b7d | ||
![]() |
c55cf5f4c1 | ||
![]() |
46f432074e | ||
![]() |
a30242d661 | ||
![]() |
0d548b73ef | ||
![]() |
9dc90fcde1 | ||
![]() |
caf94c72c5 | ||
![]() |
697fb05c58 | ||
![]() |
5dd2ca767f | ||
![]() |
e84e1b68c1 | ||
![]() |
3eaa9a2579 | ||
![]() |
5563e808da | ||
![]() |
49f4358b0a | ||
![]() |
2c436b3362 | ||
![]() |
ddcfb49262 | ||
![]() |
eb44519b5d | ||
![]() |
134c0f0bdb | ||
![]() |
6740c94562 | ||
![]() |
c28ce5f619 | ||
![]() |
0446d4d691 | ||
![]() |
061b942dc0 | ||
![]() |
2f3e001717 | ||
![]() |
341102fe9f | ||
![]() |
102e0689d8 | ||
![]() |
ac2f90f2e1 | ||
![]() |
7773bbd098 | ||
![]() |
903ed09a61 | ||
![]() |
973bd10a12 | ||
![]() |
fe60fa9faa | ||
![]() |
b6ee90a243 | ||
![]() |
6ab5eb347b | ||
![]() |
bc52ec6110 | ||
![]() |
7997147245 | ||
![]() |
2923e8533d | ||
![]() |
32689aa5be | ||
![]() |
67fa9e5237 | ||
![]() |
ac55558c97 | ||
![]() |
608c3d7baf | ||
![]() |
6bf3dc77c4 | ||
![]() |
0c533a488f | ||
![]() |
249bdb07dd | ||
![]() |
6b45dbca04 | ||
![]() |
dee78a4095 | ||
![]() |
ec86f4215f | ||
![]() |
61ba3c5e31 | ||
![]() |
308dd53783 | ||
![]() |
5cb7a709e7 | ||
![]() |
d2c01d529f | ||
![]() |
c9ab209f9e | ||
![]() |
eb95b88156 | ||
![]() |
6c731d33f6 | ||
![]() |
aa951b1489 | ||
![]() |
190814bdae | ||
![]() |
cdd86f42cf | ||
![]() |
6fcadab3ce | ||
![]() |
20708a07bf | ||
![]() |
53a530b2f5 | ||
![]() |
4d2d844c12 | ||
![]() |
9fb7926a0d | ||
![]() |
dd27392861 | ||
![]() |
1b2d386a85 | ||
![]() |
88863bb6ae | ||
![]() |
c01a84e344 | ||
![]() |
765ff94b5b | ||
![]() |
f0bd2bc39a | ||
![]() |
fb8592b7ba | ||
![]() |
6b5d92f9e0 | ||
![]() |
8536348813 | ||
![]() |
ccbf14322a | ||
![]() |
e6f8b105b0 | ||
![]() |
cca6d4b267 | ||
![]() |
451ff827b8 | ||
![]() |
6e0c038a3c | ||
![]() |
4a58bd514e | ||
![]() |
2851bb9eff | ||
![]() |
f3d7eeff77 | ||
![]() |
db0685a663 | ||
![]() |
c162bc6294 | ||
![]() |
067bb1e9f4 | ||
![]() |
be53c209c0 | ||
![]() |
103ff26c0a | ||
![]() |
e0054fef7d | ||
![]() |
5b692124cc | ||
![]() |
a1adfdc7d5 | ||
![]() |
edccf18df5 | ||
![]() |
023631463c | ||
![]() |
7f3b9a4acc | ||
![]() |
76ffe0c5aa | ||
![]() |
bfb21f3e01 | ||
![]() |
7afd26a6d1 | ||
![]() |
91d3efa35a | ||
![]() |
dcb2780b83 | ||
![]() |
d5bce42b52 | ||
![]() |
fb07391ce4 | ||
![]() |
c8a5d6181b | ||
![]() |
6ff13d78b7 | ||
![]() |
7164f61850 | ||
![]() |
ed92ece815 | ||
![]() |
6b51c72e0c | ||
![]() |
6203c23449 | ||
![]() |
34057045be | ||
![]() |
932ea7a0d1 | ||
![]() |
f976826690 | ||
![]() |
45998deb5d | ||
![]() |
1f9dd689b9 | ||
![]() |
ceed29687f | ||
![]() |
9f534422e6 | ||
![]() |
1a961b5750 | ||
![]() |
f4132fb38b | ||
![]() |
d46e37cb4c | ||
![]() |
8813b29cec | ||
![]() |
23fb833ea7 | ||
![]() |
56b49955b7 | ||
![]() |
ceb45a0885 | ||
![]() |
fe55f37083 | ||
![]() |
622d355ab4 | ||
![]() |
d11884db49 | ||
![]() |
7572d5ac5a | ||
![]() |
0b03ac2cb2 | ||
![]() |
83f77c80c0 | ||
![]() |
5008205a3e | ||
![]() |
f572bd7e4e | ||
![]() |
ac4bbf55f6 | ||
![]() |
e9504b7fd8 | ||
![]() |
5bd8827431 | ||
![]() |
ad9c2d3cb9 | ||
![]() |
9ada97a810 | ||
![]() |
dc232b74fb | ||
![]() |
6f41ce0260 | ||
![]() |
abe38f7d26 | ||
![]() |
1f2b35860f | ||
![]() |
4a5bc6275d | ||
![]() |
5c1ddb5078 | ||
![]() |
21745d72b8 | ||
![]() |
274f32d42e | ||
![]() |
49dd615693 | ||
![]() |
ddce5bca03 | ||
![]() |
3cc7ebf810 | ||
![]() |
afae4b5141 | ||
![]() |
a58c9094db | ||
![]() |
873af01245 | ||
![]() |
b6c268b32a | ||
![]() |
5cbd3b383c | ||
![]() |
ba7d6a9e6b | ||
![]() |
54087d80f3 | ||
![]() |
90dd2b1473 | ||
![]() |
9714b9f590 | ||
![]() |
aec81f44d1 | ||
![]() |
67848c0b91 | ||
![]() |
2d4abc1cae | ||
![]() |
837100fcb1 | ||
![]() |
5f288220f9 | ||
![]() |
7f386b175c | ||
![]() |
175174597d | ||
![]() |
a11751eae8 | ||
![]() |
1cae99b4bf | ||
![]() |
5de1eae4f2 | ||
![]() |
586dafee2f | ||
![]() |
9d689d639d | ||
![]() |
3aa24042a8 | ||
![]() |
a494c99918 | ||
![]() |
e9990b43c2 | ||
![]() |
fbdc3ac4ef | ||
![]() |
d763d2fe7a | ||
![]() |
6bc54832ef | ||
![]() |
78bc52ea53 | ||
![]() |
c49e22d396 | ||
![]() |
7af8601db4 | ||
![]() |
27a577586e | ||
![]() |
44421a22c0 | ||
![]() |
ad32307e3b | ||
![]() |
7a4c9dc1c2 | ||
![]() |
4b83f37912 | ||
![]() |
7ab36403e1 | ||
![]() |
585d664b7b | ||
![]() |
ee2e6d1d1a | ||
![]() |
27f9b1c7b0 | ||
![]() |
3d0ee17c91 | ||
![]() |
6299332349 | ||
![]() |
5ab0f988ca | ||
![]() |
0b4054e043 | ||
![]() |
10c3b206cb | ||
![]() |
b588ccddd7 | ||
![]() |
de45ec0146 | ||
![]() |
4618c9c43b | ||
![]() |
e0466dc592 | ||
![]() |
59f4bd435c | ||
![]() |
2d732a11b1 | ||
![]() |
27a4fc436f | ||
![]() |
8f91f2c9b4 | ||
![]() |
20bde8866e | ||
![]() |
122dbc86ab | ||
![]() |
27a70fec48 | ||
![]() |
d109f5645b | ||
![]() |
e3c4c8a90e | ||
![]() |
df019cebd5 | ||
![]() |
6cf186edb5 | ||
![]() |
c8b40930c0 | ||
![]() |
944e3c0619 | ||
![]() |
a043899ba2 | ||
![]() |
36a4f3a259 | ||
![]() |
cddf84c398 | ||
![]() |
17077b6813 | ||
![]() |
11a05e778f | ||
![]() |
b9c7813058 | ||
![]() |
207b7ca4bc | ||
![]() |
0de019b6a6 | ||
![]() |
91b856ccce | ||
![]() |
b57d9a4ff0 | ||
![]() |
ebed8c6a2e | ||
![]() |
b1a4db0b69 | ||
![]() |
bab2f8200a | ||
![]() |
0f9c90e0ed | ||
![]() |
303e1df13f | ||
![]() |
baa981ea21 | ||
![]() |
753d0091e8 | ||
![]() |
8540b5e4ad | ||
![]() |
85bc6630c0 | ||
![]() |
9acd7bfe25 | ||
![]() |
a97cdff14d | ||
![]() |
fee367a74f | ||
![]() |
f629f8312d | ||
![]() |
5517d2323b | ||
![]() |
5af4703177 | ||
![]() |
90e5cc5484 | ||
![]() |
3e59c1e20d | ||
![]() |
1ebc96fe10 | ||
![]() |
5215e3205a | ||
![]() |
3717e2157f | ||
![]() |
0b93bab6c2 | ||
![]() |
b838ad5b7a | ||
![]() |
9888a54f15 | ||
![]() |
d9b3ebfede | ||
![]() |
51637f4256 | ||
![]() |
8c959be511 | ||
![]() |
a4f6cec7a3 | ||
![]() |
fe2546c81a | ||
![]() |
1b94f24d6e | ||
![]() |
c030a38168 | ||
![]() |
c24b74c229 | ||
![]() |
fdcde7dba3 | ||
![]() |
dddc609859 | ||
![]() |
9393be477a | ||
![]() |
bb7795e820 | ||
![]() |
7b686881a1 | ||
![]() |
9b6bf8fa37 | ||
![]() |
84d9245c70 | ||
![]() |
8674b0c3d1 | ||
![]() |
c391401648 | ||
![]() |
7d24a95b45 | ||
![]() |
df10714991 | ||
![]() |
05a3c12118 | ||
![]() |
1ffa4e5047 | ||
![]() |
64158f2b0b | ||
![]() |
fe3a58273e | ||
![]() |
03a129aacf | ||
![]() |
6ea3a08fdb | ||
![]() |
7c20f60b88 | ||
![]() |
ebb33eddd9 | ||
![]() |
731dc82f8c | ||
![]() |
f20f97c936 | ||
![]() |
a94255a7ac | ||
![]() |
53fa435a1f | ||
![]() |
764cf3251d | ||
![]() |
c287893225 | ||
![]() |
de8b1fd1de | ||
![]() |
540ed64635 | ||
![]() |
d6f9d1df04 | ||
![]() |
342239a9c5 | ||
![]() |
39c75d31be | ||
![]() |
556451a7f2 | ||
![]() |
45445e2e03 | ||
![]() |
c7495ebcc0 | ||
![]() |
1aa6276c29 | ||
![]() |
bbb21e5dd3 | ||
![]() |
4aebd00a9e | ||
![]() |
24a353364d | ||
![]() |
f2660bee6a | ||
![]() |
42959d0e8f | ||
![]() |
c85f485aa7 | ||
![]() |
05f775b5f2 | ||
![]() |
ebb5977837 | ||
![]() |
7849070f99 | ||
![]() |
7bc6de7526 | ||
![]() |
07ec709141 | ||
![]() |
b9d5aea073 | ||
![]() |
d98199de9c | ||
![]() |
3ecb95298f | ||
![]() |
ff819d8ad7 | ||
![]() |
6340689582 | ||
![]() |
0356dbbb36 | ||
![]() |
a9b203d23f | ||
![]() |
b29a776550 | ||
![]() |
538af1c90a | ||
![]() |
b91cb18c36 | ||
![]() |
748f3ad5bb | ||
![]() |
22d161a5dd | ||
![]() |
1be29dc5ac | ||
![]() |
b935a12dab | ||
![]() |
06bdc9ed83 | ||
![]() |
c202f17c8d | ||
![]() |
568cf73c90 | ||
![]() |
b574e95850 | ||
![]() |
47938e1e22 | ||
![]() |
895793fc82 | ||
![]() |
c9f511d24a | ||
![]() |
8e856ebcd0 | ||
![]() |
252a76db80 | ||
![]() |
c03dc13bb7 | ||
![]() |
4c8ed65b60 | ||
![]() |
248493f155 | ||
![]() |
a535d68380 | ||
![]() |
15043e93b6 | ||
![]() |
ed253b5fe6 | ||
![]() |
fe81380bf5 | ||
![]() |
5e92ee6565 | ||
![]() |
1a3635304b | ||
![]() |
2cb95bd937 | ||
![]() |
4ccaf86110 | ||
![]() |
76f0466536 | ||
![]() |
3aa2c0d63a | ||
![]() |
bc386c4882 | ||
![]() |
57bb3346d9 | ||
![]() |
6c19cbef26 | ||
![]() |
206f7ae76a | ||
![]() |
c286155bfa | ||
![]() |
8178ba2871 | ||
![]() |
fa3cfc0dd5 | ||
![]() |
af38cea133 | ||
![]() |
c484613ce0 | ||
![]() |
e423cfe194 | ||
![]() |
6f22b5afad | ||
![]() |
bd3a4166b2 | ||
![]() |
e45e519495 | ||
![]() |
21a5ce033c | ||
![]() |
163792e9b9 | ||
![]() |
0bc4e22379 | ||
![]() |
6168e1127c | ||
![]() |
6791c57420 | ||
![]() |
6144e26eb9 | ||
![]() |
9e721031d5 | ||
![]() |
3735537a50 | ||
![]() |
f33543377e | ||
![]() |
f265066081 | ||
![]() |
9fa8f7fc0a | ||
![]() |
0987d3b10f | ||
![]() |
3cc65ac054 | ||
![]() |
d4782fb1ca | ||
![]() |
7980614650 | ||
![]() |
7c97f78393 | ||
![]() |
430e516d3a | ||
![]() |
919223c23a | ||
![]() |
1265da0288 | ||
![]() |
2d8b9937de | ||
![]() |
0300c4d109 | ||
![]() |
ad58e50b45 | ||
![]() |
e479f3b944 | ||
![]() |
190c8516f5 | ||
![]() |
520c0b91a5 | ||
![]() |
4403864da3 | ||
![]() |
e8829710bc | ||
![]() |
ff8b2eb435 | ||
![]() |
d0b08f32f5 | ||
![]() |
9ea111d1af | ||
![]() |
4049492b6d | ||
![]() |
8a55f9b1c8 | ||
![]() |
db095f6563 | ||
![]() |
44f039a1c8 | ||
![]() |
2290a7a1b1 | ||
![]() |
2b0abdbd9a | ||
![]() |
0273f96ef6 | ||
![]() |
1a56a032fe | ||
![]() |
f4920fb485 | ||
![]() |
79d3e94942 | ||
![]() |
628d0335b8 | ||
![]() |
e47622f26b | ||
![]() |
62108c3b0b | ||
![]() |
99b4f25b99 | ||
![]() |
ca116df260 | ||
![]() |
ae4fae9d3e | ||
![]() |
7df4fc8941 | ||
![]() |
83b39a4a02 | ||
![]() |
88e1a17cde | ||
![]() |
e78e75d85d | ||
![]() |
bd798a3267 | ||
![]() |
fdfa1ed578 | ||
![]() |
d2268d5ebb | ||
![]() |
29654cfee7 | ||
![]() |
d4639ea6d9 | ||
![]() |
38687ee394 | ||
![]() |
1ea7541f65 | ||
![]() |
3cd7bf31e2 | ||
![]() |
0e9286a19e | ||
![]() |
0320a58082 | ||
![]() |
65c41e6c2b |
15
.gitignore
vendored
15
.gitignore
vendored
@@ -1,3 +1,8 @@
|
|||||||
|
# Tools
|
||||||
|
.ropeproject/
|
||||||
|
# Visual Studio
|
||||||
|
/.vs/
|
||||||
|
|
||||||
# Build/deps dir
|
# Build/deps dir
|
||||||
/build/
|
/build/
|
||||||
/cmake-build-debug/
|
/cmake-build-debug/
|
||||||
@@ -17,13 +22,13 @@ tags
|
|||||||
/src/nvim/po/vim.pot
|
/src/nvim/po/vim.pot
|
||||||
/src/nvim/po/*.ck
|
/src/nvim/po/*.ck
|
||||||
|
|
||||||
# generated by tests with $NVIM_LOG_FILE set.
|
# Generated by tests with $NVIM_LOG_FILE set.
|
||||||
/.nvimlog
|
/.nvimlog
|
||||||
|
|
||||||
# Files generated by scripts/vim-patch.sh
|
# Generated by scripts/vim-patch.sh
|
||||||
/.vim-src/
|
/.vim-src/
|
||||||
|
|
||||||
# Files generated by the tests
|
# Generated by old (Vim) tests.
|
||||||
/src/nvim/testdir/del
|
/src/nvim/testdir/del
|
||||||
/src/nvim/testdir/test*.out
|
/src/nvim/testdir/test*.out
|
||||||
/src/nvim/testdir/test*.res
|
/src/nvim/testdir/test*.res
|
||||||
@@ -36,10 +41,10 @@ tags
|
|||||||
/src/nvim/testdir/valgrind.*
|
/src/nvim/testdir/valgrind.*
|
||||||
/src/nvim/testdir/.gdbinit
|
/src/nvim/testdir/.gdbinit
|
||||||
|
|
||||||
# Folder generated by the unit tests
|
# Generated by unit tests.
|
||||||
/test/includes/post/
|
/test/includes/post/
|
||||||
|
|
||||||
# generated by luacheck during `make testlint'
|
# Generated by luacheck during `make testlint'
|
||||||
/test/.luacheckcache
|
/test/.luacheckcache
|
||||||
|
|
||||||
# local make targets
|
# local make targets
|
||||||
|
69
.travis.yml
69
.travis.yml
@@ -4,13 +4,8 @@ language: c
|
|||||||
|
|
||||||
env:
|
env:
|
||||||
global:
|
global:
|
||||||
# To force rebuilding of third-party dependencies, set this to 'true'.
|
# Set "false" to force rebuild of third-party dependencies.
|
||||||
- BUILD_NVIM_DEPS=false
|
- CACHE_ENABLE=true
|
||||||
# Travis has 1.5 virtual cores according to
|
|
||||||
# http://docs.travis-ci.com/user/speeding-up-the-build/#Paralellizing-your-build-on-one-VM
|
|
||||||
- MAKE_CMD="make -j2"
|
|
||||||
# Update PATH for pip.
|
|
||||||
- PATH="$(python2.7 -c 'import site; print(site.getuserbase())')/bin:/usr/lib/llvm-symbolizer-4.0/bin:$PATH"
|
|
||||||
# Build directory for Neovim.
|
# Build directory for Neovim.
|
||||||
- BUILD_DIR="$TRAVIS_BUILD_DIR/build"
|
- BUILD_DIR="$TRAVIS_BUILD_DIR/build"
|
||||||
# Build directory for third-party dependencies.
|
# Build directory for third-party dependencies.
|
||||||
@@ -41,50 +36,54 @@ env:
|
|||||||
- UBSAN_OPTIONS="print_stacktrace=1 log_path=$LOG_DIR/ubsan"
|
- UBSAN_OPTIONS="print_stacktrace=1 log_path=$LOG_DIR/ubsan"
|
||||||
# Environment variables for Valgrind.
|
# Environment variables for Valgrind.
|
||||||
- VALGRIND_LOG="$LOG_DIR/valgrind-%p.log"
|
- VALGRIND_LOG="$LOG_DIR/valgrind-%p.log"
|
||||||
# Cache marker for third-party dependencies cache.
|
# If this file exists, the cache is valid (compile was successful).
|
||||||
# If this file exists, we know that the cache contains compiled
|
|
||||||
# dependencies and we can use it.
|
|
||||||
- CACHE_MARKER="$HOME/.cache/nvim-deps/.travis_cache_marker"
|
- CACHE_MARKER="$HOME/.cache/nvim-deps/.travis_cache_marker"
|
||||||
# default target name for functional tests
|
# default target name for functional tests
|
||||||
- FUNCTIONALTEST=functionaltest
|
- FUNCTIONALTEST=functionaltest
|
||||||
- CI_TARGET=tests
|
- CI_TARGET=tests
|
||||||
|
# Environment variables for ccache
|
||||||
|
- CCACHE_COMPRESS=1
|
||||||
|
- CCACHE_SLOPPINESS=time_macros,file_macro
|
||||||
|
- CCACHE_BASEDIR="$TRAVIS_BUILD_DIR"
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
include:
|
include:
|
||||||
- stage: sanitizers
|
|
||||||
os: linux
|
|
||||||
compiler: clang-4.0
|
|
||||||
env: >
|
|
||||||
CLANG_SANITIZER=ASAN_UBSAN
|
|
||||||
CMAKE_FLAGS="$CMAKE_FLAGS -DPREFER_LUA=ON"
|
|
||||||
- stage: normal builds
|
- stage: normal builds
|
||||||
os: linux
|
os: linux
|
||||||
compiler: gcc-5
|
compiler: clang
|
||||||
env: FUNCTIONALTEST=functionaltest-lua
|
env: >
|
||||||
|
CLANG_SANITIZER=ASAN_UBSAN
|
||||||
|
# Use Lua so that ASAN can test our embedded Lua support. 8fec4d53d0f6
|
||||||
|
CMAKE_FLAGS="$CMAKE_FLAGS -DPREFER_LUA=ON"
|
||||||
|
sudo: true
|
||||||
- os: linux
|
- os: linux
|
||||||
# Travis creates a cache per compiler.
|
compiler: gcc
|
||||||
# Set a different value here to store 32-bit
|
env: >
|
||||||
# dependencies in a separate cache.
|
FUNCTIONALTEST=functionaltest-lua
|
||||||
compiler: gcc-5 -m32
|
CMAKE_FLAGS="$CMAKE_FLAGS -DPREFER_LUA=ON"
|
||||||
|
DEPS_CMAKE_FLAGS="$DEPS_CMAKE_FLAGS -DUSE_BUNDLED_LUAJIT=OFF"
|
||||||
|
- os: linux
|
||||||
|
# Travis creates a cache per compiler. Set a different value here to
|
||||||
|
# store 32-bit dependencies in a separate cache.
|
||||||
|
compiler: gcc
|
||||||
env: BUILD_32BIT=ON
|
env: BUILD_32BIT=ON
|
||||||
- os: osx
|
- os: osx
|
||||||
compiler: clang
|
compiler: clang
|
||||||
osx_image: xcode7.3 # macOS 10.11
|
osx_image: xcode7.3 # macOS 10.11
|
||||||
- os: osx
|
- os: osx
|
||||||
compiler: gcc-4.9
|
compiler: gcc
|
||||||
osx_image: xcode7.3 # macOS 10.11
|
osx_image: xcode7.3 # macOS 10.11
|
||||||
- stage: lint
|
- os: linux
|
||||||
os: linux
|
|
||||||
env: CI_TARGET=lint
|
env: CI_TARGET=lint
|
||||||
- stage: Flaky builds
|
- stage: Flaky builds
|
||||||
os: linux
|
os: linux
|
||||||
compiler: gcc-5
|
compiler: gcc
|
||||||
env: GCOV=gcov-5 CMAKE_FLAGS="$CMAKE_FLAGS -DUSE_GCOV=ON"
|
env: GCOV=gcov CMAKE_FLAGS="$CMAKE_FLAGS -DUSE_GCOV=ON"
|
||||||
- os: linux
|
- os: linux
|
||||||
compiler: clang-4.0
|
compiler: clang
|
||||||
env: CLANG_SANITIZER=TSAN
|
env: CLANG_SANITIZER=TSAN
|
||||||
allow_failures:
|
allow_failures:
|
||||||
- env: GCOV=gcov-5 CMAKE_FLAGS="$CMAKE_FLAGS -DUSE_GCOV=ON"
|
- env: GCOV=gcov CMAKE_FLAGS="$CMAKE_FLAGS -DUSE_GCOV=ON"
|
||||||
- env: CLANG_SANITIZER=TSAN
|
- env: CLANG_SANITIZER=TSAN
|
||||||
fast_finish: true
|
fast_finish: true
|
||||||
|
|
||||||
@@ -93,31 +92,25 @@ install: ci/install.sh
|
|||||||
before_script: ci/before_script.sh
|
before_script: ci/before_script.sh
|
||||||
script: ci/script.sh
|
script: ci/script.sh
|
||||||
before_cache: ci/before_cache.sh
|
before_cache: ci/before_cache.sh
|
||||||
after_success: ci/after_success.sh
|
|
||||||
|
|
||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
sources:
|
|
||||||
- ubuntu-toolchain-r-test
|
|
||||||
- llvm-toolchain-trusty-4.0
|
|
||||||
packages:
|
packages:
|
||||||
- autoconf
|
- autoconf
|
||||||
- automake
|
- automake
|
||||||
- apport
|
- apport
|
||||||
- build-essential
|
- build-essential
|
||||||
- clang-4.0
|
- clang
|
||||||
- cmake
|
- cmake
|
||||||
- cscope
|
- cscope
|
||||||
- g++-5-multilib
|
|
||||||
- g++-multilib
|
- g++-multilib
|
||||||
- gcc-5-multilib
|
|
||||||
- gcc-multilib
|
- gcc-multilib
|
||||||
- gdb
|
- gdb
|
||||||
- language-pack-tr
|
- language-pack-tr
|
||||||
- libc6-dev-i386
|
- libc6-dev-i386
|
||||||
- libtool
|
- libtool
|
||||||
- llvm-4.0-dev
|
|
||||||
- locales
|
- locales
|
||||||
|
- ninja-build
|
||||||
- pkg-config
|
- pkg-config
|
||||||
- unzip
|
- unzip
|
||||||
- valgrind
|
- valgrind
|
||||||
@@ -129,9 +122,11 @@ branches:
|
|||||||
|
|
||||||
cache:
|
cache:
|
||||||
apt: true
|
apt: true
|
||||||
|
ccache: true
|
||||||
directories:
|
directories:
|
||||||
- "$HOME/.cache/pip"
|
- "$HOME/.cache/pip"
|
||||||
- "$HOME/.cache/nvim-deps"
|
- "$HOME/.cache/nvim-deps"
|
||||||
|
- "$HOME/.cache/nvim-deps-downloads"
|
||||||
|
|
||||||
notifications:
|
notifications:
|
||||||
webhooks:
|
webhooks:
|
||||||
|
111
CMakeLists.txt
111
CMakeLists.txt
@@ -1,3 +1,7 @@
|
|||||||
|
# CMAKE REFERENCE
|
||||||
|
# intro: https://codingnest.com/basic-cmake/
|
||||||
|
# best practices (3.0+): https://gist.github.com/mbinna/c61dbb39bca0e4fb7d1f73b0d66a4fd1
|
||||||
|
|
||||||
cmake_minimum_required(VERSION 2.8.7)
|
cmake_minimum_required(VERSION 2.8.7)
|
||||||
project(nvim)
|
project(nvim)
|
||||||
|
|
||||||
@@ -12,7 +16,11 @@ list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
|
|||||||
include(PreventInTreeBuilds)
|
include(PreventInTreeBuilds)
|
||||||
|
|
||||||
# Prefer our bundled versions of dependencies.
|
# Prefer our bundled versions of dependencies.
|
||||||
set(DEPS_PREFIX "${CMAKE_CURRENT_SOURCE_DIR}/.deps/usr" CACHE PATH "Path prefix for finding dependencies")
|
if(DEFINED ENV{DEPS_BUILD_DIR})
|
||||||
|
set(DEPS_PREFIX "$ENV{DEPS_BUILD_DIR}/usr" CACHE PATH "Path prefix for finding dependencies")
|
||||||
|
else()
|
||||||
|
set(DEPS_PREFIX "${CMAKE_CURRENT_SOURCE_DIR}/.deps/usr" CACHE PATH "Path prefix for finding dependencies")
|
||||||
|
endif()
|
||||||
if(CMAKE_CROSSCOMPILING AND NOT UNIX)
|
if(CMAKE_CROSSCOMPILING AND NOT UNIX)
|
||||||
list(INSERT CMAKE_FIND_ROOT_PATH 0 ${DEPS_PREFIX})
|
list(INSERT CMAKE_FIND_ROOT_PATH 0 ${DEPS_PREFIX})
|
||||||
list(INSERT CMAKE_PREFIX_PATH 0 ${DEPS_PREFIX}/../host/bin)
|
list(INSERT CMAKE_PREFIX_PATH 0 ${DEPS_PREFIX}/../host/bin)
|
||||||
@@ -49,6 +57,9 @@ if(WIN32 OR CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
|||||||
set(USE_FNAME_CASE TRUE)
|
set(USE_FNAME_CASE TRUE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
option(ENABLE_LIBINTL "enable libintl" ON)
|
||||||
|
option(ENABLE_LIBICONV "enable libiconv" ON)
|
||||||
|
|
||||||
# Set default build type.
|
# Set default build type.
|
||||||
if(NOT CMAKE_BUILD_TYPE)
|
if(NOT CMAKE_BUILD_TYPE)
|
||||||
message(STATUS "CMAKE_BUILD_TYPE not given, defaulting to 'Debug'.")
|
message(STATUS "CMAKE_BUILD_TYPE not given, defaulting to 'Debug'.")
|
||||||
@@ -63,12 +74,12 @@ set_property(CACHE CMAKE_BUILD_TYPE PROPERTY
|
|||||||
# If not in a git repo (e.g., a tarball) these tokens define the complete
|
# If not in a git repo (e.g., a tarball) these tokens define the complete
|
||||||
# version string, else they are combined with the result of `git describe`.
|
# version string, else they are combined with the result of `git describe`.
|
||||||
set(NVIM_VERSION_MAJOR 0)
|
set(NVIM_VERSION_MAJOR 0)
|
||||||
set(NVIM_VERSION_MINOR 2)
|
set(NVIM_VERSION_MINOR 3)
|
||||||
set(NVIM_VERSION_PATCH 2)
|
set(NVIM_VERSION_PATCH 0)
|
||||||
set(NVIM_VERSION_PRERELEASE "") # for package maintainers
|
set(NVIM_VERSION_PRERELEASE "") # for package maintainers
|
||||||
|
|
||||||
# API level
|
# API level
|
||||||
set(NVIM_API_LEVEL 3) # Bump this after any API change.
|
set(NVIM_API_LEVEL 4) # Bump this after any API change.
|
||||||
set(NVIM_API_LEVEL_COMPAT 0) # Adjust this after a _breaking_ API change.
|
set(NVIM_API_LEVEL_COMPAT 0) # Adjust this after a _breaking_ API change.
|
||||||
set(NVIM_API_PRERELEASE false)
|
set(NVIM_API_PRERELEASE false)
|
||||||
|
|
||||||
@@ -204,6 +215,7 @@ int main(void)
|
|||||||
if(MSVC)
|
if(MSVC)
|
||||||
# XXX: /W4 gives too many warnings. #3241
|
# XXX: /W4 gives too many warnings. #3241
|
||||||
add_definitions(/W3 -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE)
|
add_definitions(/W3 -D_CRT_SECURE_NO_WARNINGS -D_CRT_NONSTDC_NO_DEPRECATE)
|
||||||
|
add_definitions(-DWIN32)
|
||||||
else()
|
else()
|
||||||
add_definitions(-Wall -Wextra -pedantic -Wno-unused-parameter
|
add_definitions(-Wall -Wextra -pedantic -Wno-unused-parameter
|
||||||
-Wstrict-prototypes -std=gnu99)
|
-Wstrict-prototypes -std=gnu99)
|
||||||
@@ -223,6 +235,9 @@ endif()
|
|||||||
if(MINGW)
|
if(MINGW)
|
||||||
# Use POSIX compatible stdio in Mingw
|
# Use POSIX compatible stdio in Mingw
|
||||||
add_definitions(-D__USE_MINGW_ANSI_STDIO)
|
add_definitions(-D__USE_MINGW_ANSI_STDIO)
|
||||||
|
endif()
|
||||||
|
if(WIN32)
|
||||||
|
# Windows Vista is the minimum supported version
|
||||||
add_definitions(-D_WIN32_WINNT=0x0600)
|
add_definitions(-D_WIN32_WINNT=0x0600)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -250,13 +265,14 @@ if(HAS_DIAG_COLOR_FLAG)
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||||
if(CMAKE_CXX_COMPILER_VERSION VERSION_LESS "4.8.5")
|
# 1. Array-bounds testing is broken in some GCC versions before 4.8.5.
|
||||||
# Array-bounds testing is broken in some GCC versions before 4.8.5.
|
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56273
|
||||||
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56273
|
# 2. But _Pragma("...ignored") is broken (unresolved) in GCC 5+:
|
||||||
check_c_compiler_flag(-Wno-array-bounds HAS_NO_ARRAY_BOUNDS_FLAG)
|
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66099
|
||||||
if(HAS_NO_ARRAY_BOUNDS_FLAG)
|
# So we must disable -Warray-bounds globally for GCC (for kbtree.h, #7083).
|
||||||
add_definitions(-Wno-array-bounds)
|
check_c_compiler_flag(-Wno-array-bounds HAS_NO_ARRAY_BOUNDS_FLAG)
|
||||||
endif()
|
if(HAS_NO_ARRAY_BOUNDS_FLAG)
|
||||||
|
add_definitions(-Wno-array-bounds)
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -277,15 +293,18 @@ else()
|
|||||||
set(DEBUG 0)
|
set(DEBUG 0)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
option(LOG_LIST_ACTIONS "Add list actions logging" OFF)
|
||||||
|
|
||||||
add_definitions(-DINCLUDE_GENERATED_DECLARATIONS)
|
add_definitions(-DINCLUDE_GENERATED_DECLARATIONS)
|
||||||
|
|
||||||
if(CMAKE_COMPILER_IS_GNUCXX AND CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--no-undefined")
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--no-undefined")
|
||||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined")
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined")
|
||||||
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--no-undefined")
|
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--no-undefined")
|
||||||
|
|
||||||
# For O_CLOEXEC, O_DIRECTORY, and O_NOFOLLOW flags on older systems
|
# For O_CLOEXEC, O_DIRECTORY, and O_NOFOLLOW flags on older systems
|
||||||
# (pre POSIX.1-2008: glibc 2.11 and earlier). #4042
|
# (pre POSIX.1-2008: glibc 2.11 and earlier). #4042
|
||||||
|
# For ptsname(). #6743
|
||||||
add_definitions(-D_GNU_SOURCE)
|
add_definitions(-D_GNU_SOURCE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -319,6 +338,7 @@ if(PREFER_LUA)
|
|||||||
find_package(Lua REQUIRED)
|
find_package(Lua REQUIRED)
|
||||||
set(LUA_PREFERRED_INCLUDE_DIRS ${LUA_INCLUDE_DIR})
|
set(LUA_PREFERRED_INCLUDE_DIRS ${LUA_INCLUDE_DIR})
|
||||||
set(LUA_PREFERRED_LIBRARIES ${LUA_LIBRARIES})
|
set(LUA_PREFERRED_LIBRARIES ${LUA_LIBRARIES})
|
||||||
|
# Passive (not REQUIRED): if LUAJIT_FOUND is not set, nvim-test is skipped.
|
||||||
find_package(LuaJit)
|
find_package(LuaJit)
|
||||||
else()
|
else()
|
||||||
find_package(LuaJit REQUIRED)
|
find_package(LuaJit REQUIRED)
|
||||||
@@ -387,31 +407,30 @@ if((CLANG_ASAN_UBSAN OR CLANG_MSAN OR CLANG_TSAN) AND NOT CMAKE_C_COMPILER_ID MA
|
|||||||
message(FATAL_ERROR "Sanitizers are only supported for Clang.")
|
message(FATAL_ERROR "Sanitizers are only supported for Clang.")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(CMAKE_SYSTEM_NAME MATCHES "OpenBSD|FreeBSD")
|
if(CMAKE_SYSTEM_NAME MATCHES "OpenBSD|FreeBSD|Windows") # see #5318
|
||||||
message(STATUS "detected OpenBSD/FreeBSD; disabled jemalloc. #5318")
|
message(STATUS "skipping jemalloc on this system: ${CMAKE_SYSTEM_NAME}")
|
||||||
option(ENABLE_JEMALLOC "enable jemalloc" OFF)
|
option(ENABLE_JEMALLOC "enable jemalloc" OFF)
|
||||||
else()
|
else()
|
||||||
option(ENABLE_JEMALLOC "enable jemalloc" ON)
|
option(ENABLE_JEMALLOC "enable jemalloc" ON)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if (ENABLE_JEMALLOC)
|
if(ENABLE_JEMALLOC)
|
||||||
if(CLANG_ASAN_UBSAN OR CLANG_MSAN OR CLANG_TSAN)
|
if(CLANG_ASAN_UBSAN OR CLANG_MSAN OR CLANG_TSAN)
|
||||||
message(STATUS "Sanitizers have been enabled; don't use jemalloc.")
|
message(STATUS "Sanitizers have been enabled; don't use jemalloc.")
|
||||||
else()
|
else()
|
||||||
find_package(JeMalloc)
|
find_package(JeMalloc REQUIRED)
|
||||||
if(JEMALLOC_FOUND)
|
include_directories(SYSTEM ${JEMALLOC_INCLUDE_DIRS})
|
||||||
include_directories(SYSTEM ${JEMALLOC_INCLUDE_DIRS})
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
find_package(LibIntl)
|
if(ENABLE_LIBINTL)
|
||||||
if(LibIntl_FOUND)
|
# LibIntl (not Intl) selects our FindLibIntl.cmake script. #8464
|
||||||
|
find_package(LibIntl REQUIRED)
|
||||||
include_directories(SYSTEM ${LibIntl_INCLUDE_DIRS})
|
include_directories(SYSTEM ${LibIntl_INCLUDE_DIRS})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
find_package(Iconv)
|
if(ENABLE_LIBICONV)
|
||||||
if(Iconv_FOUND)
|
find_package(Iconv REQUIRED)
|
||||||
include_directories(SYSTEM ${Iconv_INCLUDE_DIRS})
|
include_directories(SYSTEM ${Iconv_INCLUDE_DIRS})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@@ -498,6 +517,11 @@ add_subdirectory(test/includes)
|
|||||||
add_subdirectory(config)
|
add_subdirectory(config)
|
||||||
add_subdirectory(test/functional/fixtures) # compile test programs
|
add_subdirectory(test/functional/fixtures) # compile test programs
|
||||||
add_subdirectory(runtime)
|
add_subdirectory(runtime)
|
||||||
|
if(WIN32)
|
||||||
|
install_helper(
|
||||||
|
FILES ${DEPS_PREFIX}/share/nvim-qt/runtime/plugin/nvim_gui_shim.vim
|
||||||
|
DESTINATION ${CMAKE_INSTALL_DATAROOTDIR}/nvim-qt/runtime/plugin)
|
||||||
|
endif()
|
||||||
|
|
||||||
# Setup some test-related bits. We do this after going down the tree because we
|
# Setup some test-related bits. We do this after going down the tree because we
|
||||||
# need some of the targets.
|
# need some of the targets.
|
||||||
@@ -505,17 +529,6 @@ if(BUSTED_PRG)
|
|||||||
get_property(TEST_INCLUDE_DIRS DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
get_property(TEST_INCLUDE_DIRS DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
PROPERTY INCLUDE_DIRECTORIES)
|
PROPERTY INCLUDE_DIRECTORIES)
|
||||||
|
|
||||||
# Set policy CMP0026 to OLD so we avoid CMake warnings on newer
|
|
||||||
# versions of cmake.
|
|
||||||
if(POLICY CMP0026)
|
|
||||||
cmake_policy(SET CMP0026 OLD)
|
|
||||||
endif()
|
|
||||||
if(CMAKE_GENERATOR MATCHES "Visual Studio")
|
|
||||||
set(TEST_LIBNVIM_PATH ${CMAKE_BINARY_DIR}/lib/nvim-test.dll)
|
|
||||||
else()
|
|
||||||
get_target_property(TEST_LIBNVIM_PATH nvim-test LOCATION)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
# When running tests from 'ninja' we need to use the
|
# When running tests from 'ninja' we need to use the
|
||||||
# console pool: to do so we need to use the USES_TERMINAL
|
# console pool: to do so we need to use the USES_TERMINAL
|
||||||
# option, but this is only available in CMake 3.2
|
# option, but this is only available in CMake 3.2
|
||||||
@@ -524,10 +537,6 @@ if(BUSTED_PRG)
|
|||||||
list(APPEND TEST_TARGET_ARGS "USES_TERMINAL")
|
list(APPEND TEST_TARGET_ARGS "USES_TERMINAL")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
configure_file(
|
|
||||||
test/config/paths.lua.in
|
|
||||||
${CMAKE_BINARY_DIR}/test/config/paths.lua)
|
|
||||||
|
|
||||||
set(UNITTEST_PREREQS nvim-test unittest-headers)
|
set(UNITTEST_PREREQS nvim-test unittest-headers)
|
||||||
set(FUNCTIONALTEST_PREREQS nvim printargs-test shell-test)
|
set(FUNCTIONALTEST_PREREQS nvim printargs-test shell-test)
|
||||||
if(NOT WIN32)
|
if(NOT WIN32)
|
||||||
@@ -564,6 +573,32 @@ if(BUSTED_PRG)
|
|||||||
message(WARNING "disabling unit tests: no Luajit FFI in ${LUA_PRG}")
|
message(WARNING "disabling unit tests: no Luajit FFI in ${LUA_PRG}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
if(${CMAKE_VERSION} VERSION_LESS 2.8.12)
|
||||||
|
if(CMAKE_GENERATOR MATCHES "Visual Studio")
|
||||||
|
set(TEST_LIBNVIM_PATH ${CMAKE_BINARY_DIR}/lib/nvim-test.dll)
|
||||||
|
else()
|
||||||
|
get_target_property(TEST_LIBNVIM_PATH nvim-test LOCATION)
|
||||||
|
endif()
|
||||||
|
configure_file(
|
||||||
|
${CMAKE_SOURCE_DIR}/test/config/paths.lua.in
|
||||||
|
${CMAKE_BINARY_DIR}/test/config/paths.lua)
|
||||||
|
else()
|
||||||
|
# To avoid duplicating paths.lua.in while we still support CMake < 2.8.12,
|
||||||
|
# use configure_file() to add the generator expression and then generate
|
||||||
|
# the final file
|
||||||
|
if(LUA_HAS_FFI)
|
||||||
|
set(TEST_LIBNVIM_PATH $<TARGET_FILE:nvim-test>)
|
||||||
|
else()
|
||||||
|
set(TEST_LIBNVIM_PATH "")
|
||||||
|
endif()
|
||||||
|
configure_file(
|
||||||
|
${CMAKE_SOURCE_DIR}/test/config/paths.lua.in
|
||||||
|
${CMAKE_BINARY_DIR}/test/config/paths.lua.gen)
|
||||||
|
file(GENERATE
|
||||||
|
OUTPUT ${CMAKE_BINARY_DIR}/test/config/paths.lua
|
||||||
|
INPUT ${CMAKE_BINARY_DIR}/test/config/paths.lua.gen)
|
||||||
|
endif()
|
||||||
|
|
||||||
add_custom_target(functionaltest
|
add_custom_target(functionaltest
|
||||||
COMMAND ${CMAKE_COMMAND}
|
COMMAND ${CMAKE_COMMAND}
|
||||||
-DBUSTED_PRG=${BUSTED_PRG}
|
-DBUSTED_PRG=${BUSTED_PRG}
|
||||||
|
@@ -14,8 +14,15 @@ low-risk/isolated tasks:
|
|||||||
Developer guidelines
|
Developer guidelines
|
||||||
--------------------
|
--------------------
|
||||||
|
|
||||||
- Nvim developers should read `:help dev-help`.
|
- Nvim contributors should read `:help dev` (especially `:help dev-api`).
|
||||||
- External UI developers should read `:help dev-ui`.
|
- External UI developers should read `:help dev-ui`.
|
||||||
|
- API client developers should read `:help dev-api-client`.
|
||||||
|
- Nvim developers are _strongly encouraged_ to install `ninja` for faster builds.
|
||||||
|
```
|
||||||
|
sudo apt-get install ninja-build
|
||||||
|
make distclean
|
||||||
|
make # Nvim build system uses ninja automatically, if available.
|
||||||
|
```
|
||||||
|
|
||||||
Reporting problems
|
Reporting problems
|
||||||
------------------
|
------------------
|
||||||
@@ -24,7 +31,7 @@ Reporting problems
|
|||||||
- Search [existing issues][github-issues] (including closed!)
|
- Search [existing issues][github-issues] (including closed!)
|
||||||
- Update Neovim to the latest version to see if your problem persists.
|
- Update Neovim to the latest version to see if your problem persists.
|
||||||
- Disable plugins incrementally, to narrow down the cause of the issue.
|
- Disable plugins incrementally, to narrow down the cause of the issue.
|
||||||
- When reporting a crash, include a stacktrace.
|
- When reporting a crash, [include a stacktrace](https://github.com/neovim/neovim/wiki/Development-tips#backtrace-linux).
|
||||||
- [Bisect][git-bisect] to the cause of a regression, if you are able. This is _extremely_ helpful.
|
- [Bisect][git-bisect] to the cause of a regression, if you are able. This is _extremely_ helpful.
|
||||||
- Check `$NVIM_LOG_FILE`, if it exists.
|
- Check `$NVIM_LOG_FILE`, if it exists.
|
||||||
- Include `cmake --system-information` for **build** issues.
|
- Include `cmake --system-information` for **build** issues.
|
||||||
@@ -92,7 +99,7 @@ and [AppVeyor].
|
|||||||
- CI builds are compiled with [`-Werror`][gcc-warnings], so compiler warnings
|
- CI builds are compiled with [`-Werror`][gcc-warnings], so compiler warnings
|
||||||
will fail the build.
|
will fail the build.
|
||||||
- If any tests fail, the build will fail.
|
- If any tests fail, the build will fail.
|
||||||
See [Building Neovim#running-tests][wiki-run-tests] to run tests locally.
|
See [test/README.md#running-tests][run-tests] to run tests locally.
|
||||||
Passing locally doesn't guarantee passing the CI build, because of the
|
Passing locally doesn't guarantee passing the CI build, because of the
|
||||||
different compilers and platforms tested against.
|
different compilers and platforms tested against.
|
||||||
- CI runs [ASan] and other analyzers.
|
- CI runs [ASan] and other analyzers.
|
||||||
@@ -157,7 +164,7 @@ shows each commit's diff. To show the whole surrounding function of a change
|
|||||||
as context, use the `-W` argument as well.
|
as context, use the `-W` argument as well.
|
||||||
|
|
||||||
[gcc-warnings]: https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
|
[gcc-warnings]: https://gcc.gnu.org/onlinedocs/gcc/Warning-Options.html
|
||||||
[git-bisect]: http://git-scm.com/book/tr/v2/Git-Tools-Debugging-with-Git
|
[git-bisect]: http://git-scm.com/book/en/v2/Git-Tools-Debugging-with-Git
|
||||||
[git-feature-branch]: https://www.atlassian.com/git/tutorials/comparing-workflows
|
[git-feature-branch]: https://www.atlassian.com/git/tutorials/comparing-workflows
|
||||||
[git-history-filtering]: https://www.atlassian.com/git/tutorials/git-log/filtering-the-commit-history
|
[git-history-filtering]: https://www.atlassian.com/git/tutorials/git-log/filtering-the-commit-history
|
||||||
[git-history-rewriting]: http://git-scm.com/book/en/v2/Git-Tools-Rewriting-History
|
[git-history-rewriting]: http://git-scm.com/book/en/v2/Git-Tools-Rewriting-History
|
||||||
@@ -168,7 +175,7 @@ as context, use the `-W` argument as well.
|
|||||||
[hygiene]: http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html
|
[hygiene]: http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html
|
||||||
[style-guide]: http://neovim.io/develop/style-guide.xml
|
[style-guide]: http://neovim.io/develop/style-guide.xml
|
||||||
[ASan]: http://clang.llvm.org/docs/AddressSanitizer.html
|
[ASan]: http://clang.llvm.org/docs/AddressSanitizer.html
|
||||||
[wiki-run-tests]: https://github.com/neovim/neovim/wiki/Building-Neovim#running-tests
|
[run-tests]: https://github.com/neovim/neovim/blob/master/test/README.md#running-tests
|
||||||
[wiki-faq]: https://github.com/neovim/neovim/wiki/FAQ
|
[wiki-faq]: https://github.com/neovim/neovim/wiki/FAQ
|
||||||
[review-checklist]: https://github.com/neovim/neovim/wiki/Code-review-checklist
|
[review-checklist]: https://github.com/neovim/neovim/wiki/Code-review-checklist
|
||||||
[3174]: https://github.com/neovim/neovim/issues/3174
|
[3174]: https://github.com/neovim/neovim/issues/3174
|
||||||
|
27
Makefile
27
Makefile
@@ -1,3 +1,4 @@
|
|||||||
|
THIS_DIR = $(shell pwd)
|
||||||
filter-false = $(strip $(filter-out 0 off OFF false FALSE,$1))
|
filter-false = $(strip $(filter-out 0 off OFF false FALSE,$1))
|
||||||
filter-true = $(strip $(filter-out 1 on ON true TRUE,$1))
|
filter-true = $(strip $(filter-out 1 on ON true TRUE,$1))
|
||||||
|
|
||||||
@@ -8,11 +9,14 @@ CMAKE_PRG ?= $(shell (command -v cmake3 || echo cmake))
|
|||||||
CMAKE_BUILD_TYPE ?= Debug
|
CMAKE_BUILD_TYPE ?= Debug
|
||||||
|
|
||||||
CMAKE_FLAGS := -DCMAKE_BUILD_TYPE=$(CMAKE_BUILD_TYPE)
|
CMAKE_FLAGS := -DCMAKE_BUILD_TYPE=$(CMAKE_BUILD_TYPE)
|
||||||
DOC_DOWNLOAD_URL_BASE := https://raw.githubusercontent.com/neovim/doc/gh-pages
|
|
||||||
CLINT_ERRORS_FILE_PATH := /reports/clint/errors.json
|
|
||||||
|
|
||||||
BUILD_TYPE ?= $(shell (type ninja > /dev/null 2>&1 && echo "Ninja") || \
|
BUILD_TYPE ?= $(shell (type ninja > /dev/null 2>&1 && echo "Ninja") || \
|
||||||
echo "Unix Makefiles")
|
echo "Unix Makefiles")
|
||||||
|
DEPS_BUILD_DIR ?= .deps
|
||||||
|
|
||||||
|
ifneq (1,$(words [$(DEPS_BUILD_DIR)]))
|
||||||
|
$(error DEPS_BUILD_DIR must not contain whitespace)
|
||||||
|
endif
|
||||||
|
|
||||||
ifeq (,$(BUILD_TOOL))
|
ifeq (,$(BUILD_TOOL))
|
||||||
ifeq (Ninja,$(BUILD_TYPE))
|
ifeq (Ninja,$(BUILD_TYPE))
|
||||||
@@ -48,7 +52,7 @@ endif
|
|||||||
|
|
||||||
ifneq (,$(findstring functionaltest-lua,$(MAKECMDGOALS)))
|
ifneq (,$(findstring functionaltest-lua,$(MAKECMDGOALS)))
|
||||||
BUNDLED_LUA_CMAKE_FLAG := -DUSE_BUNDLED_LUA=ON
|
BUNDLED_LUA_CMAKE_FLAG := -DUSE_BUNDLED_LUA=ON
|
||||||
$(shell [ -x .deps/usr/bin/lua ] || rm build/.ran-*)
|
$(shell [ -x $(DEPS_BUILD_DIR)/usr/bin/lua ] || rm build/.ran-*)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
# For use where we want to make sure only a single job is run. This does issue
|
# For use where we want to make sure only a single job is run. This does issue
|
||||||
@@ -68,20 +72,20 @@ cmake:
|
|||||||
$(MAKE) build/.ran-cmake
|
$(MAKE) build/.ran-cmake
|
||||||
|
|
||||||
build/.ran-cmake: | deps
|
build/.ran-cmake: | deps
|
||||||
cd build && $(CMAKE_PRG) -G '$(BUILD_TYPE)' $(CMAKE_FLAGS) $(CMAKE_EXTRA_FLAGS) ..
|
cd build && $(CMAKE_PRG) -G '$(BUILD_TYPE)' $(CMAKE_FLAGS) $(CMAKE_EXTRA_FLAGS) $(THIS_DIR)
|
||||||
touch $@
|
touch $@
|
||||||
|
|
||||||
deps: | build/.ran-third-party-cmake
|
deps: | build/.ran-third-party-cmake
|
||||||
ifeq ($(call filter-true,$(USE_BUNDLED_DEPS)),)
|
ifeq ($(call filter-true,$(USE_BUNDLED_DEPS)),)
|
||||||
+$(BUILD_CMD) -C .deps
|
+$(BUILD_CMD) -C $(DEPS_BUILD_DIR)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
build/.ran-third-party-cmake:
|
build/.ran-third-party-cmake:
|
||||||
ifeq ($(call filter-true,$(USE_BUNDLED_DEPS)),)
|
ifeq ($(call filter-true,$(USE_BUNDLED_DEPS)),)
|
||||||
mkdir -p .deps
|
mkdir -p $(DEPS_BUILD_DIR)
|
||||||
cd .deps && \
|
cd $(DEPS_BUILD_DIR) && \
|
||||||
$(CMAKE_PRG) -G '$(BUILD_TYPE)' $(BUNDLED_CMAKE_FLAG) $(BUNDLED_LUA_CMAKE_FLAG) \
|
$(CMAKE_PRG) -G '$(BUILD_TYPE)' $(BUNDLED_CMAKE_FLAG) $(BUNDLED_LUA_CMAKE_FLAG) \
|
||||||
$(DEPS_CMAKE_FLAGS) ../third-party
|
$(DEPS_CMAKE_FLAGS) $(THIS_DIR)/third-party
|
||||||
endif
|
endif
|
||||||
mkdir -p build
|
mkdir -p build
|
||||||
touch $@
|
touch $@
|
||||||
@@ -124,7 +128,7 @@ clean:
|
|||||||
$(MAKE) -C runtime/doc clean
|
$(MAKE) -C runtime/doc clean
|
||||||
|
|
||||||
distclean: clean
|
distclean: clean
|
||||||
rm -rf .deps build
|
rm -rf $(DEPS_BUILD_DIR) build
|
||||||
|
|
||||||
install: | nvim
|
install: | nvim
|
||||||
+$(BUILD_CMD) -C build install
|
+$(BUILD_CMD) -C build install
|
||||||
@@ -141,6 +145,11 @@ check-single-includes: build/.ran-cmake
|
|||||||
appimage:
|
appimage:
|
||||||
bash scripts/genappimage.sh
|
bash scripts/genappimage.sh
|
||||||
|
|
||||||
|
# Build an appimage with embedded update information appimage-nightly for
|
||||||
|
# nightly builds or appimage-latest for a release
|
||||||
|
appimage-%:
|
||||||
|
bash scripts/genappimage.sh $*
|
||||||
|
|
||||||
lint: check-single-includes clint testlint lualint
|
lint: check-single-includes clint testlint lualint
|
||||||
|
|
||||||
.PHONY: test testlint lualint functionaltest unittest lint clint clean distclean nvim libnvim cmake deps install appimage
|
.PHONY: test testlint lualint functionaltest unittest lint clint clean distclean nvim libnvim cmake deps install appimage
|
||||||
|
16
README.md
16
README.md
@@ -11,10 +11,11 @@
|
|||||||
[](https://codecov.io/gh/neovim/neovim)
|
[](https://codecov.io/gh/neovim/neovim)
|
||||||
[](https://scan.coverity.com/projects/2227)
|
[](https://scan.coverity.com/projects/2227)
|
||||||
[](https://neovim.io/doc/reports/clang)
|
[](https://neovim.io/doc/reports/clang)
|
||||||
[](https://neovim.io/doc/reports/pvs)
|
[](https://neovim.io/doc/reports/pvs/PVS-studio.html.d)
|
||||||
|
|
||||||
|
[](https://repology.org/metapackage/neovim)
|
||||||
[](https://buildd.debian.org/neovim)
|
[](https://buildd.debian.org/neovim)
|
||||||
[](https://github.com/neovim/neovim/releases/)
|
[](https://github.com/neovim/neovim/releases/)
|
||||||
|
|
||||||
Neovim is a project that seeks to aggressively refactor Vim in order to:
|
Neovim is a project that seeks to aggressively refactor Vim in order to:
|
||||||
|
|
||||||
@@ -34,11 +35,17 @@ Install from source
|
|||||||
make CMAKE_BUILD_TYPE=RelWithDebInfo
|
make CMAKE_BUILD_TYPE=RelWithDebInfo
|
||||||
sudo make install
|
sudo make install
|
||||||
|
|
||||||
To install to a non-default location, specify `CMAKE_INSTALL_PREFIX`:
|
To install to a non-default location, set `CMAKE_INSTALL_PREFIX`:
|
||||||
|
|
||||||
make CMAKE_EXTRA_FLAGS="-DCMAKE_INSTALL_PREFIX=/full/path/"
|
make CMAKE_EXTRA_FLAGS="-DCMAKE_INSTALL_PREFIX=/full/path/"
|
||||||
make install
|
make install
|
||||||
|
|
||||||
|
To list all targets:
|
||||||
|
|
||||||
|
cmake --build build --target help
|
||||||
|
|
||||||
|
To skip "bundled" dependencies define `USE_BUNDLED_DEPS=NO` (CMake option: `USE_BUNDLED=NO`).
|
||||||
|
|
||||||
See [the wiki](https://github.com/neovim/neovim/wiki/Building-Neovim) for details.
|
See [the wiki](https://github.com/neovim/neovim/wiki/Building-Neovim) for details.
|
||||||
|
|
||||||
Install from package
|
Install from package
|
||||||
@@ -69,9 +76,6 @@ Project layout
|
|||||||
├─ third-party/ cmake subproject to build dependencies
|
├─ third-party/ cmake subproject to build dependencies
|
||||||
└─ test/ tests (see test/README.md)
|
└─ test/ tests (see test/README.md)
|
||||||
|
|
||||||
- To disable `third-party/` specify `USE_BUNDLED_DEPS=NO` or `USE_BUNDLED=NO`
|
|
||||||
(CMake option).
|
|
||||||
|
|
||||||
Features
|
Features
|
||||||
--------
|
--------
|
||||||
|
|
||||||
|
@@ -1,7 +1,10 @@
|
|||||||
version: '{build}'
|
version: '{build}'
|
||||||
environment:
|
environment:
|
||||||
APPVEYOR_CACHE_ENTRY_ZIP_ARGS: "-t7z -m0=lzma -mx=9"
|
APPVEYOR_CACHE_ENTRY_ZIP_ARGS: "-t7z -m0=lzma -mx=9"
|
||||||
|
image: Visual Studio 2017
|
||||||
configuration:
|
configuration:
|
||||||
|
- MSVC_64
|
||||||
|
- MSVC_32
|
||||||
- MINGW_64
|
- MINGW_64
|
||||||
- MINGW_32
|
- MINGW_32
|
||||||
- MINGW_64-gcov
|
- MINGW_64-gcov
|
||||||
@@ -9,10 +12,12 @@ matrix:
|
|||||||
allow_failures:
|
allow_failures:
|
||||||
- configuration: MINGW_64-gcov
|
- configuration: MINGW_64-gcov
|
||||||
install: []
|
install: []
|
||||||
|
before_build:
|
||||||
|
- ps: Install-Product node 8
|
||||||
build_script:
|
build_script:
|
||||||
- call ci\build.bat
|
- powershell ci\build.ps1
|
||||||
cache:
|
cache:
|
||||||
- C:\msys64\var\cache\pacman\pkg -> ci\build.bat
|
- C:\msys64\var\cache\pacman\pkg -> ci\build.ps1
|
||||||
- .deps -> third-party\**
|
- .deps -> third-party\**
|
||||||
artifacts:
|
artifacts:
|
||||||
- path: build/Neovim.zip
|
- path: build/Neovim.zip
|
||||||
|
@@ -1,9 +0,0 @@
|
|||||||
#!/usr/bin/env bash
|
|
||||||
|
|
||||||
set -e
|
|
||||||
set -o pipefail
|
|
||||||
|
|
||||||
if [[ -n "${GCOV}" ]]; then
|
|
||||||
coveralls --gcov "$(which "${GCOV}")" --encoding iso-8859-1 || echo 'coveralls upload failed.'
|
|
||||||
bash <(curl -s https://codecov.io/bash) || echo 'codecov upload failed.'
|
|
||||||
fi
|
|
@@ -4,16 +4,27 @@ set -e
|
|||||||
set -o pipefail
|
set -o pipefail
|
||||||
|
|
||||||
CI_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
CI_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
|
source "${CI_DIR}/common/build.sh"
|
||||||
source "${CI_DIR}/common/suite.sh"
|
source "${CI_DIR}/common/suite.sh"
|
||||||
|
|
||||||
# Don't cache pip's log and selfcheck.
|
# Don't cache pip's log and selfcheck.
|
||||||
rm -rf "${HOME}/.cache/pip/log"
|
rm -rf "${HOME}/.cache/pip/log"
|
||||||
rm -f "${HOME}/.cache/pip/selfcheck.json"
|
rm -f "${HOME}/.cache/pip/selfcheck.json"
|
||||||
|
|
||||||
|
echo "before_cache.sh: cache size"
|
||||||
|
du -d 2 "${HOME}/.cache" | sort -n
|
||||||
|
|
||||||
|
echo "before_cache.sh: ccache stats"
|
||||||
|
ccache -s 2>/dev/null || true
|
||||||
|
|
||||||
# Update the third-party dependency cache only if the build was successful.
|
# Update the third-party dependency cache only if the build was successful.
|
||||||
if ended_successfully; then
|
if ended_successfully; then
|
||||||
rm -rf "${HOME}/.cache/nvim-deps"
|
rm -rf "${HOME}/.cache/nvim-deps"
|
||||||
mv "${DEPS_BUILD_DIR}" "${HOME}/.cache/nvim-deps"
|
mv "${DEPS_BUILD_DIR}" "${HOME}/.cache/nvim-deps"
|
||||||
|
|
||||||
|
rm -rf "${HOME}/.cache/nvim-deps-downloads"
|
||||||
|
mv "${DEPS_DOWNLOAD_DIR}" "${HOME}/.cache/nvim-deps-downloads"
|
||||||
|
|
||||||
touch "${CACHE_MARKER}"
|
touch "${CACHE_MARKER}"
|
||||||
echo "Updated third-party dependencies (timestamp: $(stat -c '%y' "${CACHE_MARKER}"))."
|
echo "Updated third-party dependencies (timestamp: $(_stat "${CACHE_MARKER}"))."
|
||||||
fi
|
fi
|
||||||
|
@@ -23,17 +23,26 @@ echo 'python info:'
|
|||||||
2>&1 pyenv versions || true
|
2>&1 pyenv versions || true
|
||||||
) | sed 's/^/ /'
|
) | sed 's/^/ /'
|
||||||
|
|
||||||
echo "Upgrade Python 2 pip."
|
|
||||||
pip2.7 -q install --user --upgrade pip
|
|
||||||
|
|
||||||
if [[ "${TRAVIS_OS_NAME}" == osx ]]; then
|
if [[ "${TRAVIS_OS_NAME}" == osx ]]; then
|
||||||
echo "Install Python 3."
|
echo "Upgrade Python 3."
|
||||||
brew install python3
|
brew upgrade python
|
||||||
echo "Upgrade Python 3 pip."
|
echo "Upgrade Python 3 pip."
|
||||||
pip3 -q install --user --upgrade pip
|
pip3 -q install --user --upgrade pip
|
||||||
else
|
else
|
||||||
|
echo "Upgrade Python 2 pip."
|
||||||
|
pip2.7 -q install --user --upgrade pip
|
||||||
echo "Upgrade Python 3 pip."
|
echo "Upgrade Python 3 pip."
|
||||||
# Allow failure. pyenv pip3 on travis is broken:
|
# Allow failure. pyenv pip3 on travis is broken:
|
||||||
# https://github.com/travis-ci/travis-ci/issues/8363
|
# https://github.com/travis-ci/travis-ci/issues/8363
|
||||||
pip3 -q install --user --upgrade pip || true
|
pip3 -q install --user --upgrade pip || true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
echo "Install node (LTS)"
|
||||||
|
|
||||||
|
if [[ "${TRAVIS_OS_NAME}" == osx ]] || [ ! -f ~/.nvm/nvm.sh ]; then
|
||||||
|
curl -o ~/.nvm/nvm.sh https://raw.githubusercontent.com/creationix/nvm/master/nvm.sh
|
||||||
|
fi
|
||||||
|
|
||||||
|
source ~/.nvm/nvm.sh
|
||||||
|
nvm install --lts
|
||||||
|
nvm use --lts
|
||||||
|
@@ -20,6 +20,9 @@ if [[ -n "${LLVM_SYMBOLIZER}" ]] && [[ ! $(type -P "${LLVM_SYMBOLIZER}") ]]; the
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# Show ccache stats so we can compare in before_cache
|
||||||
|
ccache -s 2>/dev/null || true
|
||||||
|
|
||||||
if [[ "${TRAVIS_OS_NAME}" == osx ]]; then
|
if [[ "${TRAVIS_OS_NAME}" == osx ]]; then
|
||||||
# Adds user to a dummy group.
|
# Adds user to a dummy group.
|
||||||
# That allows to test changing the group of the file by `os_fchown`.
|
# That allows to test changing the group of the file by `os_fchown`.
|
||||||
|
62
ci/build.bat
62
ci/build.bat
@@ -1,62 +0,0 @@
|
|||||||
:: These are native MinGW builds, but they use the toolchain inside
|
|
||||||
:: MSYS2, this allows using all the dependencies and tools available
|
|
||||||
:: in MSYS2, but we cannot build inside the MSYS2 shell.
|
|
||||||
echo on
|
|
||||||
if "%CONFIGURATION%" == "MINGW_32" (
|
|
||||||
set ARCH=i686
|
|
||||||
set BITS=32
|
|
||||||
) else (
|
|
||||||
set ARCH=x86_64
|
|
||||||
set BITS=64
|
|
||||||
)
|
|
||||||
if "%CONFIGURATION%" == "MINGW_64-gcov" (
|
|
||||||
set USE_GCOV="-DUSE_GCOV=ON"
|
|
||||||
)
|
|
||||||
|
|
||||||
:: We cannot have sh.exe in the PATH (MinGW)
|
|
||||||
set PATH=%PATH:C:\Program Files\Git\usr\bin;=%
|
|
||||||
set PATH=C:\msys64\mingw%BITS%\bin;C:\Windows\System32;C:\Windows;%PATH%
|
|
||||||
:: The default cpack in the PATH is not CMake
|
|
||||||
set PATH=C:\Program Files (x86)\CMake\bin\cpack.exe;%PATH%
|
|
||||||
|
|
||||||
:: Build third-party dependencies
|
|
||||||
C:\msys64\usr\bin\bash -lc "pacman --verbose --noconfirm -Su" || goto :error
|
|
||||||
C:\msys64\usr\bin\bash -lc "pacman --verbose --noconfirm --needed -S mingw-w64-%ARCH%-cmake mingw-w64-%ARCH%-perl mingw-w64-%ARCH%-diffutils mingw-w64-%ARCH%-unibilium gperf" || goto :error
|
|
||||||
|
|
||||||
:: Setup python (use AppVeyor system python)
|
|
||||||
C:\Python27\python.exe -m pip install neovim || goto :error
|
|
||||||
C:\Python35\python.exe -m pip install neovim || goto :error
|
|
||||||
:: Disambiguate python3
|
|
||||||
move c:\Python35\python.exe c:\Python35\python3.exe
|
|
||||||
set PATH=C:\Python35;C:\Python27;%PATH%
|
|
||||||
:: Sanity check
|
|
||||||
python -c "import neovim; print(str(neovim))" || goto :error
|
|
||||||
python3 -c "import neovim; print(str(neovim))" || goto :error
|
|
||||||
|
|
||||||
mkdir .deps
|
|
||||||
cd .deps
|
|
||||||
cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=RelWithDebInfo ..\third-party\ || goto :error
|
|
||||||
mingw32-make VERBOSE=1 || goto :error
|
|
||||||
cd ..
|
|
||||||
|
|
||||||
:: Build Neovim
|
|
||||||
mkdir build
|
|
||||||
cd build
|
|
||||||
cmake -G "MinGW Makefiles" -DCMAKE_BUILD_TYPE=RelWithDebInfo -DBUSTED_OUTPUT_TYPE=nvim %USE_GCOV% -DGPERF_PRG="C:\msys64\usr\bin\gperf.exe" .. || goto :error
|
|
||||||
mingw32-make VERBOSE=1 || goto :error
|
|
||||||
bin\nvim --version || goto :error
|
|
||||||
|
|
||||||
:: Functional tests
|
|
||||||
mingw32-make functionaltest VERBOSE=1 || goto :error
|
|
||||||
|
|
||||||
if defined USE_GCOV (
|
|
||||||
C:\msys64\usr\bin\bash -lc "cd /c/projects/neovim; bash <(curl -s https://codecov.io/bash) || echo 'codecov upload failed.'"
|
|
||||||
)
|
|
||||||
|
|
||||||
:: Build artifacts
|
|
||||||
cpack -G ZIP -C RelWithDebInfo
|
|
||||||
if defined APPVEYOR_REPO_TAG_NAME cpack -G NSIS -C RelWithDebInfo
|
|
||||||
|
|
||||||
goto :EOF
|
|
||||||
:error
|
|
||||||
exit /b %errorlevel%
|
|
129
ci/build.ps1
Normal file
129
ci/build.ps1
Normal file
@@ -0,0 +1,129 @@
|
|||||||
|
Set-PSDebug -Trace 1
|
||||||
|
|
||||||
|
$env:CONFIGURATION -match '^(?<compiler>\w+)_(?<bits>32|64)(?:-(?<option>\w+))?$'
|
||||||
|
$compiler = $Matches.compiler
|
||||||
|
$compileOption = $Matches.option
|
||||||
|
$bits = $Matches.bits
|
||||||
|
$cmakeBuildType = 'RelWithDebInfo'
|
||||||
|
$depsCmakeVars = @{
|
||||||
|
CMAKE_BUILD_TYPE = $cmakeBuildType;
|
||||||
|
}
|
||||||
|
$nvimCmakeVars = @{
|
||||||
|
CMAKE_BUILD_TYPE = $cmakeBuildType;
|
||||||
|
BUSTED_OUTPUT_TYPE = 'nvim';
|
||||||
|
}
|
||||||
|
|
||||||
|
# For pull requests, skip some build configurations to save time.
|
||||||
|
if ($env:APPVEYOR_PULL_REQUEST_HEAD_COMMIT -and $env:CONFIGURATION -match '^(MSVC_64|MINGW_32)$') {
|
||||||
|
exit 0
|
||||||
|
}
|
||||||
|
|
||||||
|
function exitIfFailed() {
|
||||||
|
if ($LastExitCode -ne 0) {
|
||||||
|
exit $LastExitCode
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($compiler -eq 'MINGW') {
|
||||||
|
if ($bits -eq 32) {
|
||||||
|
$arch = 'i686'
|
||||||
|
}
|
||||||
|
elseif ($bits -eq 64) {
|
||||||
|
$arch = 'x86_64'
|
||||||
|
}
|
||||||
|
if ($compileOption -eq 'gcov') {
|
||||||
|
$nvimCmakeVars['USE_GCOV'] = 'ON'
|
||||||
|
$uploadToCodecov = $true
|
||||||
|
}
|
||||||
|
# These are native MinGW builds, but they use the toolchain inside
|
||||||
|
# MSYS2, this allows using all the dependencies and tools available
|
||||||
|
# in MSYS2, but we cannot build inside the MSYS2 shell.
|
||||||
|
$cmakeGenerator = 'MinGW Makefiles'
|
||||||
|
$cmakeGeneratorArgs = 'VERBOSE=1'
|
||||||
|
|
||||||
|
# Add MinGW to the PATH
|
||||||
|
$env:PATH = "C:\msys64\mingw$bits\bin;$env:PATH"
|
||||||
|
|
||||||
|
# Build third-party dependencies
|
||||||
|
C:\msys64\usr\bin\bash -lc "pacman --verbose --noconfirm -Su" ; exitIfFailed
|
||||||
|
C:\msys64\usr\bin\bash -lc "pacman --verbose --noconfirm --needed -S mingw-w64-$arch-cmake mingw-w64-$arch-perl mingw-w64-$arch-diffutils mingw-w64-$arch-unibilium" ; exitIfFailed
|
||||||
|
}
|
||||||
|
elseif ($compiler -eq 'MSVC') {
|
||||||
|
$cmakeGeneratorArgs = '/verbosity:normal'
|
||||||
|
if ($bits -eq 32) {
|
||||||
|
$cmakeGenerator = 'Visual Studio 15 2017'
|
||||||
|
}
|
||||||
|
elseif ($bits -eq 64) {
|
||||||
|
$cmakeGenerator = 'Visual Studio 15 2017 Win64'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
# Remove Git Unix utilities from the PATH
|
||||||
|
$env:PATH = $env:PATH.Replace('C:\Program Files\Git\usr\bin', '')
|
||||||
|
|
||||||
|
# Setup python (use AppVeyor system python)
|
||||||
|
C:\Python27\python.exe -m pip install neovim ; exitIfFailed
|
||||||
|
C:\Python35\python.exe -m pip install neovim ; exitIfFailed
|
||||||
|
# Disambiguate python3
|
||||||
|
move c:\Python35\python.exe c:\Python35\python3.exe
|
||||||
|
$env:PATH = "C:\Python35;C:\Python27;$env:PATH"
|
||||||
|
# Sanity check
|
||||||
|
python -c "import neovim; print(str(neovim))" ; exitIfFailed
|
||||||
|
python3 -c "import neovim; print(str(neovim))" ; exitIfFailed
|
||||||
|
|
||||||
|
$env:PATH = "C:\Ruby24\bin;$env:PATH"
|
||||||
|
cmd /c gem.cmd install neovim ; exitIfFailed
|
||||||
|
where.exe neovim-ruby-host.bat ; exitIfFailed
|
||||||
|
|
||||||
|
cmd /c npm.cmd install -g neovim ; exitIfFailed
|
||||||
|
where.exe neovim-node-host.cmd ; exitIfFailed
|
||||||
|
cmd /c npm link neovim
|
||||||
|
|
||||||
|
function convertToCmakeArgs($vars) {
|
||||||
|
return $vars.GetEnumerator() | foreach { "-D$($_.Key)=$($_.Value)" }
|
||||||
|
}
|
||||||
|
|
||||||
|
mkdir .deps
|
||||||
|
cd .deps
|
||||||
|
cmake -G $cmakeGenerator $(convertToCmakeArgs($depsCmakeVars)) ..\third-party\ ; exitIfFailed
|
||||||
|
cmake --build . --config $cmakeBuildType -- $cmakeGeneratorArgs ; exitIfFailed
|
||||||
|
cd ..
|
||||||
|
|
||||||
|
# Build Neovim
|
||||||
|
mkdir build
|
||||||
|
cd build
|
||||||
|
cmake -G $cmakeGenerator $(convertToCmakeArgs($nvimCmakeVars)) .. ; exitIfFailed
|
||||||
|
cmake --build . --config $cmakeBuildType -- $cmakeGeneratorArgs ; exitIfFailed
|
||||||
|
bin\nvim --version ; exitIfFailed
|
||||||
|
|
||||||
|
# Functional tests
|
||||||
|
# The $LastExitCode from MSBuild can't be trusted
|
||||||
|
$failed = $false
|
||||||
|
# Temporarily turn off tracing to reduce log file output
|
||||||
|
Set-PSDebug -Off
|
||||||
|
cmake --build . --config $cmakeBuildType --target functionaltest -- $cmakeGeneratorArgs 2>&1 |
|
||||||
|
foreach { $failed = $failed -or
|
||||||
|
$_ -match 'Running functional tests failed with error'; $_ }
|
||||||
|
Set-PSDebug -Trace 1
|
||||||
|
if ($failed) {
|
||||||
|
exit $LastExitCode
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if ($uploadToCodecov) {
|
||||||
|
C:\msys64\usr\bin\bash -lc "cd /c/projects/neovim; bash <(curl -s https://codecov.io/bash) -c -F functionaltest || echo 'codecov upload failed.'"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Old tests
|
||||||
|
$env:PATH = "C:\msys64\usr\bin;$env:PATH"
|
||||||
|
& "C:\msys64\mingw$bits\bin\mingw32-make.exe" -C $(Convert-Path ..\src\nvim\testdir) VERBOSE=1
|
||||||
|
|
||||||
|
if ($uploadToCodecov) {
|
||||||
|
C:\msys64\usr\bin\bash -lc "cd /c/projects/neovim; bash <(curl -s https://codecov.io/bash) -c -F oldtest || echo 'codecov upload failed.'"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Build artifacts
|
||||||
|
cpack -G ZIP -C RelWithDebInfo
|
||||||
|
if ($env:APPVEYOR_REPO_TAG_NAME -ne $null) {
|
||||||
|
cpack -G NSIS -C RelWithDebInfo
|
||||||
|
}
|
@@ -1,5 +1,16 @@
|
|||||||
|
_stat() {
|
||||||
|
if test "${TRAVIS_OS_NAME}" = osx ; then
|
||||||
|
stat -f %Sm "${@}"
|
||||||
|
else
|
||||||
|
stat -c %y "${@}"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
top_make() {
|
top_make() {
|
||||||
${MAKE_CMD} "$@"
|
echo '================================================================================'
|
||||||
|
# Travis has 1.5 virtual cores according to:
|
||||||
|
# http://docs.travis-ci.com/user/speeding-up-the-build/#Paralellizing-your-build-on-one-VM
|
||||||
|
ninja "$@"
|
||||||
}
|
}
|
||||||
|
|
||||||
build_make() {
|
build_make() {
|
||||||
@@ -15,28 +26,23 @@ build_deps() {
|
|||||||
DEPS_CMAKE_FLAGS="${DEPS_CMAKE_FLAGS} -DUSE_BUNDLED_LUA=ON"
|
DEPS_CMAKE_FLAGS="${DEPS_CMAKE_FLAGS} -DUSE_BUNDLED_LUA=ON"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
rm -rf "${DEPS_BUILD_DIR}"
|
mkdir -p "${DEPS_BUILD_DIR}"
|
||||||
|
mkdir -p "${DEPS_DOWNLOAD_DIR}"
|
||||||
|
|
||||||
# If there is a valid cache and we're not forced to recompile,
|
# Use cached dependencies if $CACHE_MARKER exists.
|
||||||
# use cached third-party dependencies.
|
if test "${CACHE_ENABLE}" = "false" ; then
|
||||||
if test -f "${CACHE_MARKER}" && test "${BUILD_NVIM_DEPS}" != "true" ; then
|
export CCACHE_RECACHE=1
|
||||||
local statcmd="stat -c '%y'"
|
elif test -f "${CACHE_MARKER}" ; then
|
||||||
if test "${TRAVIS_OS_NAME}" = osx ; then
|
echo "Using third-party dependencies from Travis cache (last update: $(_stat "${CACHE_MARKER}"))."
|
||||||
statcmd="stat -f '%Sm'"
|
cp -r "${HOME}/.cache/nvim-deps"/. "${DEPS_BUILD_DIR}"
|
||||||
fi
|
cp -r "${HOME}/.cache/nvim-deps-downloads" "${DEPS_DOWNLOAD_DIR}"
|
||||||
echo "Using third-party dependencies from Travis's cache (last updated: $(${statcmd} "${CACHE_MARKER}"))."
|
|
||||||
|
|
||||||
mkdir -p "$(dirname "${DEPS_BUILD_DIR}")"
|
|
||||||
mv "${HOME}/.cache/nvim-deps" "${DEPS_BUILD_DIR}"
|
|
||||||
else
|
|
||||||
mkdir -p "${DEPS_BUILD_DIR}"
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Even if we're using cached dependencies, run CMake and make to
|
# Even if we're using cached dependencies, run CMake and make to
|
||||||
# update CMake configuration and update to newer deps versions.
|
# update CMake configuration and update to newer deps versions.
|
||||||
cd "${DEPS_BUILD_DIR}"
|
cd "${DEPS_BUILD_DIR}"
|
||||||
echo "Configuring with '${DEPS_CMAKE_FLAGS}'."
|
echo "Configuring with '${DEPS_CMAKE_FLAGS}'."
|
||||||
CC= cmake ${DEPS_CMAKE_FLAGS} "${TRAVIS_BUILD_DIR}/third-party/"
|
CC= cmake -G Ninja ${DEPS_CMAKE_FLAGS} "${TRAVIS_BUILD_DIR}/third-party/"
|
||||||
|
|
||||||
if ! top_make; then
|
if ! top_make; then
|
||||||
exit 1
|
exit 1
|
||||||
@@ -56,7 +62,7 @@ prepare_build() {
|
|||||||
mkdir -p "${BUILD_DIR}"
|
mkdir -p "${BUILD_DIR}"
|
||||||
cd "${BUILD_DIR}"
|
cd "${BUILD_DIR}"
|
||||||
echo "Configuring with '${CMAKE_FLAGS} $@'."
|
echo "Configuring with '${CMAKE_FLAGS} $@'."
|
||||||
cmake ${CMAKE_FLAGS} "$@" "${TRAVIS_BUILD_DIR}"
|
cmake -G Ninja ${CMAKE_FLAGS} "$@" "${TRAVIS_BUILD_DIR}"
|
||||||
}
|
}
|
||||||
|
|
||||||
build_nvim() {
|
build_nvim() {
|
||||||
@@ -71,9 +77,11 @@ build_nvim() {
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Building nvim-test."
|
if test "${FUNCTIONALTEST}" != "functionaltest-lua"; then
|
||||||
if ! top_make nvim-test ; then
|
echo "Building nvim-test."
|
||||||
exit 1
|
if ! top_make nvim-test ; then
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -87,3 +95,12 @@ build_nvim() {
|
|||||||
|
|
||||||
cd "${TRAVIS_BUILD_DIR}"
|
cd "${TRAVIS_BUILD_DIR}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
macos_rvm_dance() {
|
||||||
|
# neovim-ruby gem requires a ruby newer than the macOS default.
|
||||||
|
source ~/.rvm/scripts/rvm
|
||||||
|
rvm get stable --auto-dotfiles
|
||||||
|
rvm reload
|
||||||
|
rvm use 2.2.5
|
||||||
|
rvm use
|
||||||
|
}
|
||||||
|
@@ -1,6 +1,15 @@
|
|||||||
. "${CI_DIR}/common/build.sh"
|
. "${CI_DIR}/common/build.sh"
|
||||||
. "${CI_DIR}/common/suite.sh"
|
. "${CI_DIR}/common/suite.sh"
|
||||||
|
|
||||||
|
submit_coverage() {
|
||||||
|
if [ -n "${GCOV}" ]; then
|
||||||
|
if curl --fail --output codecov.bash --silent https://codecov.io/bash; then
|
||||||
|
bash codecov.bash -c -F "$1" || echo "codecov upload failed."
|
||||||
|
rm -f codecov.bash
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
print_core() {
|
print_core() {
|
||||||
local app="$1"
|
local app="$1"
|
||||||
local core="$2"
|
local core="$2"
|
||||||
@@ -71,7 +80,9 @@ valgrind_check() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
asan_check() {
|
asan_check() {
|
||||||
check_logs "${1}" "*san.*"
|
if test "${CLANG_SANITIZER}" = "ASAN_UBSAN" ; then
|
||||||
|
check_logs "${1}" "*san.*" | asan_symbolize
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
run_unittests() {(
|
run_unittests() {(
|
||||||
@@ -80,6 +91,7 @@ run_unittests() {(
|
|||||||
if ! build_make unittest ; then
|
if ! build_make unittest ; then
|
||||||
fail 'unittests' F 'Unit tests failed'
|
fail 'unittests' F 'Unit tests failed'
|
||||||
fi
|
fi
|
||||||
|
submit_coverage unittest
|
||||||
check_core_dumps "$(which luajit)"
|
check_core_dumps "$(which luajit)"
|
||||||
exit_suite
|
exit_suite
|
||||||
)}
|
)}
|
||||||
@@ -90,6 +102,7 @@ run_functionaltests() {(
|
|||||||
if ! build_make ${FUNCTIONALTEST}; then
|
if ! build_make ${FUNCTIONALTEST}; then
|
||||||
fail 'functionaltests' F 'Functional tests failed'
|
fail 'functionaltests' F 'Functional tests failed'
|
||||||
fi
|
fi
|
||||||
|
submit_coverage functionaltest
|
||||||
asan_check "${LOG_DIR}"
|
asan_check "${LOG_DIR}"
|
||||||
valgrind_check "${LOG_DIR}"
|
valgrind_check "${LOG_DIR}"
|
||||||
check_core_dumps
|
check_core_dumps
|
||||||
@@ -103,6 +116,7 @@ run_oldtests() {(
|
|||||||
reset
|
reset
|
||||||
fail 'oldtests' F 'Legacy tests failed'
|
fail 'oldtests' F 'Legacy tests failed'
|
||||||
fi
|
fi
|
||||||
|
submit_coverage oldtest
|
||||||
asan_check "${LOG_DIR}"
|
asan_check "${LOG_DIR}"
|
||||||
valgrind_check "${LOG_DIR}"
|
valgrind_check "${LOG_DIR}"
|
||||||
check_core_dumps
|
check_core_dumps
|
||||||
|
@@ -8,18 +8,29 @@ if [[ "${CI_TARGET}" == lint ]]; then
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "${TRAVIS_OS_NAME}" == osx ]]; then
|
if [[ "${TRAVIS_OS_NAME}" == osx ]]; then
|
||||||
|
brew install ninja
|
||||||
brew install gettext
|
brew install gettext
|
||||||
brew reinstall -s libtool
|
brew reinstall -s libtool
|
||||||
|
brew install ccache
|
||||||
|
export PATH="/usr/local/opt/ccache/libexec:$PATH"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Use default CC to avoid compilation problems when installing Python modules.
|
|
||||||
echo "Install neovim module and coveralls for Python 2."
|
|
||||||
CC=cc pip2.7 -q install --user --upgrade neovim cpp-coveralls
|
|
||||||
|
|
||||||
echo "Install neovim module for Python 3."
|
echo "Install neovim module for Python 3."
|
||||||
# Allow failure. pyenv pip3 on travis is broken:
|
# Allow failure. pyenv pip3 on travis is broken:
|
||||||
# https://github.com/travis-ci/travis-ci/issues/8363
|
# https://github.com/travis-ci/travis-ci/issues/8363
|
||||||
CC=cc pip3 -q install --user --upgrade neovim || true
|
CC=cc pip3 -q install --user --upgrade neovim || true
|
||||||
|
|
||||||
echo "Install neovim RubyGem."
|
if ! [ "${TRAVIS_OS_NAME}" = osx ] ; then
|
||||||
gem install --no-document --version ">= 0.2.0" neovim
|
# Update PATH for pip.
|
||||||
|
export PATH="$(python2.7 -c 'import site; print(site.getuserbase())')/bin:$PATH"
|
||||||
|
# Use default CC to avoid compilation problems when installing Python modules.
|
||||||
|
echo "Install neovim module for Python 2."
|
||||||
|
CC=cc pip2.7 -q install --user --upgrade neovim
|
||||||
|
|
||||||
|
echo "Install neovim RubyGem."
|
||||||
|
gem install --no-document --version ">= 0.2.0" neovim
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Install neovim npm package"
|
||||||
|
npm install -g neovim
|
||||||
|
npm link neovim
|
||||||
|
@@ -10,19 +10,19 @@ source "${CI_DIR}/common/suite.sh"
|
|||||||
|
|
||||||
enter_suite 'clint'
|
enter_suite 'clint'
|
||||||
|
|
||||||
run_test 'top_make clint-full' clint
|
run_test 'make clint-full' clint
|
||||||
|
|
||||||
exit_suite --continue
|
exit_suite --continue
|
||||||
|
|
||||||
enter_suite 'testlint'
|
enter_suite 'testlint'
|
||||||
|
|
||||||
run_test 'top_make testlint' testlint
|
run_test 'make testlint' testlint
|
||||||
|
|
||||||
exit_suite --continue
|
exit_suite --continue
|
||||||
|
|
||||||
enter_suite 'lualint'
|
enter_suite 'lualint'
|
||||||
|
|
||||||
run_test 'top_make lualint' lualint
|
run_test 'make lualint' lualint
|
||||||
|
|
||||||
exit_suite --continue
|
exit_suite --continue
|
||||||
|
|
||||||
@@ -31,7 +31,7 @@ enter_suite single-includes
|
|||||||
CLICOLOR_FORCE=1 run_test_wd \
|
CLICOLOR_FORCE=1 run_test_wd \
|
||||||
--allow-hang \
|
--allow-hang \
|
||||||
10s \
|
10s \
|
||||||
'top_make check-single-includes' \
|
'make check-single-includes' \
|
||||||
'csi_clean' \
|
'csi_clean' \
|
||||||
single-includes
|
single-includes
|
||||||
|
|
||||||
|
@@ -22,7 +22,9 @@ enter_suite tests
|
|||||||
if test "$CLANG_SANITIZER" != "TSAN" ; then
|
if test "$CLANG_SANITIZER" != "TSAN" ; then
|
||||||
# Additional threads are only created when the builtin UI starts, which
|
# Additional threads are only created when the builtin UI starts, which
|
||||||
# doesn't happen in the unit/functional tests
|
# doesn't happen in the unit/functional tests
|
||||||
run_test run_unittests
|
if test "${FUNCTIONALTEST}" != "functionaltest-lua"; then
|
||||||
|
run_test run_unittests
|
||||||
|
fi
|
||||||
run_test run_functionaltests
|
run_test run_functionaltests
|
||||||
fi
|
fi
|
||||||
run_test run_oldtests
|
run_test run_oldtests
|
||||||
|
@@ -8,7 +8,7 @@
|
|||||||
include(LibFindMacros)
|
include(LibFindMacros)
|
||||||
|
|
||||||
find_path(ICONV_INCLUDE_DIR NAMES iconv.h)
|
find_path(ICONV_INCLUDE_DIR NAMES iconv.h)
|
||||||
find_library(ICONV_LIBRARY NAMES iconv)
|
find_library(ICONV_LIBRARY NAMES iconv libiconv)
|
||||||
|
|
||||||
set(Iconv_PROCESS_INCLUDES ICONV_INCLUDE_DIR)
|
set(Iconv_PROCESS_INCLUDES ICONV_INCLUDE_DIR)
|
||||||
if(ICONV_LIBRARY)
|
if(ICONV_LIBRARY)
|
||||||
|
@@ -27,16 +27,15 @@ find_path(LibIntl_INCLUDE_DIR
|
|||||||
)
|
)
|
||||||
|
|
||||||
find_library(LibIntl_LIBRARY
|
find_library(LibIntl_LIBRARY
|
||||||
NAMES intl libintl.a
|
NAMES intl libintl
|
||||||
)
|
)
|
||||||
|
|
||||||
if (LibIntl_INCLUDE_DIR)
|
if (LibIntl_INCLUDE_DIR)
|
||||||
set(CMAKE_REQUIRED_INCLUDES "${LibIntl_INCLUDE_DIR}")
|
set(CMAKE_REQUIRED_INCLUDES "${LibIntl_INCLUDE_DIR}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# This is required because some operating systems don't have a separate
|
# On some systems (linux+glibc) libintl is passively available.
|
||||||
# libintl--it is built into glibc. So we only need to specify the library
|
# So only specify the library if one was found.
|
||||||
# if one was actually found.
|
|
||||||
if (LibIntl_LIBRARY)
|
if (LibIntl_LIBRARY)
|
||||||
set(CMAKE_REQUIRED_LIBRARIES "${LibIntl_LIBRARY}")
|
set(CMAKE_REQUIRED_LIBRARIES "${LibIntl_LIBRARY}")
|
||||||
endif()
|
endif()
|
||||||
@@ -53,6 +52,13 @@ int main(int argc, char** argv) {
|
|||||||
}" HAVE_WORKING_LIBINTL)
|
}" HAVE_WORKING_LIBINTL)
|
||||||
|
|
||||||
if (HAVE_WORKING_LIBINTL)
|
if (HAVE_WORKING_LIBINTL)
|
||||||
|
# On some systems (linux+glibc) libintl is passively available.
|
||||||
|
# If HAVE_WORKING_LIBINTL then we consider the requirement satisfied.
|
||||||
|
# Unset REQUIRED so that libfind_process(LibIntl) can proceed.
|
||||||
|
if(LibIntl_FIND_REQUIRED)
|
||||||
|
unset(LibIntl_FIND_REQUIRED)
|
||||||
|
endif()
|
||||||
|
|
||||||
check_variable_exists(_nl_msg_cat_cntr HAVE_NL_MSG_CAT_CNTR)
|
check_variable_exists(_nl_msg_cat_cntr HAVE_NL_MSG_CAT_CNTR)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
@@ -31,11 +31,7 @@ if(LIBUV_USE_STATIC)
|
|||||||
"${CMAKE_STATIC_LIBRARY_PREFIX}uv${CMAKE_STATIC_LIBRARY_SUFFIX}")
|
"${CMAKE_STATIC_LIBRARY_PREFIX}uv${CMAKE_STATIC_LIBRARY_SUFFIX}")
|
||||||
endif(LIBUV_USE_STATIC)
|
endif(LIBUV_USE_STATIC)
|
||||||
|
|
||||||
if(MSVC)
|
list(APPEND LIBUV_NAMES uv)
|
||||||
list(APPEND LIBUV_NAMES libuv)
|
|
||||||
else()
|
|
||||||
list(APPEND LIBUV_NAMES uv)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
find_library(LIBUV_LIBRARY NAMES ${LIBUV_NAMES}
|
find_library(LIBUV_LIBRARY NAMES ${LIBUV_NAMES}
|
||||||
HINTS ${PC_LIBUV_LIBDIR} ${PC_LIBUV_LIBRARY_DIRS}
|
HINTS ${PC_LIBUV_LIBDIR} ${PC_LIBUV_LIBRARY_DIRS}
|
||||||
|
@@ -44,7 +44,7 @@ endif()
|
|||||||
|
|
||||||
if(MSVC)
|
if(MSVC)
|
||||||
# The import library for the msgpack DLL has a different name
|
# The import library for the msgpack DLL has a different name
|
||||||
list(APPEND MSGPACK_NAMES msgpack_import)
|
list(APPEND MSGPACK_NAMES msgpackc_import)
|
||||||
else()
|
else()
|
||||||
list(APPEND MSGPACK_NAMES msgpackc msgpack)
|
list(APPEND MSGPACK_NAMES msgpackc msgpack)
|
||||||
endif()
|
endif()
|
||||||
|
@@ -38,6 +38,7 @@ function(get_compile_flags _compile_flags)
|
|||||||
get_directory_property(include_directories_list
|
get_directory_property(include_directories_list
|
||||||
DIRECTORY "src/nvim"
|
DIRECTORY "src/nvim"
|
||||||
INCLUDE_DIRECTORIES)
|
INCLUDE_DIRECTORIES)
|
||||||
|
list(REMOVE_DUPLICATES include_directories_list)
|
||||||
foreach(include_directory ${include_directories_list})
|
foreach(include_directory ${include_directories_list})
|
||||||
set(include_directories "${include_directories} -I${include_directory}")
|
set(include_directories "${include_directories} -I${include_directory}")
|
||||||
endforeach()
|
endforeach()
|
||||||
|
@@ -4,9 +4,8 @@
|
|||||||
|
|
||||||
# Check if a module is available in Lua
|
# Check if a module is available in Lua
|
||||||
function(check_lua_module LUA_PRG_PATH MODULE RESULT_VAR)
|
function(check_lua_module LUA_PRG_PATH MODULE RESULT_VAR)
|
||||||
execute_process(COMMAND ${LUA_PRG_PATH} -e "require('${MODULE}')"
|
execute_process(COMMAND ${LUA_PRG_PATH} -l "${MODULE}" -e ""
|
||||||
RESULT_VARIABLE module_missing
|
RESULT_VARIABLE module_missing)
|
||||||
ERROR_QUIET)
|
|
||||||
if(module_missing)
|
if(module_missing)
|
||||||
set(${RESULT_VAR} False PARENT_SCOPE)
|
set(${RESULT_VAR} False PARENT_SCOPE)
|
||||||
else()
|
else()
|
||||||
|
@@ -38,7 +38,7 @@ set(ENV{SYSTEM_NAME} ${SYSTEM_NAME})
|
|||||||
execute_process(
|
execute_process(
|
||||||
COMMAND ${BUSTED_PRG} ${TEST_TAG} ${TEST_FILTER} -v -o ${BUSTED_OUTPUT_TYPE}
|
COMMAND ${BUSTED_PRG} ${TEST_TAG} ${TEST_FILTER} -v -o ${BUSTED_OUTPUT_TYPE}
|
||||||
--lua=${LUA_PRG} --lazy --helper=${TEST_DIR}/${TEST_TYPE}/preload.lua
|
--lua=${LUA_PRG} --lazy --helper=${TEST_DIR}/${TEST_TYPE}/preload.lua
|
||||||
--lpath=${BUILD_DIR}/?.lua ${TEST_PATH}
|
--lpath=${BUILD_DIR}/?.lua --lpath=?.lua ${TEST_PATH}
|
||||||
WORKING_DIRECTORY ${WORKING_DIR}
|
WORKING_DIRECTORY ${WORKING_DIR}
|
||||||
ERROR_VARIABLE err
|
ERROR_VARIABLE err
|
||||||
RESULT_VARIABLE res
|
RESULT_VARIABLE res
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
codecov:
|
codecov:
|
||||||
notify:
|
notify:
|
||||||
require_ci_to_pass: yes
|
require_ci_to_pass: no
|
||||||
ci:
|
ci:
|
||||||
- appveyor
|
- appveyor
|
||||||
- travis
|
- travis
|
||||||
|
@@ -12,6 +12,11 @@ check_type_size("size_t" SIZEOF_SIZE_T)
|
|||||||
check_type_size("long long" SIZEOF_LONG_LONG)
|
check_type_size("long long" SIZEOF_LONG_LONG)
|
||||||
check_type_size("void *" SIZEOF_VOID_PTR)
|
check_type_size("void *" SIZEOF_VOID_PTR)
|
||||||
|
|
||||||
|
if (CMAKE_HOST_SYSTEM_VERSION MATCHES ".*-Microsoft")
|
||||||
|
# Windows Subsystem for Linux
|
||||||
|
set(HAVE_WSL 1)
|
||||||
|
endif()
|
||||||
|
|
||||||
check_symbol_exists(_NSGetEnviron crt_externs.h HAVE__NSGETENVIRON)
|
check_symbol_exists(_NSGetEnviron crt_externs.h HAVE__NSGETENVIRON)
|
||||||
|
|
||||||
# Headers
|
# Headers
|
||||||
|
@@ -48,6 +48,7 @@
|
|||||||
#cmakedefine HAVE_UTIME_H
|
#cmakedefine HAVE_UTIME_H
|
||||||
#cmakedefine HAVE_UTIMES
|
#cmakedefine HAVE_UTIMES
|
||||||
#cmakedefine HAVE_WORKING_LIBINTL
|
#cmakedefine HAVE_WORKING_LIBINTL
|
||||||
|
#cmakedefine HAVE_WSL
|
||||||
#cmakedefine UNIX
|
#cmakedefine UNIX
|
||||||
#cmakedefine USE_FNAME_CASE
|
#cmakedefine USE_FNAME_CASE
|
||||||
#cmakedefine HAVE_SYS_UIO_H
|
#cmakedefine HAVE_SYS_UIO_H
|
||||||
@@ -62,6 +63,7 @@
|
|||||||
|
|
||||||
#ifndef UNIT_TESTING
|
#ifndef UNIT_TESTING
|
||||||
#cmakedefine HAVE_JEMALLOC
|
#cmakedefine HAVE_JEMALLOC
|
||||||
|
#cmakedefine LOG_LIST_ACTIONS
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#cmakedefine HAVE_BE64TOH
|
#cmakedefine HAVE_BE64TOH
|
||||||
|
@@ -1,3 +1,5 @@
|
|||||||
|
// This is an open source non-commercial project. Dear PVS-Studio, please check
|
||||||
|
// it. PVS-Studio Static Code Analyzer for C, C++ and C#: http://www.viva64.com
|
||||||
#include "${PROJECT_SOURCE_DIR}/src/nvim/vim.h"
|
#include "${PROJECT_SOURCE_DIR}/src/nvim/vim.h"
|
||||||
char *default_vim_dir = "${CMAKE_INSTALL_FULL_DATAROOTDIR}/nvim";
|
char *default_vim_dir = "${CMAKE_INSTALL_FULL_DATAROOTDIR}/nvim";
|
||||||
char *default_vimruntime_dir = "";
|
char *default_vimruntime_dir = "";
|
||||||
|
@@ -36,7 +36,6 @@
|
|||||||
# them.
|
# them.
|
||||||
#
|
#
|
||||||
# DEPS_CMAKE_FLAGS += -DUSE_BUNDLED_BUSTED=OFF
|
# DEPS_CMAKE_FLAGS += -DUSE_BUNDLED_BUSTED=OFF
|
||||||
# DEPS_CMAKE_FLAGS += -DUSE_BUNDLED_DEPS=OFF
|
|
||||||
# DEPS_CMAKE_FLAGS += -DUSE_BUNDLED_JEMALLOC=OFF
|
# DEPS_CMAKE_FLAGS += -DUSE_BUNDLED_JEMALLOC=OFF
|
||||||
# DEPS_CMAKE_FLAGS += -DUSE_BUNDLED_LIBTERMKEY=OFF
|
# DEPS_CMAKE_FLAGS += -DUSE_BUNDLED_LIBTERMKEY=OFF
|
||||||
# DEPS_CMAKE_FLAGS += -DUSE_BUNDLED_LIBUV=OFF
|
# DEPS_CMAKE_FLAGS += -DUSE_BUNDLED_LIBUV=OFF
|
||||||
@@ -45,6 +44,10 @@
|
|||||||
# DEPS_CMAKE_FLAGS += -DUSE_BUNDLED_LUAROCKS=OFF
|
# DEPS_CMAKE_FLAGS += -DUSE_BUNDLED_LUAROCKS=OFF
|
||||||
# DEPS_CMAKE_FLAGS += -DUSE_BUNDLED_MSGPACK=OFF
|
# DEPS_CMAKE_FLAGS += -DUSE_BUNDLED_MSGPACK=OFF
|
||||||
# DEPS_CMAKE_FLAGS += -DUSE_BUNDLED_UNIBILIUM=OFF
|
# DEPS_CMAKE_FLAGS += -DUSE_BUNDLED_UNIBILIUM=OFF
|
||||||
|
#
|
||||||
|
# Or disable all bundled dependencies at once.
|
||||||
|
#
|
||||||
|
# DEPS_CMAKE_FLAGS += -DUSE_BUNDLED=OFF
|
||||||
|
|
||||||
# By default, bundled libraries are statically linked to nvim.
|
# By default, bundled libraries are statically linked to nvim.
|
||||||
# This has no effect for non-bundled deps, which are always dynamically linked.
|
# This has no effect for non-bundled deps, which are always dynamically linked.
|
||||||
|
18
makedeps.bat
Normal file
18
makedeps.bat
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
echo off
|
||||||
|
|
||||||
|
if not defined VS150COMNTOOLS (
|
||||||
|
echo error: missing VS150COMNTOOLS environment variable.
|
||||||
|
echo Run this script from the 'Developer Command Prompt'.
|
||||||
|
exit /b 1
|
||||||
|
)
|
||||||
|
|
||||||
|
echo on
|
||||||
|
|
||||||
|
set CMAKE=%VS150COMNTOOLS%\..\IDE\CommonExtensions\Microsoft\CMake\CMake\bin\cmake.exe
|
||||||
|
|
||||||
|
mkdir .deps
|
||||||
|
cd .deps
|
||||||
|
"%CMAKE%" -G "Visual Studio 15 2017" "-DCMAKE_BUILD_TYPE=RelWithDebInfo" ..\third-party\
|
||||||
|
"%CMAKE%" --build . --config RelWithDebInfo -- "/verbosity:normal"
|
||||||
|
cd ..
|
||||||
|
|
159
man/nvim.1
159
man/nvim.1
@@ -1,4 +1,4 @@
|
|||||||
.Dd January 28, 2016
|
.Dd December 17, 2017
|
||||||
.Dt NVIM 1
|
.Dt NVIM 1
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
@@ -25,7 +25,7 @@ To enter commands in
|
|||||||
type a colon
|
type a colon
|
||||||
.Pq Sq \&:
|
.Pq Sq \&:
|
||||||
which is also used in this manual to denote commands.
|
which is also used in this manual to denote commands.
|
||||||
For more information, consult the on-line help system with the
|
For more information, consult the online help with the
|
||||||
.Ic :help
|
.Ic :help
|
||||||
command.
|
command.
|
||||||
.Bl -tag -width Fl
|
.Bl -tag -width Fl
|
||||||
@@ -54,7 +54,7 @@ If
|
|||||||
is a function name, the file containing that function is opened
|
is a function name, the file containing that function is opened
|
||||||
with the cursor positioned at the start of the function.
|
with the cursor positioned at the start of the function.
|
||||||
See
|
See
|
||||||
.Ic :help tag-commands .
|
.Ic ":help tag-commands" .
|
||||||
.It Fl q Op Ar errorfile
|
.It Fl q Op Ar errorfile
|
||||||
QuickFix mode.
|
QuickFix mode.
|
||||||
Display the first error in
|
Display the first error in
|
||||||
@@ -67,82 +67,70 @@ Further errors can be jumped to with the
|
|||||||
.Ic :cnext
|
.Ic :cnext
|
||||||
command.
|
command.
|
||||||
See
|
See
|
||||||
.Ic :help quickfix .
|
.Ic ":help quickfix" .
|
||||||
.It There are a number of other options:
|
.It There are a number of other options:
|
||||||
.It Fl -
|
.It Fl -
|
||||||
Interpret all further arguments as files.
|
Interpret all further arguments as files.
|
||||||
Can be used to edit files starting with a hyphen
|
Can be used to edit files starting with a hyphen
|
||||||
.Pq Sq - .
|
.Pq Sq - .
|
||||||
.It Fl -literal
|
|
||||||
Interpret filenames literally, that is, do not expand wildcards.
|
|
||||||
Has no effect on Unix-like systems, where the shell expands wildcards.
|
|
||||||
.It Fl e
|
.It Fl e
|
||||||
Ex mode.
|
Ex mode. Reads stdin as Ex commands.
|
||||||
See
|
See
|
||||||
.Ic :help Ex-mode .
|
.Ic ":help Ex-mode" .
|
||||||
.It Fl E
|
.It Fl E
|
||||||
Improved Ex mode.
|
Ex mode, improved. Reads stdin as text.
|
||||||
See
|
See
|
||||||
.Ic :help gQ .
|
.Ic :help gQ .
|
||||||
.It Fl s
|
.It Fl es
|
||||||
Silent mode.
|
Silent (batch) mode. Reads stdin as Ex commands.
|
||||||
Only takes effect if
|
.It Fl \&Es
|
||||||
.Fl e
|
Silent (batch) mode. Reads stdin as text.
|
||||||
or
|
|
||||||
.Fl E
|
|
||||||
is specified before it.
|
|
||||||
.It Fl d
|
.It Fl d
|
||||||
Diff mode.
|
Diff mode.
|
||||||
Show the difference between two to four files, similar to
|
Show the difference between two to four files, similar to
|
||||||
.Xr sdiff 1 .
|
.Xr sdiff 1 .
|
||||||
See
|
See
|
||||||
.Ic :help diff .
|
.Ic ":help diff" .
|
||||||
.It Fl R
|
.It Fl R
|
||||||
Read-only mode.
|
Read-only mode.
|
||||||
Sets the option 'readonly'.
|
Sets the 'readonly' option.
|
||||||
Implies
|
Implies
|
||||||
.Fl n .
|
.Fl n .
|
||||||
Buffers can still be edited, but cannot be written to disk if already
|
Buffers can still be edited, but cannot be written to disk if already
|
||||||
associated with a file.
|
associated with a file.
|
||||||
To overwrite a file, add an exclamation mark to the needed Ex command, such as
|
To overwrite a file, add an exclamation mark to the relevant Ex command, such as
|
||||||
.Ic :w! .
|
.Ic :w! .
|
||||||
See
|
See
|
||||||
.Ic :help 'readonly' .
|
.Ic ":help 'readonly'" .
|
||||||
.It Fl Z
|
.It Fl Z
|
||||||
Restricted mode.
|
Restricted mode.
|
||||||
Disable commands that make use of an external shell.
|
Disable commands that make use of an external shell.
|
||||||
.It Fl m
|
.It Fl m
|
||||||
Disable file modifications.
|
Resets the 'write' option, to disable file modifications.
|
||||||
Unsets the option 'write'.
|
|
||||||
Writing to a file is disabled, but buffers can still be modified.
|
Writing to a file is disabled, but buffers can still be modified.
|
||||||
.It Fl M
|
.It Fl M
|
||||||
Disable file and buffer modifications.
|
Resets the 'write' and 'modifiable' options, to disable file and buffer
|
||||||
Unsets the options 'write' and 'modifiable'.
|
modifications.
|
||||||
Note that these options can be set to re-enable making modifications.
|
|
||||||
.It Fl b
|
.It Fl b
|
||||||
Binary mode.
|
Binary mode.
|
||||||
See
|
See
|
||||||
.Ic :help edit-binary .
|
.Ic ":help edit-binary" .
|
||||||
.It Fl l
|
.It Fl l
|
||||||
Lisp mode.
|
Lisp mode.
|
||||||
Sets the options 'lisp' and 'showmatch'.
|
Sets the 'lisp' and 'showmatch' options.
|
||||||
.It Fl A
|
.It Fl A
|
||||||
Arabic mode.
|
Arabic mode.
|
||||||
Sets the option 'arabic'.
|
Sets the 'arabic' option.
|
||||||
.It Fl F
|
|
||||||
Farsi mode.
|
|
||||||
Sets the options 'fkmap' and 'rightleft'.
|
|
||||||
.It Fl H
|
.It Fl H
|
||||||
Hebrew mode.
|
Hebrew mode.
|
||||||
Sets the options 'hkmap' and 'rightleft'.
|
Sets the 'hkmap' and 'rightleft' options.
|
||||||
.It Fl V Ns Oo Ar N Oc Ns Op Ar file
|
.It Fl V Ns Oo Ar N Oc Ns Op Ar file
|
||||||
Verbose mode.
|
Verbose mode.
|
||||||
Print messages about which files are being sourced and for reading and
|
Print messages about which files are being sourced and for reading and
|
||||||
writing a ShaDa file.
|
writing a ShaDa file.
|
||||||
.Ar N
|
.Ar N
|
||||||
is the value for the 'verbose' option; defaults to
|
is the 'verbose' level; defaults to
|
||||||
.Cm 10
|
.Cm 10.
|
||||||
if omitted.
|
|
||||||
If
|
If
|
||||||
.Ar file
|
.Ar file
|
||||||
is specified, append messages to
|
is specified, append messages to
|
||||||
@@ -153,9 +141,9 @@ Debugging mode.
|
|||||||
Started when executing the first command from a script.
|
Started when executing the first command from a script.
|
||||||
.It Fl n
|
.It Fl n
|
||||||
Disable the use of swap files.
|
Disable the use of swap files.
|
||||||
Sets the option 'updatecount' to
|
Sets the 'updatecount' option to
|
||||||
.Cm 0 .
|
.Cm 0 .
|
||||||
Can be useful for editing file(s) on a slow medium.
|
Can be useful for editing files on a slow medium.
|
||||||
.It Fl r Op Ar file
|
.It Fl r Op Ar file
|
||||||
Recovery mode.
|
Recovery mode.
|
||||||
If
|
If
|
||||||
@@ -169,20 +157,20 @@ The swap file has the same name as the file it's associated with, but with
|
|||||||
.Sq .swp
|
.Sq .swp
|
||||||
appended.
|
appended.
|
||||||
See
|
See
|
||||||
.Ic :help recovery .
|
.Ic ":help recovery" .
|
||||||
.It Fl L Op Ar file
|
.It Fl L Op Ar file
|
||||||
Alias for
|
Alias for
|
||||||
.Fl r .
|
.Fl r .
|
||||||
.It Fl u Ar vimrc
|
.It Fl u Ar vimrc
|
||||||
Use
|
Use
|
||||||
.Ar vimrc
|
.Ar vimrc
|
||||||
instead of the default of
|
instead of the default
|
||||||
.Pa ~/.config/nvim/init.vim .
|
.Pa ~/.config/nvim/init.vim .
|
||||||
If
|
If
|
||||||
.Ar vimrc
|
.Ar vimrc
|
||||||
is
|
is
|
||||||
.Cm NORC ,
|
.Cm NORC ,
|
||||||
do not load any initialization files (excluding plugins),
|
do not load any initialization files (except plugins),
|
||||||
and do not attempt to parse environment variables.
|
and do not attempt to parse environment variables.
|
||||||
If
|
If
|
||||||
.Ar vimrc
|
.Ar vimrc
|
||||||
@@ -190,11 +178,11 @@ is
|
|||||||
.Cm NONE ,
|
.Cm NONE ,
|
||||||
loading plugins is also skipped.
|
loading plugins is also skipped.
|
||||||
See
|
See
|
||||||
.Ic :help initialization .
|
.Ic ":help initialization" .
|
||||||
.It Fl i Ar shada
|
.It Fl i Ar shada
|
||||||
Use
|
Use
|
||||||
.Ar shada
|
.Ar shada
|
||||||
instead of the default of
|
instead of the default
|
||||||
.Pa ~/.local/share/nvim/shada/main.shada .
|
.Pa ~/.local/share/nvim/shada/main.shada .
|
||||||
If
|
If
|
||||||
.Ar shada
|
.Ar shada
|
||||||
@@ -202,7 +190,7 @@ is
|
|||||||
.Cm NONE ,
|
.Cm NONE ,
|
||||||
do not read or write a ShaDa file.
|
do not read or write a ShaDa file.
|
||||||
See
|
See
|
||||||
.Ic :help shada .
|
.Ic ":help shada" .
|
||||||
.It Fl -noplugin
|
.It Fl -noplugin
|
||||||
Skip loading plugins.
|
Skip loading plugins.
|
||||||
Implied by
|
Implied by
|
||||||
@@ -233,7 +221,6 @@ For the first file, position the cursor on line
|
|||||||
If
|
If
|
||||||
.Ar linenum
|
.Ar linenum
|
||||||
is omitted, position the cursor on the last line of the file.
|
is omitted, position the cursor on the last line of the file.
|
||||||
Note that
|
|
||||||
.Cm +5
|
.Cm +5
|
||||||
and
|
and
|
||||||
.Cm -c 5
|
.Cm -c 5
|
||||||
@@ -246,8 +233,7 @@ For the first file, position the cursor on the first occurrence of
|
|||||||
.Ar pattern .
|
.Ar pattern .
|
||||||
If
|
If
|
||||||
.Ar pattern
|
.Ar pattern
|
||||||
is omitted, the most recently used search pattern is used (if there is one).
|
is omitted, the most recent search pattern is used (if any).
|
||||||
Note that
|
|
||||||
.Cm +/foo
|
.Cm +/foo
|
||||||
and
|
and
|
||||||
.Cm -c /foo
|
.Cm -c /foo
|
||||||
@@ -258,7 +244,7 @@ and
|
|||||||
inside
|
inside
|
||||||
.Nm .
|
.Nm .
|
||||||
See
|
See
|
||||||
.Ic :help search-pattern .
|
.Ic ":help search-pattern" .
|
||||||
.It Fl c Ar command
|
.It Fl c Ar command
|
||||||
Execute
|
Execute
|
||||||
.Ar command
|
.Ar command
|
||||||
@@ -268,10 +254,9 @@ Up to 10 instances of
|
|||||||
or
|
or
|
||||||
.Cm +
|
.Cm +
|
||||||
can be used.
|
can be used.
|
||||||
Note that
|
.Qq Cm +foo
|
||||||
.Qq Cm +set si
|
|
||||||
and
|
and
|
||||||
.Cm -c \(dqset si\(dq
|
.Cm -c \(dqfoo\(dq
|
||||||
are equivalent.
|
are equivalent.
|
||||||
.It Fl -cmd Ar command
|
.It Fl -cmd Ar command
|
||||||
Like
|
Like
|
||||||
@@ -292,16 +277,16 @@ cannot start with a hyphen
|
|||||||
.Pq Sq - .
|
.Pq Sq - .
|
||||||
If
|
If
|
||||||
.Ar session
|
.Ar session
|
||||||
is omitted, then
|
is omitted then
|
||||||
.Pa Session.vim ,
|
.Pa Session.vim
|
||||||
if found, is used.
|
is used, if found.
|
||||||
See
|
See
|
||||||
.Ic :help session-file .
|
.Ic ":help session-file" .
|
||||||
.It Fl s Ar scriptin
|
.It Fl s Ar scriptin
|
||||||
Read normal mode commands from
|
Read normal mode commands from
|
||||||
.Ar scriptin .
|
.Ar scriptin .
|
||||||
The same can be done with the command
|
The same can be done with the command
|
||||||
.Ic :source! scriptin .
|
.Ic ":source! scriptin" .
|
||||||
If the end of the file is reached before
|
If the end of the file is reached before
|
||||||
.Nm
|
.Nm
|
||||||
exits, further characters are read from the keyboard.
|
exits, further characters are read from the keyboard.
|
||||||
@@ -329,6 +314,8 @@ Implies
|
|||||||
.Fl -headless .
|
.Fl -headless .
|
||||||
.It Fl -headless
|
.It Fl -headless
|
||||||
Do not start a user interface.
|
Do not start a user interface.
|
||||||
|
.It Fl -listen Ar address
|
||||||
|
Start RPC server on this pipe or TCP socket.
|
||||||
.It Fl h , -help
|
.It Fl h , -help
|
||||||
Print usage information and exit.
|
Print usage information and exit.
|
||||||
.It Fl v , -version
|
.It Fl v , -version
|
||||||
@@ -336,27 +323,30 @@ Print version information and exit.
|
|||||||
.El
|
.El
|
||||||
.Sh ENVIRONMENT
|
.Sh ENVIRONMENT
|
||||||
.Bl -tag -width Fl
|
.Bl -tag -width Fl
|
||||||
|
.It Ev NVIM_LOG_FILE
|
||||||
|
Low-level log file, usually found at ~/.local/share/nvim/log. See :help
|
||||||
|
$NVIM_LOG_FILE.
|
||||||
.It Ev VIM
|
.It Ev VIM
|
||||||
Used to locate various user files, such as the user's init.vim.
|
Used to locate user files, such as init.vim.
|
||||||
|
System-dependent, see :help $VIM.
|
||||||
.It Ev VIMRUNTIME
|
.It Ev VIMRUNTIME
|
||||||
Used to locate run time files, such as on-line documentation and
|
Used to locate runtime files (documentation, syntax highlighting, etc.).
|
||||||
syntax highlighting definitions.
|
|
||||||
.It Ev XDG_CONFIG_HOME
|
.It Ev XDG_CONFIG_HOME
|
||||||
Path to use for the user-local configuration directory, see
|
Path to the user-local configuration directory, see
|
||||||
.Sx FILES .
|
.Sx FILES .
|
||||||
Defaults to
|
Defaults to
|
||||||
.Pa ~/.config
|
.Pa ~/.config .
|
||||||
if not set.
|
See :help xdg.
|
||||||
.It Ev XDG_DATA_HOME
|
.It Ev XDG_DATA_HOME
|
||||||
Like
|
Like
|
||||||
.Ev XDG_CONFIG_HOME ,
|
.Ev XDG_CONFIG_HOME ,
|
||||||
but used to store data not generally edited by the user,
|
but used to store data not generally edited by the user,
|
||||||
namely swap, backup, and ShaDa files.
|
namely swap, backup, and ShaDa files.
|
||||||
Defaults to
|
Defaults to
|
||||||
.Pa ~/.local/share
|
.Pa ~/.local/share .
|
||||||
if not set.
|
See :help xdg.
|
||||||
.It Ev VIMINIT
|
.It Ev VIMINIT
|
||||||
A string of Ex commands to be executed at startup.
|
Ex commands to be executed at startup.
|
||||||
For example, the command to quit is
|
For example, the command to quit is
|
||||||
.Ic :q ,
|
.Ic :q ,
|
||||||
so to have
|
so to have
|
||||||
@@ -366,50 +356,43 @@ quit immediately after starting, set
|
|||||||
to
|
to
|
||||||
.Cm q .
|
.Cm q .
|
||||||
See
|
See
|
||||||
.Ic :help VIMINIT .
|
.Ic ":help VIMINIT" .
|
||||||
.It Ev SHELL
|
.It Ev SHELL
|
||||||
Used to set the 'shell' option, which determines the shell used by the
|
Used to initialize the 'shell' option, which decides the default shell used by
|
||||||
.Ic :terminal
|
features like
|
||||||
command.
|
.Ic :terminal ,
|
||||||
|
.Ic :! , and
|
||||||
|
.Ic system() .
|
||||||
.El
|
.El
|
||||||
.Sh FILES
|
.Sh FILES
|
||||||
.Bl -tag -width "~/.config/nvim/init.vim"
|
.Bl -tag -width "~/.config/nvim/init.vim"
|
||||||
.It Pa ~/.config/nvim/init.vim
|
.It Pa ~/.config/nvim/init.vim
|
||||||
The user-local
|
User-local
|
||||||
.Nm
|
.Nm
|
||||||
configuration file.
|
configuration file.
|
||||||
See
|
|
||||||
.Ev XDG_CONFIG_HOME
|
|
||||||
above.
|
|
||||||
.It Pa ~/.config/nvim
|
.It Pa ~/.config/nvim
|
||||||
The user-local
|
User-local
|
||||||
.Nm
|
.Nm
|
||||||
configuration directory.
|
configuration directory.
|
||||||
See
|
See also
|
||||||
.Ev XDG_CONFIG_HOME
|
.Ev XDG_CONFIG_HOME .
|
||||||
above.
|
|
||||||
.It Pa $VIM/sysinit.vim
|
.It Pa $VIM/sysinit.vim
|
||||||
The system-global
|
System-global
|
||||||
.Nm
|
.Nm
|
||||||
configuration file.
|
configuration file.
|
||||||
.It Pa /usr/local/share/nvim
|
.It Pa /usr/local/share/nvim
|
||||||
The system-global
|
System-global
|
||||||
.Nm
|
.Nm
|
||||||
runtime directory.
|
runtime directory.
|
||||||
.El
|
.El
|
||||||
.Sh AUTHORS
|
.Sh AUTHORS
|
||||||
.Nm
|
Nvim was started by
|
||||||
was started by
|
.An Thiago de Arruda .
|
||||||
.An Thiago de Arruda ,
|
|
||||||
with a lot of help from others.
|
|
||||||
.Pp
|
|
||||||
Most of Vim was written by
|
Most of Vim was written by
|
||||||
.An -nosplit
|
.An -nosplit
|
||||||
.An Bram Moolenaar ,
|
.An Bram Moolenaar .
|
||||||
with a lot of help from others.
|
|
||||||
See
|
See
|
||||||
.Ic :help credits .
|
.Ic ":help credits" .
|
||||||
.Pp
|
|
||||||
Vim is based on Stevie, worked on by
|
Vim is based on Stevie, worked on by
|
||||||
.An Tim Thompson ,
|
.An Tim Thompson ,
|
||||||
.An Tony Andrews ,
|
.An Tony Andrews ,
|
||||||
|
@@ -42,6 +42,7 @@ foreach(PACKAGE ${PACKAGES})
|
|||||||
nvim
|
nvim
|
||||||
WORKING_DIRECTORY "${GENERATED_PACKAGE_DIR}/${PACKNAME}"
|
WORKING_DIRECTORY "${GENERATED_PACKAGE_DIR}/${PACKNAME}"
|
||||||
)
|
)
|
||||||
|
add_dependencies(${PACKNAME}-tags nvim_runtime_deps)
|
||||||
|
|
||||||
add_custom_command(OUTPUT "${GENERATED_PACKAGE_DIR}/${PACKNAME}/doc/tags"
|
add_custom_command(OUTPUT "${GENERATED_PACKAGE_DIR}/${PACKNAME}/doc/tags"
|
||||||
DEPENDS
|
DEPENDS
|
||||||
@@ -71,7 +72,7 @@ foreach(DF ${DOCFILES})
|
|||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
add_custom_target(helptags
|
add_custom_target(helptags
|
||||||
COMMAND ${CMAKE_COMMAND} -E remove_directory ${GENERATED_RUNTIME_DIR}/doc
|
COMMAND ${CMAKE_COMMAND} -E remove ${GENERATED_RUNTIME_DIR}/doc/*
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
||||||
${PROJECT_SOURCE_DIR}/runtime/doc ${GENERATED_RUNTIME_DIR}/doc
|
${PROJECT_SOURCE_DIR}/runtime/doc ${GENERATED_RUNTIME_DIR}/doc
|
||||||
COMMAND "${PROJECT_BINARY_DIR}/bin/nvim"
|
COMMAND "${PROJECT_BINARY_DIR}/bin/nvim"
|
||||||
@@ -80,6 +81,7 @@ add_custom_target(helptags
|
|||||||
nvim
|
nvim
|
||||||
WORKING_DIRECTORY "${GENERATED_RUNTIME_DIR}"
|
WORKING_DIRECTORY "${GENERATED_RUNTIME_DIR}"
|
||||||
)
|
)
|
||||||
|
add_dependencies(helptags nvim_runtime_deps)
|
||||||
|
|
||||||
add_custom_command(OUTPUT ${GENERATED_HELP_TAGS}
|
add_custom_command(OUTPUT ${GENERATED_HELP_TAGS}
|
||||||
DEPENDS
|
DEPENDS
|
||||||
@@ -138,7 +140,7 @@ endforeach()
|
|||||||
file(GLOB_RECURSE RUNTIME_FILES
|
file(GLOB_RECURSE RUNTIME_FILES
|
||||||
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
|
RELATIVE ${CMAKE_CURRENT_SOURCE_DIR}
|
||||||
rgb.txt
|
rgb.txt
|
||||||
*.vim *.dict *.py *.rb *.ps *.tutor)
|
*.vim *.lua *.dict *.py *.rb *.ps *.spl *.tutor *.tutor.json)
|
||||||
|
|
||||||
foreach(F ${RUNTIME_FILES})
|
foreach(F ${RUNTIME_FILES})
|
||||||
get_filename_component(BASEDIR ${F} PATH)
|
get_filename_component(BASEDIR ${F} PATH)
|
||||||
|
741
runtime/autoload/dist/ft.vim
vendored
Normal file
741
runtime/autoload/dist/ft.vim
vendored
Normal file
@@ -0,0 +1,741 @@
|
|||||||
|
" Vim functions for file type detection
|
||||||
|
"
|
||||||
|
" Maintainer: Bram Moolenaar <Bram@vim.org>
|
||||||
|
" Last Change: 2017 Nov 11
|
||||||
|
|
||||||
|
" These functions are moved here from runtime/filetype.vim to make startup
|
||||||
|
" faster.
|
||||||
|
|
||||||
|
" Line continuation is used here, remove 'C' from 'cpoptions'
|
||||||
|
let s:cpo_save = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
func dist#ft#Check_inp()
|
||||||
|
if getline(1) =~ '^\*'
|
||||||
|
setf abaqus
|
||||||
|
else
|
||||||
|
let n = 1
|
||||||
|
if line("$") > 500
|
||||||
|
let nmax = 500
|
||||||
|
else
|
||||||
|
let nmax = line("$")
|
||||||
|
endif
|
||||||
|
while n <= nmax
|
||||||
|
if getline(n) =~? "^header surface data"
|
||||||
|
setf trasys
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
let n = n + 1
|
||||||
|
endwhile
|
||||||
|
endif
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
" This function checks for the kind of assembly that is wanted by the user, or
|
||||||
|
" can be detected from the first five lines of the file.
|
||||||
|
func dist#ft#FTasm()
|
||||||
|
" make sure b:asmsyntax exists
|
||||||
|
if !exists("b:asmsyntax")
|
||||||
|
let b:asmsyntax = ""
|
||||||
|
endif
|
||||||
|
|
||||||
|
if b:asmsyntax == ""
|
||||||
|
call dist#ft#FTasmsyntax()
|
||||||
|
endif
|
||||||
|
|
||||||
|
" if b:asmsyntax still isn't set, default to asmsyntax or GNU
|
||||||
|
if b:asmsyntax == ""
|
||||||
|
if exists("g:asmsyntax")
|
||||||
|
let b:asmsyntax = g:asmsyntax
|
||||||
|
else
|
||||||
|
let b:asmsyntax = "asm"
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
exe "setf " . fnameescape(b:asmsyntax)
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func dist#ft#FTasmsyntax()
|
||||||
|
" see if file contains any asmsyntax=foo overrides. If so, change
|
||||||
|
" b:asmsyntax appropriately
|
||||||
|
let head = " ".getline(1)." ".getline(2)." ".getline(3)." ".getline(4).
|
||||||
|
\" ".getline(5)." "
|
||||||
|
let match = matchstr(head, '\sasmsyntax=\zs[a-zA-Z0-9]\+\ze\s')
|
||||||
|
if match != ''
|
||||||
|
let b:asmsyntax = match
|
||||||
|
elseif ((head =~? '\.title') || (head =~? '\.ident') || (head =~? '\.macro') || (head =~? '\.subtitle') || (head =~? '\.library'))
|
||||||
|
let b:asmsyntax = "vmasm"
|
||||||
|
endif
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
" Check if one of the first five lines contains "VB_Name". In that case it is
|
||||||
|
" probably a Visual Basic file. Otherwise it's assumed to be "alt" filetype.
|
||||||
|
func dist#ft#FTVB(alt)
|
||||||
|
if getline(1).getline(2).getline(3).getline(4).getline(5) =~? 'VB_Name\|Begin VB\.\(Form\|MDIForm\|UserControl\)'
|
||||||
|
setf vb
|
||||||
|
else
|
||||||
|
exe "setf " . a:alt
|
||||||
|
endif
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func dist#ft#FTbtm()
|
||||||
|
if exists("g:dosbatch_syntax_for_btm") && g:dosbatch_syntax_for_btm
|
||||||
|
setf dosbatch
|
||||||
|
else
|
||||||
|
setf btm
|
||||||
|
endif
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func dist#ft#BindzoneCheck(default)
|
||||||
|
if getline(1).getline(2).getline(3).getline(4) =~ '^; <<>> DiG [0-9.]\+.* <<>>\|$ORIGIN\|$TTL\|IN\s\+SOA'
|
||||||
|
setf bindzone
|
||||||
|
elseif a:default != ''
|
||||||
|
exe 'setf ' . a:default
|
||||||
|
endif
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func dist#ft#FTlpc()
|
||||||
|
if exists("g:lpc_syntax_for_c")
|
||||||
|
let lnum = 1
|
||||||
|
while lnum <= 12
|
||||||
|
if getline(lnum) =~# '^\(//\|inherit\|private\|protected\|nosave\|string\|object\|mapping\|mixed\)'
|
||||||
|
setf lpc
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
let lnum = lnum + 1
|
||||||
|
endwhile
|
||||||
|
endif
|
||||||
|
setf c
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func dist#ft#FTheader()
|
||||||
|
if match(getline(1, min([line("$"), 200])), '^@\(interface\|end\|class\)') > -1
|
||||||
|
if exists("g:c_syntax_for_h")
|
||||||
|
setf objc
|
||||||
|
else
|
||||||
|
setf objcpp
|
||||||
|
endif
|
||||||
|
elseif exists("g:c_syntax_for_h")
|
||||||
|
setf c
|
||||||
|
elseif exists("g:ch_syntax_for_h")
|
||||||
|
setf ch
|
||||||
|
else
|
||||||
|
setf cpp
|
||||||
|
endif
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
" This function checks if one of the first ten lines start with a '@'. In
|
||||||
|
" that case it is probably a change file.
|
||||||
|
" If the first line starts with # or ! it's probably a ch file.
|
||||||
|
" If a line has "main", "include", "//" ir "/*" it's probably ch.
|
||||||
|
" Otherwise CHILL is assumed.
|
||||||
|
func dist#ft#FTchange()
|
||||||
|
let lnum = 1
|
||||||
|
while lnum <= 10
|
||||||
|
if getline(lnum)[0] == '@'
|
||||||
|
setf change
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
if lnum == 1 && (getline(1)[0] == '#' || getline(1)[0] == '!')
|
||||||
|
setf ch
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
if getline(lnum) =~ "MODULE"
|
||||||
|
setf chill
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
if getline(lnum) =~ 'main\s*(\|#\s*include\|//'
|
||||||
|
setf ch
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
let lnum = lnum + 1
|
||||||
|
endwhile
|
||||||
|
setf chill
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func dist#ft#FTent()
|
||||||
|
" This function checks for valid cl syntax in the first five lines.
|
||||||
|
" Look for either an opening comment, '#', or a block start, '{".
|
||||||
|
" If not found, assume SGML.
|
||||||
|
let lnum = 1
|
||||||
|
while lnum < 6
|
||||||
|
let line = getline(lnum)
|
||||||
|
if line =~ '^\s*[#{]'
|
||||||
|
setf cl
|
||||||
|
return
|
||||||
|
elseif line !~ '^\s*$'
|
||||||
|
" Not a blank line, not a comment, and not a block start,
|
||||||
|
" so doesn't look like valid cl code.
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
let lnum = lnum + 1
|
||||||
|
endw
|
||||||
|
setf dtd
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func dist#ft#EuphoriaCheck()
|
||||||
|
if exists('g:filetype_euphoria')
|
||||||
|
exe 'setf ' . g:filetype_euphoria
|
||||||
|
else
|
||||||
|
setf euphoria3
|
||||||
|
endif
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func dist#ft#DtraceCheck()
|
||||||
|
let lines = getline(1, min([line("$"), 100]))
|
||||||
|
if match(lines, '^module\>\|^import\>') > -1
|
||||||
|
" D files often start with a module and/or import statement.
|
||||||
|
setf d
|
||||||
|
elseif match(lines, '^#!\S\+dtrace\|#pragma\s\+D\s\+option\|:\S\{-}:\S\{-}:') > -1
|
||||||
|
setf dtrace
|
||||||
|
else
|
||||||
|
setf d
|
||||||
|
endif
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func dist#ft#FTe()
|
||||||
|
if exists('g:filetype_euphoria')
|
||||||
|
exe 'setf ' . g:filetype_euphoria
|
||||||
|
else
|
||||||
|
let n = 1
|
||||||
|
while n < 100 && n < line("$")
|
||||||
|
if getline(n) =~ "^\\s*\\(<'\\|'>\\)\\s*$"
|
||||||
|
setf specman
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
let n = n + 1
|
||||||
|
endwhile
|
||||||
|
setf eiffel
|
||||||
|
endif
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
" Distinguish between HTML, XHTML and Django
|
||||||
|
func dist#ft#FThtml()
|
||||||
|
let n = 1
|
||||||
|
while n < 10 && n < line("$")
|
||||||
|
if getline(n) =~ '\<DTD\s\+XHTML\s'
|
||||||
|
setf xhtml
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
if getline(n) =~ '{%\s*\(extends\|block\|load\)\>\|{#\s\+'
|
||||||
|
setf htmldjango
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
let n = n + 1
|
||||||
|
endwhile
|
||||||
|
setf html
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
" Distinguish between standard IDL and MS-IDL
|
||||||
|
func dist#ft#FTidl()
|
||||||
|
let n = 1
|
||||||
|
while n < 50 && n < line("$")
|
||||||
|
if getline(n) =~ '^\s*import\s\+"\(unknwn\|objidl\)\.idl"'
|
||||||
|
setf msidl
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
let n = n + 1
|
||||||
|
endwhile
|
||||||
|
setf idl
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
" Distinguish between "default" and Cproto prototype file. */
|
||||||
|
func dist#ft#ProtoCheck(default)
|
||||||
|
" Cproto files have a comment in the first line and a function prototype in
|
||||||
|
" the second line, it always ends in ";". Indent files may also have
|
||||||
|
" comments, thus we can't match comments to see the difference.
|
||||||
|
" IDL files can have a single ';' in the second line, require at least one
|
||||||
|
" chacter before the ';'.
|
||||||
|
if getline(2) =~ '.;$'
|
||||||
|
setf cpp
|
||||||
|
else
|
||||||
|
exe 'setf ' . a:default
|
||||||
|
endif
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func dist#ft#FTm()
|
||||||
|
let n = 1
|
||||||
|
let saw_comment = 0 " Whether we've seen a multiline comment leader.
|
||||||
|
while n < 100
|
||||||
|
let line = getline(n)
|
||||||
|
if line =~ '^\s*/\*'
|
||||||
|
" /* ... */ is a comment in Objective C and Murphi, so we can't conclude
|
||||||
|
" it's either of them yet, but track this as a hint in case we don't see
|
||||||
|
" anything more definitive.
|
||||||
|
let saw_comment = 1
|
||||||
|
endif
|
||||||
|
if line =~ '^\s*\(#\s*\(include\|import\)\>\|@import\>\|//\)'
|
||||||
|
setf objc
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
if line =~ '^\s*%'
|
||||||
|
setf matlab
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
if line =~ '^\s*(\*'
|
||||||
|
setf mma
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
if line =~ '^\c\s*\(\(type\|var\)\>\|--\)'
|
||||||
|
setf murphi
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
let n = n + 1
|
||||||
|
endwhile
|
||||||
|
|
||||||
|
if saw_comment
|
||||||
|
" We didn't see anything definitive, but this looks like either Objective C
|
||||||
|
" or Murphi based on the comment leader. Assume the former as it is more
|
||||||
|
" common.
|
||||||
|
setf objc
|
||||||
|
elseif exists("g:filetype_m")
|
||||||
|
" Use user specified default filetype for .m
|
||||||
|
exe "setf " . g:filetype_m
|
||||||
|
else
|
||||||
|
" Default is matlab
|
||||||
|
setf matlab
|
||||||
|
endif
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func dist#ft#FTmms()
|
||||||
|
let n = 1
|
||||||
|
while n < 10
|
||||||
|
let line = getline(n)
|
||||||
|
if line =~ '^\s*\(%\|//\)' || line =~ '^\*'
|
||||||
|
setf mmix
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
if line =~ '^\s*#'
|
||||||
|
setf make
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
let n = n + 1
|
||||||
|
endwhile
|
||||||
|
setf mmix
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
" This function checks if one of the first five lines start with a dot. In
|
||||||
|
" that case it is probably an nroff file: 'filetype' is set and 1 is returned.
|
||||||
|
func dist#ft#FTnroff()
|
||||||
|
if getline(1)[0] . getline(2)[0] . getline(3)[0] . getline(4)[0] . getline(5)[0] =~ '\.'
|
||||||
|
setf nroff
|
||||||
|
return 1
|
||||||
|
endif
|
||||||
|
return 0
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func dist#ft#FTmm()
|
||||||
|
let n = 1
|
||||||
|
while n < 10
|
||||||
|
let line = getline(n)
|
||||||
|
if line =~ '^\s*\(#\s*\(include\|import\)\>\|@import\>\|/\*\)'
|
||||||
|
setf objcpp
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
let n = n + 1
|
||||||
|
endwhile
|
||||||
|
setf nroff
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func dist#ft#FTpl()
|
||||||
|
if exists("g:filetype_pl")
|
||||||
|
exe "setf " . g:filetype_pl
|
||||||
|
else
|
||||||
|
" recognize Prolog by specific text in the first non-empty line
|
||||||
|
" require a blank after the '%' because Perl uses "%list" and "%translate"
|
||||||
|
let l = getline(nextnonblank(1))
|
||||||
|
if l =~ '\<prolog\>' || l =~ '^\s*\(%\+\(\s\|$\)\|/\*\)' || l =~ ':-'
|
||||||
|
setf prolog
|
||||||
|
else
|
||||||
|
setf perl
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func dist#ft#FTinc()
|
||||||
|
if exists("g:filetype_inc")
|
||||||
|
exe "setf " . g:filetype_inc
|
||||||
|
else
|
||||||
|
let lines = getline(1).getline(2).getline(3)
|
||||||
|
if lines =~? "perlscript"
|
||||||
|
setf aspperl
|
||||||
|
elseif lines =~ "<%"
|
||||||
|
setf aspvbs
|
||||||
|
elseif lines =~ "<?"
|
||||||
|
setf php
|
||||||
|
else
|
||||||
|
call dist#ft#FTasmsyntax()
|
||||||
|
if exists("b:asmsyntax")
|
||||||
|
exe "setf " . fnameescape(b:asmsyntax)
|
||||||
|
else
|
||||||
|
setf pov
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func dist#ft#FTprogress_cweb()
|
||||||
|
if exists("g:filetype_w")
|
||||||
|
exe "setf " . g:filetype_w
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
if getline(1) =~ '&ANALYZE' || getline(3) =~ '&GLOBAL-DEFINE'
|
||||||
|
setf progress
|
||||||
|
else
|
||||||
|
setf cweb
|
||||||
|
endif
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func dist#ft#FTprogress_asm()
|
||||||
|
if exists("g:filetype_i")
|
||||||
|
exe "setf " . g:filetype_i
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
" This function checks for an assembly comment the first ten lines.
|
||||||
|
" If not found, assume Progress.
|
||||||
|
let lnum = 1
|
||||||
|
while lnum <= 10 && lnum < line('$')
|
||||||
|
let line = getline(lnum)
|
||||||
|
if line =~ '^\s*;' || line =~ '^\*'
|
||||||
|
call dist#ft#FTasm()
|
||||||
|
return
|
||||||
|
elseif line !~ '^\s*$' || line =~ '^/\*'
|
||||||
|
" Not an empty line: Doesn't look like valid assembly code.
|
||||||
|
" Or it looks like a Progress /* comment
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
let lnum = lnum + 1
|
||||||
|
endw
|
||||||
|
setf progress
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func dist#ft#FTprogress_pascal()
|
||||||
|
if exists("g:filetype_p")
|
||||||
|
exe "setf " . g:filetype_p
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
" This function checks for valid Pascal syntax in the first ten lines.
|
||||||
|
" Look for either an opening comment or a program start.
|
||||||
|
" If not found, assume Progress.
|
||||||
|
let lnum = 1
|
||||||
|
while lnum <= 10 && lnum < line('$')
|
||||||
|
let line = getline(lnum)
|
||||||
|
if line =~ '^\s*\(program\|unit\|procedure\|function\|const\|type\|var\)\>'
|
||||||
|
\ || line =~ '^\s*{' || line =~ '^\s*(\*'
|
||||||
|
setf pascal
|
||||||
|
return
|
||||||
|
elseif line !~ '^\s*$' || line =~ '^/\*'
|
||||||
|
" Not an empty line: Doesn't look like valid Pascal code.
|
||||||
|
" Or it looks like a Progress /* comment
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
let lnum = lnum + 1
|
||||||
|
endw
|
||||||
|
setf progress
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func dist#ft#FTr()
|
||||||
|
let max = line("$") > 50 ? 50 : line("$")
|
||||||
|
|
||||||
|
for n in range(1, max)
|
||||||
|
" Rebol is easy to recognize, check for that first
|
||||||
|
if getline(n) =~? '\<REBOL\>'
|
||||||
|
setf rebol
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
for n in range(1, max)
|
||||||
|
" R has # comments
|
||||||
|
if getline(n) =~ '^\s*#'
|
||||||
|
setf r
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
" Rexx has /* comments */
|
||||||
|
if getline(n) =~ '^\s*/\*'
|
||||||
|
setf rexx
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
|
||||||
|
" Nothing recognized, use user default or assume Rexx
|
||||||
|
if exists("g:filetype_r")
|
||||||
|
exe "setf " . g:filetype_r
|
||||||
|
else
|
||||||
|
" Rexx used to be the default, but R appears to be much more popular.
|
||||||
|
setf r
|
||||||
|
endif
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func dist#ft#McSetf()
|
||||||
|
" Rely on the file to start with a comment.
|
||||||
|
" MS message text files use ';', Sendmail files use '#' or 'dnl'
|
||||||
|
for lnum in range(1, min([line("$"), 20]))
|
||||||
|
let line = getline(lnum)
|
||||||
|
if line =~ '^\s*\(#\|dnl\)'
|
||||||
|
setf m4 " Sendmail .mc file
|
||||||
|
return
|
||||||
|
elseif line =~ '^\s*;'
|
||||||
|
setf msmessages " MS Message text file
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
setf m4 " Default: Sendmail .mc file
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
" Called from filetype.vim and scripts.vim.
|
||||||
|
func dist#ft#SetFileTypeSH(name)
|
||||||
|
if expand("<amatch>") =~ g:ft_ignore_pat
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
if a:name =~ '\<csh\>'
|
||||||
|
" Some .sh scripts contain #!/bin/csh.
|
||||||
|
call dist#ft#SetFileTypeShell("csh")
|
||||||
|
return
|
||||||
|
elseif a:name =~ '\<tcsh\>'
|
||||||
|
" Some .sh scripts contain #!/bin/tcsh.
|
||||||
|
call dist#ft#SetFileTypeShell("tcsh")
|
||||||
|
return
|
||||||
|
elseif a:name =~ '\<zsh\>'
|
||||||
|
" Some .sh scripts contain #!/bin/zsh.
|
||||||
|
call dist#ft#SetFileTypeShell("zsh")
|
||||||
|
return
|
||||||
|
elseif a:name =~ '\<ksh\>'
|
||||||
|
let b:is_kornshell = 1
|
||||||
|
if exists("b:is_bash")
|
||||||
|
unlet b:is_bash
|
||||||
|
endif
|
||||||
|
if exists("b:is_sh")
|
||||||
|
unlet b:is_sh
|
||||||
|
endif
|
||||||
|
elseif exists("g:bash_is_sh") || a:name =~ '\<bash\>' || a:name =~ '\<bash2\>'
|
||||||
|
let b:is_bash = 1
|
||||||
|
if exists("b:is_kornshell")
|
||||||
|
unlet b:is_kornshell
|
||||||
|
endif
|
||||||
|
if exists("b:is_sh")
|
||||||
|
unlet b:is_sh
|
||||||
|
endif
|
||||||
|
elseif a:name =~ '\<sh\>'
|
||||||
|
let b:is_sh = 1
|
||||||
|
if exists("b:is_kornshell")
|
||||||
|
unlet b:is_kornshell
|
||||||
|
endif
|
||||||
|
if exists("b:is_bash")
|
||||||
|
unlet b:is_bash
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
call dist#ft#SetFileTypeShell("sh")
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
" For shell-like file types, check for an "exec" command hidden in a comment,
|
||||||
|
" as used for Tcl.
|
||||||
|
" Also called from scripts.vim, thus can't be local to this script.
|
||||||
|
func dist#ft#SetFileTypeShell(name)
|
||||||
|
if expand("<amatch>") =~ g:ft_ignore_pat
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
let l = 2
|
||||||
|
while l < 20 && l < line("$") && getline(l) =~ '^\s*\(#\|$\)'
|
||||||
|
" Skip empty and comment lines.
|
||||||
|
let l = l + 1
|
||||||
|
endwhile
|
||||||
|
if l < line("$") && getline(l) =~ '\s*exec\s' && getline(l - 1) =~ '^\s*#.*\\$'
|
||||||
|
" Found an "exec" line after a comment with continuation
|
||||||
|
let n = substitute(getline(l),'\s*exec\s\+\([^ ]*/\)\=', '', '')
|
||||||
|
if n =~ '\<tclsh\|\<wish'
|
||||||
|
setf tcl
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
exe "setf " . a:name
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func dist#ft#CSH()
|
||||||
|
if exists("g:filetype_csh")
|
||||||
|
call dist#ft#SetFileTypeShell(g:filetype_csh)
|
||||||
|
elseif &shell =~ "tcsh"
|
||||||
|
call dist#ft#SetFileTypeShell("tcsh")
|
||||||
|
else
|
||||||
|
call dist#ft#SetFileTypeShell("csh")
|
||||||
|
endif
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
let s:ft_rules_udev_rules_pattern = '^\s*\cudev_rules\s*=\s*"\([^"]\{-1,}\)/*".*'
|
||||||
|
func dist#ft#FTRules()
|
||||||
|
let path = expand('<amatch>:p')
|
||||||
|
if path =~ '^/\(etc/udev/\%(rules\.d/\)\=.*\.rules\|lib/udev/\%(rules\.d/\)\=.*\.rules\)$'
|
||||||
|
setf udevrules
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
if path =~ '^/etc/ufw/'
|
||||||
|
setf conf " Better than hog
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
if path =~ '^/\(etc\|usr/share\)/polkit-1/rules\.d'
|
||||||
|
setf javascript
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
try
|
||||||
|
let config_lines = readfile('/etc/udev/udev.conf')
|
||||||
|
catch /^Vim\%((\a\+)\)\=:E484/
|
||||||
|
setf hog
|
||||||
|
return
|
||||||
|
endtry
|
||||||
|
let dir = expand('<amatch>:p:h')
|
||||||
|
for line in config_lines
|
||||||
|
if line =~ s:ft_rules_udev_rules_pattern
|
||||||
|
let udev_rules = substitute(line, s:ft_rules_udev_rules_pattern, '\1', "")
|
||||||
|
if dir == udev_rules
|
||||||
|
setf udevrules
|
||||||
|
endif
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
endfor
|
||||||
|
setf hog
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func dist#ft#SQL()
|
||||||
|
if exists("g:filetype_sql")
|
||||||
|
exe "setf " . g:filetype_sql
|
||||||
|
else
|
||||||
|
setf sql
|
||||||
|
endif
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
" If the file has an extension of 't' and is in a directory 't' or 'xt' then
|
||||||
|
" it is almost certainly a Perl test file.
|
||||||
|
" If the first line starts with '#' and contains 'perl' it's probably a Perl
|
||||||
|
" file.
|
||||||
|
" (Slow test) If a file contains a 'use' statement then it is almost certainly
|
||||||
|
" a Perl file.
|
||||||
|
func dist#ft#FTperl()
|
||||||
|
let dirname = expand("%:p:h:t")
|
||||||
|
if expand("%:e") == 't' && (dirname == 't' || dirname == 'xt')
|
||||||
|
setf perl
|
||||||
|
return 1
|
||||||
|
endif
|
||||||
|
if getline(1)[0] == '#' && getline(1) =~ 'perl'
|
||||||
|
setf perl
|
||||||
|
return 1
|
||||||
|
endif
|
||||||
|
if search('^use\s\s*\k', 'nc', 30)
|
||||||
|
setf perl
|
||||||
|
return 1
|
||||||
|
endif
|
||||||
|
return 0
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
" Choose context, plaintex, or tex (LaTeX) based on these rules:
|
||||||
|
" 1. Check the first line of the file for "%&<format>".
|
||||||
|
" 2. Check the first 1000 non-comment lines for LaTeX or ConTeXt keywords.
|
||||||
|
" 3. Default to "latex" or to g:tex_flavor, can be set in user's vimrc.
|
||||||
|
func dist#ft#FTtex()
|
||||||
|
let firstline = getline(1)
|
||||||
|
if firstline =~ '^%&\s*\a\+'
|
||||||
|
let format = tolower(matchstr(firstline, '\a\+'))
|
||||||
|
let format = substitute(format, 'pdf', '', '')
|
||||||
|
if format == 'tex'
|
||||||
|
let format = 'latex'
|
||||||
|
elseif format == 'plaintex'
|
||||||
|
let format = 'plain'
|
||||||
|
endif
|
||||||
|
elseif expand('%') =~ 'tex/context/.*/.*.tex'
|
||||||
|
let format = 'context'
|
||||||
|
else
|
||||||
|
" Default value, may be changed later:
|
||||||
|
let format = exists("g:tex_flavor") ? g:tex_flavor : 'plain'
|
||||||
|
" Save position, go to the top of the file, find first non-comment line.
|
||||||
|
let save_cursor = getpos('.')
|
||||||
|
call cursor(1,1)
|
||||||
|
let firstNC = search('^\s*[^[:space:]%]', 'c', 1000)
|
||||||
|
if firstNC " Check the next thousand lines for a LaTeX or ConTeXt keyword.
|
||||||
|
let lpat = 'documentclass\>\|usepackage\>\|begin{\|newcommand\>\|renewcommand\>'
|
||||||
|
let cpat = 'start\a\+\|setup\a\+\|usemodule\|enablemode\|enableregime\|setvariables\|useencoding\|usesymbols\|stelle\a\+\|verwende\a\+\|stel\a\+\|gebruik\a\+\|usa\a\+\|imposta\a\+\|regle\a\+\|utilisemodule\>'
|
||||||
|
let kwline = search('^\s*\\\%(' . lpat . '\)\|^\s*\\\(' . cpat . '\)',
|
||||||
|
\ 'cnp', firstNC + 1000)
|
||||||
|
if kwline == 1 " lpat matched
|
||||||
|
let format = 'latex'
|
||||||
|
elseif kwline == 2 " cpat matched
|
||||||
|
let format = 'context'
|
||||||
|
endif " If neither matched, keep default set above.
|
||||||
|
" let lline = search('^\s*\\\%(' . lpat . '\)', 'cn', firstNC + 1000)
|
||||||
|
" let cline = search('^\s*\\\%(' . cpat . '\)', 'cn', firstNC + 1000)
|
||||||
|
" if cline > 0
|
||||||
|
" let format = 'context'
|
||||||
|
" endif
|
||||||
|
" if lline > 0 && (cline == 0 || cline > lline)
|
||||||
|
" let format = 'tex'
|
||||||
|
" endif
|
||||||
|
endif " firstNC
|
||||||
|
call setpos('.', save_cursor)
|
||||||
|
endif " firstline =~ '^%&\s*\a\+'
|
||||||
|
|
||||||
|
" Translation from formats to file types. TODO: add AMSTeX, RevTex, others?
|
||||||
|
if format == 'plain'
|
||||||
|
setf plaintex
|
||||||
|
elseif format == 'context'
|
||||||
|
setf context
|
||||||
|
else " probably LaTeX
|
||||||
|
setf tex
|
||||||
|
endif
|
||||||
|
return
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func dist#ft#FTxml()
|
||||||
|
let n = 1
|
||||||
|
while n < 100 && n < line("$")
|
||||||
|
let line = getline(n)
|
||||||
|
" DocBook 4 or DocBook 5.
|
||||||
|
let is_docbook4 = line =~ '<!DOCTYPE.*DocBook'
|
||||||
|
let is_docbook5 = line =~ ' xmlns="http://docbook.org/ns/docbook"'
|
||||||
|
if is_docbook4 || is_docbook5
|
||||||
|
let b:docbk_type = "xml"
|
||||||
|
if is_docbook5
|
||||||
|
let b:docbk_ver = 5
|
||||||
|
else
|
||||||
|
let b:docbk_ver = 4
|
||||||
|
endif
|
||||||
|
setf docbk
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
if line =~ 'xmlns:xbl="http://www.mozilla.org/xbl"'
|
||||||
|
setf xbl
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
let n += 1
|
||||||
|
endwhile
|
||||||
|
setf xml
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func dist#ft#FTy()
|
||||||
|
let n = 1
|
||||||
|
while n < 100 && n < line("$")
|
||||||
|
let line = getline(n)
|
||||||
|
if line =~ '^\s*%'
|
||||||
|
setf yacc
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
if getline(n) =~ '^\s*\(#\|class\>\)' && getline(n) !~ '^\s*#\s*include'
|
||||||
|
setf racc
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
let n = n + 1
|
||||||
|
endwhile
|
||||||
|
setf yacc
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
func dist#ft#Redif()
|
||||||
|
let lnum = 1
|
||||||
|
while lnum <= 5 && lnum < line('$')
|
||||||
|
if getline(lnum) =~ "^\ctemplate-type:"
|
||||||
|
setf redif
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
let lnum = lnum + 1
|
||||||
|
endwhile
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
|
||||||
|
" Restore 'cpoptions'
|
||||||
|
let &cpo = s:cpo_save
|
||||||
|
unlet s:cpo_save
|
@@ -93,27 +93,27 @@ function! s:help_to_link(s) abort
|
|||||||
return substitute(a:s, '\v:h%[elp] ([^|][^"\r\n ]+)', ':help |\1|', 'g')
|
return substitute(a:s, '\v:h%[elp] ([^|][^"\r\n ]+)', ':help |\1|', 'g')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" Format a message for a specific report item
|
" Format a message for a specific report item.
|
||||||
|
" a:1: Optional advice (string or list)
|
||||||
function! s:format_report_message(status, msg, ...) abort " {{{
|
function! s:format_report_message(status, msg, ...) abort " {{{
|
||||||
let output = ' - ' . a:status . ': ' . s:indent_after_line1(a:msg, 4)
|
let output = ' - ' . a:status . ': ' . s:indent_after_line1(a:msg, 4)
|
||||||
let advice = []
|
|
||||||
|
|
||||||
" Optional parameters
|
" Optional parameters
|
||||||
if a:0 > 0
|
if a:0 > 0
|
||||||
let advice = type(a:1) == type("") ? [a:1] : a:1
|
let advice = type(a:1) == type('') ? [a:1] : a:1
|
||||||
if type(advice) != type([])
|
if type(advice) != type([])
|
||||||
throw "Expected String or List"
|
throw 'a:1: expected String or List'
|
||||||
|
endif
|
||||||
|
|
||||||
|
" Report each suggestion
|
||||||
|
if !empty(advice)
|
||||||
|
let output .= "\n - ADVICE:"
|
||||||
|
for suggestion in advice
|
||||||
|
let output .= "\n - " . s:indent_after_line1(suggestion, 10)
|
||||||
|
endfor
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" Report each suggestion
|
|
||||||
if len(advice) > 0
|
|
||||||
let output .= "\n - ADVICE:"
|
|
||||||
endif
|
|
||||||
for suggestion in advice
|
|
||||||
let output .= "\n - " . s:indent_after_line1(suggestion, 10)
|
|
||||||
endfor
|
|
||||||
|
|
||||||
return s:help_to_link(output)
|
return s:help_to_link(output)
|
||||||
endfunction " }}}
|
endfunction " }}}
|
||||||
|
|
||||||
@@ -128,6 +128,7 @@ function! health#report_ok(msg) abort " {{{
|
|||||||
endfunction " }}}
|
endfunction " }}}
|
||||||
|
|
||||||
" Reports a health warning.
|
" Reports a health warning.
|
||||||
|
" a:1: Optional advice (string or list)
|
||||||
function! health#report_warn(msg, ...) abort " {{{
|
function! health#report_warn(msg, ...) abort " {{{
|
||||||
if a:0 > 0
|
if a:0 > 0
|
||||||
echo s:format_report_message('WARNING', a:msg, a:1)
|
echo s:format_report_message('WARNING', a:msg, a:1)
|
||||||
@@ -137,6 +138,7 @@ function! health#report_warn(msg, ...) abort " {{{
|
|||||||
endfunction " }}}
|
endfunction " }}}
|
||||||
|
|
||||||
" Reports a failed healthcheck.
|
" Reports a failed healthcheck.
|
||||||
|
" a:1: Optional advice (string or list)
|
||||||
function! health#report_error(msg, ...) abort " {{{
|
function! health#report_error(msg, ...) abort " {{{
|
||||||
if a:0 > 0
|
if a:0 > 0
|
||||||
echo s:format_report_message('ERROR', a:msg, a:1)
|
echo s:format_report_message('ERROR', a:msg, a:1)
|
||||||
|
@@ -7,12 +7,12 @@ function! s:check_config() abort
|
|||||||
" If $VIM is empty we don't care. Else make sure it is valid.
|
" If $VIM is empty we don't care. Else make sure it is valid.
|
||||||
if !empty($VIM) && !filereadable($VIM.'/runtime/doc/nvim.txt')
|
if !empty($VIM) && !filereadable($VIM.'/runtime/doc/nvim.txt')
|
||||||
let ok = v:false
|
let ok = v:false
|
||||||
call health#report_error("$VIM is invalid: ".$VIM)
|
call health#report_error('$VIM is invalid: '.$VIM)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if exists('$NVIM_TUI_ENABLE_CURSOR_SHAPE')
|
if exists('$NVIM_TUI_ENABLE_CURSOR_SHAPE')
|
||||||
let ok = v:false
|
let ok = v:false
|
||||||
call health#report_warn("$NVIM_TUI_ENABLE_CURSOR_SHAPE is ignored in Nvim 0.2+",
|
call health#report_warn('$NVIM_TUI_ENABLE_CURSOR_SHAPE is ignored in Nvim 0.2+',
|
||||||
\ [ "Use the 'guicursor' option to configure cursor shape. :help 'guicursor'",
|
\ [ "Use the 'guicursor' option to configure cursor shape. :help 'guicursor'",
|
||||||
\ 'https://github.com/neovim/neovim/wiki/Following-HEAD#20170402' ])
|
\ 'https://github.com/neovim/neovim/wiki/Following-HEAD#20170402' ])
|
||||||
endif
|
endif
|
||||||
@@ -100,8 +100,8 @@ function! s:check_performance() abort
|
|||||||
else
|
else
|
||||||
call health#report_info(buildtype)
|
call health#report_info(buildtype)
|
||||||
call health#report_warn(
|
call health#report_warn(
|
||||||
\ "Non-optimized build-type. Nvim will be slower.",
|
\ 'Non-optimized build-type. Nvim will be slower.',
|
||||||
\ ["Install a different Nvim package, or rebuild with `CMAKE_BUILD_TYPE=RelWithDebInfo`.",
|
\ ['Install a different Nvim package, or rebuild with `CMAKE_BUILD_TYPE=RelWithDebInfo`.',
|
||||||
\ s:suggest_faq])
|
\ s:suggest_faq])
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
@@ -174,7 +174,7 @@ function! s:check_terminal() abort
|
|||||||
\ .(empty(kbs_entry) ? '? (not found)' : kdch1_entry))
|
\ .(empty(kbs_entry) ? '? (not found)' : kdch1_entry))
|
||||||
endif
|
endif
|
||||||
for env_var in ['XTERM_VERSION', 'VTE_VERSION', 'TERM_PROGRAM', 'COLORTERM', 'SSH_TTY']
|
for env_var in ['XTERM_VERSION', 'VTE_VERSION', 'TERM_PROGRAM', 'COLORTERM', 'SSH_TTY']
|
||||||
if !exists('$'.env_var)
|
if exists('$'.env_var)
|
||||||
call health#report_info(printf("$%s='%s'", env_var, eval('$'.env_var)))
|
call health#report_info(printf("$%s='%s'", env_var, eval('$'.env_var)))
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
|
@@ -13,6 +13,12 @@ function! s:normalize_path(s) abort
|
|||||||
return substitute(substitute(a:s, '\', '/', 'g'), '/\./\|/\+', '/', 'g')
|
return substitute(substitute(a:s, '\', '/', 'g'), '/\./\|/\+', '/', 'g')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
" Returns TRUE if `cmd` exits with success, else FALSE.
|
||||||
|
function! s:cmd_ok(cmd) abort
|
||||||
|
call system(a:cmd)
|
||||||
|
return v:shell_error == 0
|
||||||
|
endfunction
|
||||||
|
|
||||||
" Simple version comparison.
|
" Simple version comparison.
|
||||||
function! s:version_cmp(a, b) abort
|
function! s:version_cmp(a, b) abort
|
||||||
let a = split(a:a, '\.', 0)
|
let a = split(a:a, '\.', 0)
|
||||||
@@ -45,7 +51,7 @@ function! s:shellify(cmd) abort
|
|||||||
return a:cmd
|
return a:cmd
|
||||||
endif
|
endif
|
||||||
return join(map(copy(a:cmd),
|
return join(map(copy(a:cmd),
|
||||||
\'v:val =~# ''\m[\-.a-zA-Z_/]'' ? shellescape(v:val) : v:val'), ' ')
|
\'v:val =~# ''\m[^\-.a-zA-Z_/]'' ? shellescape(v:val) : v:val'), ' ')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" Run a system command and timeout after 30 seconds.
|
" Run a system command and timeout after 30 seconds.
|
||||||
@@ -64,7 +70,8 @@ function! s:system(cmd, ...) abort
|
|||||||
let jobid = jobstart(a:cmd, opts)
|
let jobid = jobstart(a:cmd, opts)
|
||||||
|
|
||||||
if jobid < 1
|
if jobid < 1
|
||||||
call health#report_error(printf('Command error (job=%d): %s', jobid, s:shellify(a:cmd)))
|
call health#report_error(printf('Command error (job=%d): `%s` (in %s)',
|
||||||
|
\ jobid, s:shellify(a:cmd), string(getcwd())))
|
||||||
let s:shell_error = 1
|
let s:shell_error = 1
|
||||||
return opts.output
|
return opts.output
|
||||||
endif
|
endif
|
||||||
@@ -78,8 +85,8 @@ function! s:system(cmd, ...) abort
|
|||||||
call health#report_error(printf('Command timed out: %s', s:shellify(a:cmd)))
|
call health#report_error(printf('Command timed out: %s', s:shellify(a:cmd)))
|
||||||
call jobstop(jobid)
|
call jobstop(jobid)
|
||||||
elseif s:shell_error != 0 && !ignore_error
|
elseif s:shell_error != 0 && !ignore_error
|
||||||
call health#report_error(printf("Command error (job=%d): %s\nOutput: %s", jobid,
|
call health#report_error(printf("Command error (job=%d): `%s` (in %s)\nOutput: %s",
|
||||||
\ s:shellify(a:cmd), opts.output))
|
\ jobid, s:shellify(a:cmd), string(getcwd()), opts.output))
|
||||||
endif
|
endif
|
||||||
|
|
||||||
return opts.output
|
return opts.output
|
||||||
@@ -120,6 +127,13 @@ endfunction
|
|||||||
function! s:check_clipboard() abort
|
function! s:check_clipboard() abort
|
||||||
call health#report_start('Clipboard (optional)')
|
call health#report_start('Clipboard (optional)')
|
||||||
|
|
||||||
|
if !empty($TMUX) && executable('tmux') && executable('pbpaste') && !s:cmd_ok('pbpaste')
|
||||||
|
let tmux_version = matchstr(system('tmux -V'), '\d\+\.\d\+')
|
||||||
|
call health#report_error('pbcopy does not work with tmux version: '.tmux_version,
|
||||||
|
\ ['Install tmux 2.6+. https://superuser.com/q/231130',
|
||||||
|
\ 'or use tmux with reattach-to-user-namespace. https://superuser.com/a/413233'])
|
||||||
|
endif
|
||||||
|
|
||||||
let clipboard_tool = provider#clipboard#Executable()
|
let clipboard_tool = provider#clipboard#Executable()
|
||||||
if exists('g:clipboard') && empty(clipboard_tool)
|
if exists('g:clipboard') && empty(clipboard_tool)
|
||||||
call health#report_error(
|
call health#report_error(
|
||||||
@@ -172,7 +186,9 @@ function! s:version_info(python) abort
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
let nvim_path = s:trim(s:system([
|
let nvim_path = s:trim(s:system([
|
||||||
\ a:python, '-c', 'import neovim; print(neovim.__file__)']))
|
\ a:python, '-c',
|
||||||
|
\ 'import sys; sys.path.remove(""); ' .
|
||||||
|
\ 'import neovim; print(neovim.__file__)']))
|
||||||
if s:shell_error || empty(nvim_path)
|
if s:shell_error || empty(nvim_path)
|
||||||
return [python_version, 'unable to load neovim Python module', pypi_version,
|
return [python_version, 'unable to load neovim Python module', pypi_version,
|
||||||
\ nvim_path]
|
\ nvim_path]
|
||||||
@@ -247,20 +263,23 @@ function! s:check_python(version) abort
|
|||||||
let python_multiple = []
|
let python_multiple = []
|
||||||
|
|
||||||
if exists(loaded_var) && !exists('*provider#'.pyname.'#Call')
|
if exists(loaded_var) && !exists('*provider#'.pyname.'#Call')
|
||||||
call health#report_info('Disabled. '.loaded_var.'='.eval(loaded_var))
|
call health#report_info('Disabled ('.loaded_var.'='.eval(loaded_var).'). This might be due to some previous error.')
|
||||||
return
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if !empty(pyenv)
|
if !empty(pyenv)
|
||||||
if empty(pyenv_root)
|
if empty(pyenv_root)
|
||||||
call health#report_warn(
|
call health#report_info(
|
||||||
\ 'pyenv was found, but $PYENV_ROOT is not set.',
|
\ 'pyenv was found, but $PYENV_ROOT is not set. `pyenv root` will be used.'
|
||||||
\ ['Did you follow the final install instructions?',
|
\ .' If you run into problems, try setting $PYENV_ROOT explicitly.'
|
||||||
\ 'If you use a shell "framework" like Prezto or Oh My Zsh, try without.',
|
|
||||||
\ 'Try a different shell (bash).']
|
|
||||||
\ )
|
\ )
|
||||||
|
let pyenv_root = s:trim(s:system([pyenv, 'root']))
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !isdirectory(pyenv_root)
|
||||||
|
call health#report_error('Invalid pyenv root: '.pyenv_root)
|
||||||
else
|
else
|
||||||
call health#report_ok(printf('pyenv found: "%s"', pyenv))
|
call health#report_info(printf('pyenv: %s', pyenv))
|
||||||
|
call health#report_info(printf('pyenv root: %s', pyenv_root))
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -272,9 +291,6 @@ function! s:check_python(version) abort
|
|||||||
if empty(pyname)
|
if empty(pyname)
|
||||||
call health#report_warn('No Python interpreter was found with the neovim '
|
call health#report_warn('No Python interpreter was found with the neovim '
|
||||||
\ . 'module. Using the first available for diagnostics.')
|
\ . 'module. Using the first available for diagnostics.')
|
||||||
if !empty(pythonx_errs)
|
|
||||||
call health#report_warn(pythonx_errs)
|
|
||||||
endif
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if !empty(pyname)
|
if !empty(pyname)
|
||||||
@@ -332,8 +348,8 @@ function! s:check_python(version) abort
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if !empty(python_bin)
|
if !empty(python_bin) && !exists('g:'.host_prog_var)
|
||||||
if empty(venv) && !empty(pyenv) && !exists('g:'.host_prog_var)
|
if empty(venv) && !empty(pyenv)
|
||||||
\ && !empty(pyenv_root) && resolve(python_bin) !~# '^'.pyenv_root.'/'
|
\ && !empty(pyenv_root) && resolve(python_bin) !~# '^'.pyenv_root.'/'
|
||||||
call health#report_warn('pyenv is not set up optimally.', [
|
call health#report_warn('pyenv is not set up optimally.', [
|
||||||
\ printf('Create a virtualenv specifically '
|
\ printf('Create a virtualenv specifically '
|
||||||
@@ -341,7 +357,7 @@ function! s:check_python(version) abort
|
|||||||
\ . 'the need to install the Neovim Python module in each '
|
\ . 'the need to install the Neovim Python module in each '
|
||||||
\ . 'version/virtualenv.', host_prog_var)
|
\ . 'version/virtualenv.', host_prog_var)
|
||||||
\ ])
|
\ ])
|
||||||
elseif !empty(venv) && exists('g:'.host_prog_var)
|
elseif !empty(venv)
|
||||||
if !empty(pyenv_root)
|
if !empty(pyenv_root)
|
||||||
let venv_root = pyenv_root
|
let venv_root = pyenv_root
|
||||||
else
|
else
|
||||||
@@ -366,27 +382,16 @@ function! s:check_python(version) abort
|
|||||||
let python_bin = ''
|
let python_bin = ''
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" Check if $VIRTUAL_ENV is active
|
" Check if $VIRTUAL_ENV is valid.
|
||||||
let virtualenv_inactive = 0
|
|
||||||
|
|
||||||
if exists('$VIRTUAL_ENV')
|
if exists('$VIRTUAL_ENV')
|
||||||
if !empty(pyenv)
|
if !empty(pyname) && $VIRTUAL_ENV !=# matchstr(exepath(pyname), '^\V'.$VIRTUAL_ENV)
|
||||||
let pyenv_prefix = resolve(s:trim(s:system([pyenv, 'prefix'])))
|
call health#report_warn(
|
||||||
if $VIRTUAL_ENV != pyenv_prefix
|
\ '$VIRTUAL_ENV exists but appears to be inactive. '
|
||||||
let virtualenv_inactive = 1
|
\ . 'This could lead to unexpected results.',
|
||||||
endif
|
\ [ 'If you are using Zsh, see: http://vi.stackexchange.com/a/7654' ])
|
||||||
elseif !empty(pyname) && exepath(pyname) !~# '^'.$VIRTUAL_ENV.'/'
|
|
||||||
let virtualenv_inactive = 1
|
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if virtualenv_inactive
|
|
||||||
call health#report_warn(
|
|
||||||
\ '$VIRTUAL_ENV exists but appears to be inactive. '
|
|
||||||
\ . 'This could lead to unexpected results.',
|
|
||||||
\ [ 'If you are using Zsh, see: http://vi.stackexchange.com/a/7654/5229' ])
|
|
||||||
endif
|
|
||||||
|
|
||||||
" Diagnostic output
|
" Diagnostic output
|
||||||
call health#report_info('Executable: ' . (empty(python_bin) ? 'Not found' : python_bin))
|
call health#report_info('Executable: ' . (empty(python_bin) ? 'Not found' : python_bin))
|
||||||
if len(python_multiple)
|
if len(python_multiple)
|
||||||
@@ -451,10 +456,11 @@ function! s:check_ruby() abort
|
|||||||
|
|
||||||
let host = provider#ruby#Detect()
|
let host = provider#ruby#Detect()
|
||||||
if empty(host)
|
if empty(host)
|
||||||
call health#report_warn('Missing "neovim" gem.',
|
call health#report_warn('`neovim-ruby-host` not found.',
|
||||||
\ ['Run in shell: gem install neovim',
|
\ ['Run `gem install neovim` to ensure the neovim RubyGem is installed.',
|
||||||
\ 'Is the gem bin directory in $PATH? Check `gem environment`.',
|
\ 'Run `gem environment` to ensure the gem bin directory is in $PATH.',
|
||||||
\ 'If you are using rvm/rbenv/chruby, try "rehashing".'])
|
\ 'If you are using rvm/rbenv/chruby, try "rehashing".',
|
||||||
|
\ 'See :help g:ruby_host_prog for non-standard gem installations.'])
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
call health#report_info('Host: '. host)
|
call health#report_info('Host: '. host)
|
||||||
@@ -488,7 +494,7 @@ function! s:check_ruby() abort
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:check_node() abort
|
function! s:check_node() abort
|
||||||
call health#report_start('Node provider (optional)')
|
call health#report_start('Node.js provider (optional)')
|
||||||
|
|
||||||
let loaded_var = 'g:loaded_node_provider'
|
let loaded_var = 'g:loaded_node_provider'
|
||||||
if exists(loaded_var) && !exists('*provider#node#Call')
|
if exists(loaded_var) && !exists('*provider#node#Call')
|
||||||
@@ -502,7 +508,16 @@ function! s:check_node() abort
|
|||||||
\ ['Install Node.js and verify that `node` and `npm` commands work.'])
|
\ ['Install Node.js and verify that `node` and `npm` commands work.'])
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
call health#report_info('Node: '. s:system('node -v'))
|
let node_v = get(split(s:system('node -v'), "\n"), 0, '')
|
||||||
|
call health#report_info('Node.js: '. node_v)
|
||||||
|
if !s:shell_error && s:version_cmp(node_v[1:], '6.0.0') < 0
|
||||||
|
call health#report_warn('Neovim node.js host does not support '.node_v)
|
||||||
|
" Skip further checks, they are nonsense if nodejs is too old.
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
if !provider#node#can_inspect()
|
||||||
|
call health#report_warn('node.js on this system does not support --inspect-brk so $NVIM_NODE_HOST_DEBUG is ignored.')
|
||||||
|
endif
|
||||||
|
|
||||||
let host = provider#node#Detect()
|
let host = provider#node#Detect()
|
||||||
if empty(host)
|
if empty(host)
|
||||||
@@ -511,7 +526,7 @@ function! s:check_node() abort
|
|||||||
\ 'Is the npm bin directory in $PATH?'])
|
\ 'Is the npm bin directory in $PATH?'])
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
call health#report_info('Host: '. host)
|
call health#report_info('Neovim node.js host: '. host)
|
||||||
|
|
||||||
let latest_npm_cmd = has('win32') ? 'cmd /c npm info neovim --json' : 'npm info neovim --json'
|
let latest_npm_cmd = has('win32') ? 'cmd /c npm info neovim --json' : 'npm info neovim --json'
|
||||||
let latest_npm = s:system(split(latest_npm_cmd))
|
let latest_npm = s:system(split(latest_npm_cmd))
|
||||||
@@ -530,11 +545,11 @@ function! s:check_node() abort
|
|||||||
let latest_npm = get(get(pkg_data, 'dist-tags', {}), 'latest', 'unable to parse')
|
let latest_npm = get(get(pkg_data, 'dist-tags', {}), 'latest', 'unable to parse')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let current_npm_cmd = host .' --version'
|
let current_npm_cmd = ['node', host, '--version']
|
||||||
let current_npm = s:system(current_npm_cmd)
|
let current_npm = s:system(current_npm_cmd)
|
||||||
if s:shell_error
|
if s:shell_error
|
||||||
call health#report_error('Failed to run: '. current_npm_cmd,
|
call health#report_error('Failed to run: '. string(current_npm_cmd),
|
||||||
\ ['Report this issue with the output of: ', current_npm_cmd])
|
\ ['Report this issue with the output of: ', string(current_npm_cmd)])
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@@ -542,9 +557,9 @@ function! s:check_node() abort
|
|||||||
call health#report_warn(
|
call health#report_warn(
|
||||||
\ printf('Package "neovim" is out-of-date. Installed: %s, latest: %s',
|
\ printf('Package "neovim" is out-of-date. Installed: %s, latest: %s',
|
||||||
\ current_npm, latest_npm),
|
\ current_npm, latest_npm),
|
||||||
\ ['Run in shell: npm update neovim'])
|
\ ['Run in shell: npm install -g neovim'])
|
||||||
else
|
else
|
||||||
call health#report_ok('Latest "neovim" npm is installed: '. current_npm)
|
call health#report_ok('Latest "neovim" npm package is installed: '. current_npm)
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
@@ -19,7 +19,7 @@ function! s:init() abort
|
|||||||
let s:find_arg = '-l'
|
let s:find_arg = '-l'
|
||||||
endif
|
endif
|
||||||
" Check for -l support.
|
" Check for -l support.
|
||||||
call s:get_page(s:get_path('', 'man')[0:-2])
|
call s:get_page(s:get_path('', 'man'))
|
||||||
catch /E145:/
|
catch /E145:/
|
||||||
" Ignore the error in restricted mode
|
" Ignore the error in restricted mode
|
||||||
catch /command error .*/
|
catch /command error .*/
|
||||||
@@ -65,9 +65,9 @@ function! man#open_page(count, count1, mods, ...) abort
|
|||||||
try
|
try
|
||||||
set eventignore+=BufReadCmd
|
set eventignore+=BufReadCmd
|
||||||
if a:mods !~# 'tab' && s:find_man()
|
if a:mods !~# 'tab' && s:find_man()
|
||||||
execute 'silent edit' fnameescape(bufname)
|
execute 'silent keepalt edit' fnameescape(bufname)
|
||||||
else
|
else
|
||||||
execute 'silent' a:mods 'split' fnameescape(bufname)
|
execute 'silent keepalt' a:mods 'split' fnameescape(bufname)
|
||||||
endif
|
endif
|
||||||
finally
|
finally
|
||||||
set eventignore-=BufReadCmd
|
set eventignore-=BufReadCmd
|
||||||
@@ -148,7 +148,8 @@ function! s:get_page(path) abort
|
|||||||
let manwidth = empty($MANWIDTH) ? winwidth(0) : $MANWIDTH
|
let manwidth = empty($MANWIDTH) ? winwidth(0) : $MANWIDTH
|
||||||
" Force MANPAGER=cat to ensure Vim is not recursively invoked (by man-db).
|
" Force MANPAGER=cat to ensure Vim is not recursively invoked (by man-db).
|
||||||
" http://comments.gmane.org/gmane.editors.vim.devel/29085
|
" http://comments.gmane.org/gmane.editors.vim.devel/29085
|
||||||
let cmd = ['env', 'MANPAGER=cat', 'MANWIDTH='.manwidth, 'man']
|
" Set MAN_KEEP_FORMATTING so Debian man doesn't discard backspaces.
|
||||||
|
let cmd = ['env', 'MANPAGER=cat', 'MANWIDTH='.manwidth, 'MAN_KEEP_FORMATTING=1', 'man']
|
||||||
return s:system(cmd + (s:localfile_arg ? ['-l', a:path] : [a:path]))
|
return s:system(cmd + (s:localfile_arg ? ['-l', a:path] : [a:path]))
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
@@ -157,11 +158,10 @@ function! s:put_page(page) abort
|
|||||||
setlocal noreadonly
|
setlocal noreadonly
|
||||||
silent keepjumps %delete _
|
silent keepjumps %delete _
|
||||||
silent put =a:page
|
silent put =a:page
|
||||||
" Remove all backspaced/escape characters.
|
|
||||||
execute 'silent keeppatterns keepjumps %substitute,.\b\|\e\[\d\+m,,e'.(&gdefault?'':'g')
|
|
||||||
while getline(1) =~# '^\s*$'
|
while getline(1) =~# '^\s*$'
|
||||||
silent keepjumps 1delete _
|
silent keepjumps 1delete _
|
||||||
endwhile
|
endwhile
|
||||||
|
lua require("man").highlight_man_page()
|
||||||
setlocal filetype=man
|
setlocal filetype=man
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
@@ -213,14 +213,16 @@ endfunction
|
|||||||
|
|
||||||
function! s:get_path(sect, name) abort
|
function! s:get_path(sect, name) abort
|
||||||
if empty(a:sect)
|
if empty(a:sect)
|
||||||
return s:system(['man', s:find_arg, a:name])
|
" Some man implementations (OpenBSD) return all available paths from the
|
||||||
|
" search command, so we get() the first one. #8341
|
||||||
|
return substitute(get(split(s:system(['man', s:find_arg, a:name])), 0, ''), '\n\+$', '', '')
|
||||||
endif
|
endif
|
||||||
" '-s' flag handles:
|
" '-s' flag handles:
|
||||||
" - tokens like 'printf(echo)'
|
" - tokens like 'printf(echo)'
|
||||||
" - sections starting with '-'
|
" - sections starting with '-'
|
||||||
" - 3pcap section (found on macOS)
|
" - 3pcap section (found on macOS)
|
||||||
" - commas between sections (for section priority)
|
" - commas between sections (for section priority)
|
||||||
return s:system(['man', s:find_arg, s:section_arg, a:sect, a:name])
|
return substitute(s:system(['man', s:find_arg, s:section_arg, a:sect, a:name]), '\n\+$', '', '')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:verify_exists(sect, name) abort
|
function! s:verify_exists(sect, name) abort
|
||||||
@@ -233,13 +235,10 @@ function! s:verify_exists(sect, name) abort
|
|||||||
let path = s:get_path('', a:name)
|
let path = s:get_path('', a:name)
|
||||||
endtry
|
endtry
|
||||||
endtry
|
endtry
|
||||||
" We need to extract the section from the path because sometimes
|
" Extract the section from the path, because sometimes the actual section is
|
||||||
" the actual section of the manpage is more specific than the section
|
" more specific than what we provided to `man` (try `:Man 3 App::CLI`).
|
||||||
" we provided to `man`. Try ':Man 3 App::CLI'.
|
" Also on linux, name seems to be case-insensitive. So for `:Man PRIntf`, we
|
||||||
" Also on linux, it seems that the name is case insensitive. So if one does
|
" still want the name of the buffer to be 'printf'.
|
||||||
" ':Man PRIntf', we still want the name of the buffer to be 'printf' or
|
|
||||||
" whatever the correct capitilization is.
|
|
||||||
let path = path[:len(path)-2]
|
|
||||||
return s:extract_sect_and_name_path(path) + [path]
|
return s:extract_sect_and_name_path(path) + [path]
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
@@ -299,6 +298,12 @@ endfunction
|
|||||||
" see man#extract_sect_and_name_ref on why tolower(sect)
|
" see man#extract_sect_and_name_ref on why tolower(sect)
|
||||||
function! man#complete(arg_lead, cmd_line, cursor_pos) abort
|
function! man#complete(arg_lead, cmd_line, cursor_pos) abort
|
||||||
let args = split(a:cmd_line)
|
let args = split(a:cmd_line)
|
||||||
|
let cmd_offset = index(args, 'Man')
|
||||||
|
if cmd_offset > 0
|
||||||
|
" Prune all arguments up to :Man itself. Otherwise modifier commands like
|
||||||
|
" :tab, :vertical, etc. would lead to a wrong length.
|
||||||
|
let args = args[cmd_offset:]
|
||||||
|
endif
|
||||||
let l = len(args)
|
let l = len(args)
|
||||||
if l > 3
|
if l > 3
|
||||||
return
|
return
|
||||||
@@ -370,13 +375,12 @@ function! s:format_candidate(path, psect) abort
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! man#init_pager() abort
|
function! man#init_pager() abort
|
||||||
" Remove all backspaced/escape characters.
|
|
||||||
execute 'silent keeppatterns keepjumps %substitute,.\b\|\e\[\d\+m,,e'.(&gdefault?'':'g')
|
|
||||||
if getline(1) =~# '^\s*$'
|
if getline(1) =~# '^\s*$'
|
||||||
silent keepjumps 1delete _
|
silent keepjumps 1delete _
|
||||||
else
|
else
|
||||||
keepjumps 1
|
keepjumps 1
|
||||||
endif
|
endif
|
||||||
|
lua require("man").highlight_man_page()
|
||||||
" This is not perfect. See `man glDrawArraysInstanced`. Since the title is
|
" This is not perfect. See `man glDrawArraysInstanced`. Since the title is
|
||||||
" all caps it is impossible to tell what the original capitilization was.
|
" all caps it is impossible to tell what the original capitilization was.
|
||||||
let ref = substitute(matchstr(getline(1), '^[^)]\+)'), ' ', '_', 'g')
|
let ref = substitute(matchstr(getline(1), '^[^)]\+)'), ' ', '_', 'g')
|
||||||
|
@@ -40,9 +40,10 @@ function s:msgpack_init_python() abort
|
|||||||
return s:msgpack_python_type
|
return s:msgpack_python_type
|
||||||
endif
|
endif
|
||||||
let s:msgpack_python_initialized = 1
|
let s:msgpack_python_initialized = 1
|
||||||
for suf in ['', '3']
|
for suf in (has('win32') ? ['3'] : ['', '3'])
|
||||||
try
|
try
|
||||||
execute 'python' . suf
|
execute 'python' . suf
|
||||||
|
\. "\n"
|
||||||
\. "def shada_dict_strftime():\n"
|
\. "def shada_dict_strftime():\n"
|
||||||
\. " import datetime\n"
|
\. " import datetime\n"
|
||||||
\. " import vim\n"
|
\. " import vim\n"
|
||||||
@@ -60,12 +61,15 @@ function s:msgpack_init_python() abort
|
|||||||
\. " fmt = vim.eval('a:format')\n"
|
\. " fmt = vim.eval('a:format')\n"
|
||||||
\. " timestr = vim.eval('a:string')\n"
|
\. " timestr = vim.eval('a:string')\n"
|
||||||
\. " timestamp = datetime.datetime.strptime(timestr, fmt)\n"
|
\. " timestamp = datetime.datetime.strptime(timestr, fmt)\n"
|
||||||
\. " timestamp = int(timestamp.timestamp())\n"
|
\. " try:\n"
|
||||||
|
\. " timestamp = int(timestamp.timestamp())\n"
|
||||||
|
\. " except:\n"
|
||||||
|
\. " timestamp = int(timestamp.strftime('%s'))\n"
|
||||||
\. " if timestamp > 2 ** 31:\n"
|
\. " if timestamp > 2 ** 31:\n"
|
||||||
\. " tsabs = abs(timestamp)"
|
\. " tsabs = abs(timestamp)\n"
|
||||||
\. " return ('{\"_TYPE\": v:msgpack_types.integer,'\n"
|
\. " return ('{\"_TYPE\": v:msgpack_types.integer,'\n"
|
||||||
\. " + '\"_VAL\": [{sign},{v1},{v2},{v3}]}').format(\n"
|
\. " + '\"_VAL\": [{sign},{v1},{v2},{v3}]}').format(\n"
|
||||||
\. " sign=1 if timestamp >= 0 else -1,\n"
|
\. " sign=(1 if timestamp >= 0 else -1),\n"
|
||||||
\. " v1=((tsabs >> 62) & 0x3),\n"
|
\. " v1=((tsabs >> 62) & 0x3),\n"
|
||||||
\. " v2=((tsabs >> 31) & (2 ** 31 - 1)),\n"
|
\. " v2=((tsabs >> 31) & (2 ** 31 - 1)),\n"
|
||||||
\. " v3=(tsabs & (2 ** 31 - 1)))\n"
|
\. " v3=(tsabs & (2 ** 31 - 1)))\n"
|
||||||
|
@@ -1,20 +1,21 @@
|
|||||||
" Common functionality for providers
|
" Common functions for providers
|
||||||
|
|
||||||
let s:stderr = {}
|
" Start the provider and perform a 'poll' request
|
||||||
|
"
|
||||||
function! provider#stderr_collector(chan_id, data, event)
|
" Returns a valid channel on success
|
||||||
let stderr = get(s:stderr, a:chan_id, [''])
|
function! provider#Poll(argv, orig_name, log_env) abort
|
||||||
let stderr[-1] .= a:data[0]
|
let job = {'rpc': v:true, 'stderr_buffered': v:true}
|
||||||
call extend(stderr, a:data[1:])
|
try
|
||||||
let s:stderr[a:chan_id] = stderr
|
let channel_id = jobstart(a:argv, job)
|
||||||
endfunction
|
if channel_id > 0 && rpcrequest(channel_id, 'poll') ==# 'ok'
|
||||||
|
return channel_id
|
||||||
function! provider#clear_stderr(chan_id)
|
endif
|
||||||
if has_key(s:stderr, a:chan_id)
|
catch
|
||||||
call remove(s:stderr, a:chan_id)
|
echomsg v:throwpoint
|
||||||
endif
|
echomsg v:exception
|
||||||
endfunction
|
for row in get(job, 'stderr', [])
|
||||||
|
echomsg row
|
||||||
function! provider#get_stderr(chan_id)
|
endfor
|
||||||
return get(s:stderr, a:chan_id, [])
|
endtry
|
||||||
|
throw remote#host#LoadErrorForHost(a:orig_name, a:log_env)
|
||||||
endfunction
|
endfunction
|
||||||
|
@@ -7,7 +7,7 @@ let s:clipboard = {}
|
|||||||
|
|
||||||
" When caching is enabled, store the jobid of the xclip/xsel process keeping
|
" When caching is enabled, store the jobid of the xclip/xsel process keeping
|
||||||
" ownership of the selection, so we know how long the cache is valid.
|
" ownership of the selection, so we know how long the cache is valid.
|
||||||
let s:selection = { 'owner': 0, 'data': [], 'on_stderr': function('provider#stderr_collector') }
|
let s:selection = { 'owner': 0, 'data': [], 'stderr_buffered': v:true }
|
||||||
|
|
||||||
function! s:selection.on_exit(jobid, data, event) abort
|
function! s:selection.on_exit(jobid, data, event) abort
|
||||||
" At this point this nvim instance might already have launched
|
" At this point this nvim instance might already have launched
|
||||||
@@ -16,19 +16,17 @@ function! s:selection.on_exit(jobid, data, event) abort
|
|||||||
let self.owner = 0
|
let self.owner = 0
|
||||||
endif
|
endif
|
||||||
if a:data != 0
|
if a:data != 0
|
||||||
let stderr = provider#get_stderr(a:jobid)
|
|
||||||
echohl WarningMsg
|
echohl WarningMsg
|
||||||
echomsg 'clipboard: error invoking '.get(self.argv, 0, '?').': '.join(stderr)
|
echomsg 'clipboard: error invoking '.get(self.argv, 0, '?').': '.join(self.stderr)
|
||||||
echohl None
|
echohl None
|
||||||
endif
|
endif
|
||||||
call provider#clear_stderr(a:jobid)
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
let s:selections = { '*': s:selection, '+': copy(s:selection) }
|
let s:selections = { '*': s:selection, '+': copy(s:selection) }
|
||||||
|
|
||||||
function! s:try_cmd(cmd, ...) abort
|
function! s:try_cmd(cmd, ...) abort
|
||||||
let argv = split(a:cmd, " ")
|
let argv = split(a:cmd, " ")
|
||||||
let out = a:0 ? systemlist(argv, a:1, 1) : systemlist(argv, [''], 1)
|
let out = systemlist(argv, (a:0 ? a:1 : ['']), 1)
|
||||||
if v:shell_error
|
if v:shell_error
|
||||||
if !exists('s:did_error_try_cmd')
|
if !exists('s:did_error_try_cmd')
|
||||||
echohl WarningMsg
|
echohl WarningMsg
|
||||||
@@ -66,7 +64,7 @@ function! provider#clipboard#Executable() abort
|
|||||||
let s:paste = get(g:clipboard, 'paste', { '+': v:null, '*': v:null })
|
let s:paste = get(g:clipboard, 'paste', { '+': v:null, '*': v:null })
|
||||||
let s:cache_enabled = get(g:clipboard, 'cache_enabled', 0)
|
let s:cache_enabled = get(g:clipboard, 'cache_enabled', 0)
|
||||||
return get(g:clipboard, 'name', 'g:clipboard')
|
return get(g:clipboard, 'name', 'g:clipboard')
|
||||||
elseif has('mac') && executable('pbcopy')
|
elseif has('mac') && executable('pbpaste') && s:cmd_ok('pbpaste')
|
||||||
let s:copy['+'] = 'pbcopy'
|
let s:copy['+'] = 'pbcopy'
|
||||||
let s:paste['+'] = 'pbpaste'
|
let s:paste['+'] = 'pbpaste'
|
||||||
let s:copy['*'] = s:copy['+']
|
let s:copy['*'] = s:copy['+']
|
||||||
@@ -142,12 +140,13 @@ function! s:clipboard.set(lines, regtype, reg) abort
|
|||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
|
|
||||||
let selection = s:selections[a:reg]
|
if s:selections[a:reg].owner > 0
|
||||||
if selection.owner > 0
|
|
||||||
" The previous provider instance should exit when the new one takes
|
" The previous provider instance should exit when the new one takes
|
||||||
" ownership, but kill it to be sure we don't fill up the job table.
|
" ownership, but kill it to be sure we don't fill up the job table.
|
||||||
call jobstop(selection.owner)
|
call jobstop(s:selections[a:reg].owner)
|
||||||
end
|
end
|
||||||
|
let s:selections[a:reg] = copy(s:selection)
|
||||||
|
let selection = s:selections[a:reg]
|
||||||
let selection.data = [a:lines, a:regtype]
|
let selection.data = [a:lines, a:regtype]
|
||||||
let argv = split(s:copy[a:reg], " ")
|
let argv = split(s:copy[a:reg], " ")
|
||||||
let selection.argv = argv
|
let selection.argv = argv
|
||||||
|
@@ -3,13 +3,59 @@ if exists('g:loaded_node_provider')
|
|||||||
endif
|
endif
|
||||||
let g:loaded_node_provider = 1
|
let g:loaded_node_provider = 1
|
||||||
|
|
||||||
let s:job_opts = {'rpc': v:true, 'on_stderr': function('provider#stderr_collector')}
|
function! s:is_minimum_version(version, min_major, min_minor) abort
|
||||||
|
if empty(a:version)
|
||||||
function! provider#node#Detect() abort
|
let nodejs_version = get(split(system(['node', '-v']), "\n"), 0, '')
|
||||||
return has('win32') ? exepath('neovim-node-host.cmd') : exepath('neovim-node-host')
|
if v:shell_error || nodejs_version[0] !=# 'v'
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
else
|
||||||
|
let nodejs_version = a:version
|
||||||
|
endif
|
||||||
|
" Remove surrounding junk. Example: 'v4.12.0' => '4.12.0'
|
||||||
|
let nodejs_version = matchstr(nodejs_version, '\(\d\.\?\)\+')
|
||||||
|
" [major, minor, patch]
|
||||||
|
let v_list = split(nodejs_version, '\.')
|
||||||
|
return len(v_list) == 3
|
||||||
|
\ && ((str2nr(v_list[0]) > str2nr(a:min_major))
|
||||||
|
\ || (str2nr(v_list[0]) == str2nr(a:min_major)
|
||||||
|
\ && str2nr(v_list[1]) >= str2nr(a:min_minor)))
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! provider#node#Prog()
|
" Support for --inspect-brk requires node 6.12+ or 7.6+ or 8+
|
||||||
|
" Return 1 if it is supported
|
||||||
|
" Return 0 otherwise
|
||||||
|
function! provider#node#can_inspect() abort
|
||||||
|
if !executable('node')
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
let ver = get(split(system(['node', '-v']), "\n"), 0, '')
|
||||||
|
if v:shell_error || ver[0] !=# 'v'
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
return (ver[1] ==# '6' && s:is_minimum_version(ver, 6, 12))
|
||||||
|
\ || s:is_minimum_version(ver, 7, 6)
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! provider#node#Detect() abort
|
||||||
|
if exists('g:node_host_prog')
|
||||||
|
return g:node_host_prog
|
||||||
|
endif
|
||||||
|
let global_modules = get(split(system('npm root -g'), "\n"), 0, '')
|
||||||
|
if v:shell_error || !isdirectory(global_modules)
|
||||||
|
return ''
|
||||||
|
endif
|
||||||
|
if !s:is_minimum_version(v:null, 6, 0)
|
||||||
|
return ''
|
||||||
|
endif
|
||||||
|
let entry_point = glob(global_modules . '/neovim/bin/cli.js')
|
||||||
|
if !filereadable(entry_point)
|
||||||
|
return ''
|
||||||
|
endif
|
||||||
|
return entry_point
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function! provider#node#Prog() abort
|
||||||
return s:prog
|
return s:prog
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
@@ -19,37 +65,18 @@ function! provider#node#Require(host) abort
|
|||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if has('win32')
|
let args = ['node']
|
||||||
let args = provider#node#Prog()
|
|
||||||
else
|
|
||||||
let args = ['node']
|
|
||||||
|
|
||||||
if !empty($NVIM_NODE_HOST_DEBUG)
|
if !empty($NVIM_NODE_HOST_DEBUG) && provider#node#can_inspect()
|
||||||
call add(args, '--inspect-brk')
|
call add(args, '--inspect-brk')
|
||||||
endif
|
|
||||||
|
|
||||||
call add(args , provider#node#Prog())
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
try
|
call add(args, provider#node#Prog())
|
||||||
let channel_id = jobstart(args, s:job_opts)
|
|
||||||
if rpcrequest(channel_id, 'poll') ==# 'ok'
|
return provider#Poll(args, a:host.orig_name, '$NVIM_NODE_LOG_FILE')
|
||||||
return channel_id
|
|
||||||
endif
|
|
||||||
catch
|
|
||||||
echomsg v:throwpoint
|
|
||||||
echomsg v:exception
|
|
||||||
for row in provider#get_stderr(channel_id)
|
|
||||||
echomsg row
|
|
||||||
endfor
|
|
||||||
endtry
|
|
||||||
finally
|
|
||||||
call provider#clear_stderr(channel_id)
|
|
||||||
endtry
|
|
||||||
throw remote#host#LoadErrorForHost(a:host.orig_name, '$NVIM_NODE_LOG_FILE')
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! provider#node#Call(method, args)
|
function! provider#node#Call(method, args) abort
|
||||||
if s:err != ''
|
if s:err != ''
|
||||||
echoerr s:err
|
echoerr s:err
|
||||||
return
|
return
|
||||||
@@ -74,7 +101,7 @@ let s:err = ''
|
|||||||
let s:prog = provider#node#Detect()
|
let s:prog = provider#node#Detect()
|
||||||
|
|
||||||
if empty(s:prog)
|
if empty(s:prog)
|
||||||
let s:err = 'Cannot find the "neovim" node package. Try :CheckHealth'
|
let s:err = 'Cannot find the "neovim" node package. Try :checkhealth'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
call remote#host#RegisterPlugin('node-provider', 'node', [])
|
call remote#host#RegisterPlugin('node-provider', 'node', [])
|
||||||
|
@@ -11,11 +11,11 @@ let g:loaded_python_provider = 1
|
|||||||
|
|
||||||
let [s:prog, s:err] = provider#pythonx#Detect(2)
|
let [s:prog, s:err] = provider#pythonx#Detect(2)
|
||||||
|
|
||||||
function! provider#python#Prog()
|
function! provider#python#Prog() abort
|
||||||
return s:prog
|
return s:prog
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! provider#python#Error()
|
function! provider#python#Error() abort
|
||||||
return s:err
|
return s:err
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
@@ -29,7 +29,7 @@ endif
|
|||||||
call remote#host#RegisterClone('legacy-python-provider', 'python')
|
call remote#host#RegisterClone('legacy-python-provider', 'python')
|
||||||
call remote#host#RegisterPlugin('legacy-python-provider', 'script_host.py', [])
|
call remote#host#RegisterPlugin('legacy-python-provider', 'script_host.py', [])
|
||||||
|
|
||||||
function! provider#python#Call(method, args)
|
function! provider#python#Call(method, args) abort
|
||||||
if s:err != ''
|
if s:err != ''
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
@@ -11,11 +11,11 @@ let g:loaded_python3_provider = 1
|
|||||||
|
|
||||||
let [s:prog, s:err] = provider#pythonx#Detect(3)
|
let [s:prog, s:err] = provider#pythonx#Detect(3)
|
||||||
|
|
||||||
function! provider#python3#Prog()
|
function! provider#python3#Prog() abort
|
||||||
return s:prog
|
return s:prog
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! provider#python3#Error()
|
function! provider#python3#Error() abort
|
||||||
return s:err
|
return s:err
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
@@ -29,7 +29,7 @@ endif
|
|||||||
call remote#host#RegisterClone('legacy-python3-provider', 'python3')
|
call remote#host#RegisterClone('legacy-python3-provider', 'python3')
|
||||||
call remote#host#RegisterPlugin('legacy-python3-provider', 'script_host.py', [])
|
call remote#host#RegisterPlugin('legacy-python3-provider', 'script_host.py', [])
|
||||||
|
|
||||||
function! provider#python3#Call(method, args)
|
function! provider#python3#Call(method, args) abort
|
||||||
if s:err != ''
|
if s:err != ''
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
@@ -5,8 +5,6 @@ endif
|
|||||||
|
|
||||||
let s:loaded_pythonx_provider = 1
|
let s:loaded_pythonx_provider = 1
|
||||||
|
|
||||||
let s:job_opts = {'rpc': v:true, 'on_stderr': function('provider#stderr_collector')}
|
|
||||||
|
|
||||||
function! provider#pythonx#Require(host) abort
|
function! provider#pythonx#Require(host) abort
|
||||||
let ver = (a:host.orig_name ==# 'python') ? 2 : 3
|
let ver = (a:host.orig_name ==# 'python') ? 2 : 3
|
||||||
|
|
||||||
@@ -20,22 +18,7 @@ function! provider#pythonx#Require(host) abort
|
|||||||
call add(args, plugin.path)
|
call add(args, plugin.path)
|
||||||
endfor
|
endfor
|
||||||
|
|
||||||
try
|
return provider#Poll(args, a:host.orig_name, '$NVIM_PYTHON_LOG_FILE')
|
||||||
let channel_id = jobstart(args, s:job_opts)
|
|
||||||
if rpcrequest(channel_id, 'poll') ==# 'ok'
|
|
||||||
return channel_id
|
|
||||||
endif
|
|
||||||
catch
|
|
||||||
echomsg v:throwpoint
|
|
||||||
echomsg v:exception
|
|
||||||
for row in provider#get_stderr(channel_id)
|
|
||||||
echomsg row
|
|
||||||
endfor
|
|
||||||
finally
|
|
||||||
call provider#clear_stderr(channel_id)
|
|
||||||
endtry
|
|
||||||
throw remote#host#LoadErrorForHost(a:host.orig_name,
|
|
||||||
\ '$NVIM_PYTHON_LOG_FILE')
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! provider#pythonx#Detect(major_ver) abort
|
function! provider#pythonx#Detect(major_ver) abort
|
||||||
|
@@ -4,26 +4,15 @@ if exists('g:loaded_ruby_provider')
|
|||||||
endif
|
endif
|
||||||
let g:loaded_ruby_provider = 1
|
let g:loaded_ruby_provider = 1
|
||||||
|
|
||||||
let s:stderr = {}
|
|
||||||
let s:job_opts = {'rpc': v:true}
|
|
||||||
|
|
||||||
function! s:job_opts.on_stderr(chan_id, data, event)
|
|
||||||
let stderr = get(s:stderr, a:chan_id, [''])
|
|
||||||
let last = remove(stderr, -1)
|
|
||||||
let a:data[0] = last.a:data[0]
|
|
||||||
call extend(stderr, a:data)
|
|
||||||
let s:stderr[a:chan_id] = stderr
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
function! provider#ruby#Detect() abort
|
function! provider#ruby#Detect() abort
|
||||||
if exists("g:ruby_host_prog")
|
if exists("g:ruby_host_prog")
|
||||||
return g:ruby_host_prog
|
return g:ruby_host_prog
|
||||||
else
|
else
|
||||||
return has('win32') ? exepath('neovim-ruby-host.cmd') : exepath('neovim-ruby-host')
|
return has('win32') ? exepath('neovim-ruby-host.bat') : exepath('neovim-ruby-host')
|
||||||
end
|
end
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! provider#ruby#Prog()
|
function! provider#ruby#Prog() abort
|
||||||
return s:prog
|
return s:prog
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
@@ -35,22 +24,10 @@ function! provider#ruby#Require(host) abort
|
|||||||
let prog .= " " . shellescape(plugin.path)
|
let prog .= " " . shellescape(plugin.path)
|
||||||
endfor
|
endfor
|
||||||
|
|
||||||
try
|
return provider#Poll(prog, a:host.orig_name, '$NVIM_RUBY_LOG_FILE')
|
||||||
let channel_id = jobstart(prog, s:job_opts)
|
|
||||||
if rpcrequest(channel_id, 'poll') ==# 'ok'
|
|
||||||
return channel_id
|
|
||||||
endif
|
|
||||||
catch
|
|
||||||
echomsg v:throwpoint
|
|
||||||
echomsg v:exception
|
|
||||||
for row in get(s:stderr, channel_id, [])
|
|
||||||
echomsg row
|
|
||||||
endfor
|
|
||||||
endtry
|
|
||||||
throw remote#host#LoadErrorForHost(a:host.orig_name, '$NVIM_RUBY_LOG_FILE')
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! provider#ruby#Call(method, args)
|
function! provider#ruby#Call(method, args) abort
|
||||||
if s:err != ''
|
if s:err != ''
|
||||||
echoerr s:err
|
echoerr s:err
|
||||||
return
|
return
|
||||||
|
@@ -2,9 +2,6 @@
|
|||||||
|
|
||||||
" Setup: {{{1
|
" Setup: {{{1
|
||||||
function! tutor#SetupVim()
|
function! tutor#SetupVim()
|
||||||
if &columns < 90
|
|
||||||
set columns=90
|
|
||||||
endif
|
|
||||||
if !exists('g:did_load_ftplugin') || g:did_load_ftplugin != 1
|
if !exists('g:did_load_ftplugin') || g:did_load_ftplugin != 1
|
||||||
filetype plugin on
|
filetype plugin on
|
||||||
endif
|
endif
|
||||||
|
@@ -16,26 +16,23 @@ Applications can also embed libnvim to work with the C API directly.
|
|||||||
==============================================================================
|
==============================================================================
|
||||||
API Types *api-types*
|
API Types *api-types*
|
||||||
|
|
||||||
Nvim's C API uses custom types for all functions. Some are just typedefs
|
The Nvim C API defines custom types for all function parameters. Some are just
|
||||||
around C99 standard types, and some are Nvim-defined data structures.
|
typedefs around C99 standard types, others are Nvim-defined data structures.
|
||||||
|
|
||||||
Boolean -> bool
|
Boolean -> bool
|
||||||
Integer (signed 64-bit integer) -> int64_t
|
Integer (signed 64-bit integer) -> int64_t
|
||||||
Float (IEEE 754 double precision) -> double
|
Float (IEEE 754 double precision) -> double
|
||||||
String -> {char* data, size_t size} struct
|
String -> {char* data, size_t size} struct
|
||||||
|
Array
|
||||||
Additionally, the following data structures are defined:
|
Dictionary
|
||||||
|
Object
|
||||||
Array
|
|
||||||
Dictionary
|
|
||||||
Object
|
|
||||||
|
|
||||||
The following handle types are defined as integer typedefs, but are
|
The following handle types are defined as integer typedefs, but are
|
||||||
discriminated as separate types in an Object:
|
discriminated as separate types in an Object:
|
||||||
|
|
||||||
Buffer -> enum value kObjectTypeBuffer
|
Buffer -> enum value kObjectTypeBuffer
|
||||||
Window -> enum value kObjectTypeWindow
|
Window -> enum value kObjectTypeWindow
|
||||||
Tabpage -> enum value kObjectTypeTabpage
|
Tabpage -> enum value kObjectTypeTabpage
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
API metadata *api-metadata*
|
API metadata *api-metadata*
|
||||||
@@ -49,6 +46,7 @@ version.api_prerelease Declares the current API level as unstable >
|
|||||||
(version.api_prerelease && fn.since == version.api_level)
|
(version.api_prerelease && fn.since == version.api_level)
|
||||||
functions API function signatures
|
functions API function signatures
|
||||||
ui_events UI event signatures |ui|
|
ui_events UI event signatures |ui|
|
||||||
|
ui_options Supported |ui-options|
|
||||||
{fn}.since API level where function {fn} was introduced
|
{fn}.since API level where function {fn} was introduced
|
||||||
{fn}.deprecated_since API level where function {fn} was deprecated
|
{fn}.deprecated_since API level where function {fn} was deprecated
|
||||||
types Custom handle types defined by Nvim
|
types Custom handle types defined by Nvim
|
||||||
@@ -59,11 +57,14 @@ External programs ("clients") can use the metadata to discover the |rpc-api|.
|
|||||||
==============================================================================
|
==============================================================================
|
||||||
API contract *api-contract*
|
API contract *api-contract*
|
||||||
|
|
||||||
The API is made of functions and events. Clients call functions like those
|
The Nvim API is composed of functions and events.
|
||||||
described at |api-global|, and may "attach" in order to receive rich events,
|
|
||||||
described at |rpc-remote-ui|.
|
|
||||||
|
|
||||||
As Nvim develops, its API may change only according the following "contract":
|
- Clients call functions like those described at |api-global|.
|
||||||
|
- Clients can subscribe to |ui-events|, |api-buffer-updates|, etc.
|
||||||
|
- API function names are prefixed with "nvim_".
|
||||||
|
- API event names are prefixed with "nvim_" and suffixed with "_event".
|
||||||
|
|
||||||
|
As Nvim evolves the API may change in compliance with this CONTRACT:
|
||||||
|
|
||||||
- New functions and events may be added.
|
- New functions and events may be added.
|
||||||
- Any such extensions are OPTIONAL: old clients may ignore them.
|
- Any such extensions are OPTIONAL: old clients may ignore them.
|
||||||
@@ -78,6 +79,101 @@ As Nvim develops, its API may change only according the following "contract":
|
|||||||
- Existing items will not be removed (after release).
|
- Existing items will not be removed (after release).
|
||||||
- Deprecated functions will not be removed until Nvim version 2.0
|
- Deprecated functions will not be removed until Nvim version 2.0
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
Buffer update events *api-buffer-updates*
|
||||||
|
|
||||||
|
API clients can "attach" to Nvim buffers to subscribe to buffer update events.
|
||||||
|
This is similar to |TextChanged| but more powerful and granular.
|
||||||
|
|
||||||
|
Call |nvim_buf_attach| to receive these events on the channel:
|
||||||
|
|
||||||
|
*nvim_buf_lines_event*
|
||||||
|
nvim_buf_lines_event[{buf}, {changedtick}, {firstline}, {lastline}, {linedata}, {more}]
|
||||||
|
|
||||||
|
When the buffer text between {firstline} and {lastline} (end-exclusive,
|
||||||
|
zero-indexed) were changed to the new text in the {linedata} list. The
|
||||||
|
granularity is a line, i.e. if a single character is changed in the editor,
|
||||||
|
the entire line is sent.
|
||||||
|
|
||||||
|
When {changedtick} is |v:null| this means the screen lines (display) changed
|
||||||
|
but not the buffer contents. {linedata} contains the changed screen lines.
|
||||||
|
This happens when |inccommand| shows a buffer preview.
|
||||||
|
|
||||||
|
Properties:~
|
||||||
|
{buf} API buffer handle (buffer number)
|
||||||
|
|
||||||
|
{changedtick} value of |b:changedtick| for the buffer. If you send an API
|
||||||
|
command back to nvim you can check the value of |b:changedtick| as part of
|
||||||
|
your request to ensure that no other changes have been made.
|
||||||
|
|
||||||
|
{firstline} integer line number of the first line that was replaced.
|
||||||
|
Zero-indexed: if line 1 was replaced then {firstline} will be 0, not 1.
|
||||||
|
{firstline} is always less than or equal to the number of lines that were
|
||||||
|
in the buffer before the lines were replaced.
|
||||||
|
|
||||||
|
{lastline} integer line number of the first line that was not replaced
|
||||||
|
(i.e. the range {firstline}, {lastline} is end-exclusive).
|
||||||
|
Zero-indexed: if line numbers 2 to 5 were replaced, this will be 5 instead
|
||||||
|
of 6. {lastline} is always be less than or equal to the number of lines
|
||||||
|
that were in the buffer before the lines were replaced. {lastline} will be
|
||||||
|
-1 if the event is part of the initial update after attaching.
|
||||||
|
|
||||||
|
{linedata} list of strings containing the contents of the new buffer
|
||||||
|
lines. Newline characters are omitted; empty lines are sent as empty
|
||||||
|
strings.
|
||||||
|
|
||||||
|
{more} boolean, true for a "multipart" change notification: the current
|
||||||
|
change was chunked into multiple |nvim_buf_lines_event| notifications
|
||||||
|
(e.g. because it was too big).
|
||||||
|
|
||||||
|
nvim_buf_changedtick_event[{buf}, {changedtick}] *nvim_buf_changedtick_event*
|
||||||
|
|
||||||
|
When |b:changedtick| was incremented but no text was changed. Relevant for
|
||||||
|
undo/redo.
|
||||||
|
|
||||||
|
Properties:~
|
||||||
|
{buf} API buffer handle (buffer number)
|
||||||
|
{changedtick} new value of |b:changedtick| for the buffer
|
||||||
|
|
||||||
|
nvim_buf_detach_event[{buf}] *nvim_buf_detach_event*
|
||||||
|
|
||||||
|
When buffer is detached (i.e. updates are disabled). Triggered explicitly by
|
||||||
|
|nvim_buf_detach| or implicitly in these cases:
|
||||||
|
- Buffer was |abandon|ed and 'hidden' is not set.
|
||||||
|
- Buffer was reloaded, e.g. with |:edit| or an external change triggered
|
||||||
|
|:checktime| or 'autoread'.
|
||||||
|
- Generally: whenever the buffer contents are unloaded from memory.
|
||||||
|
|
||||||
|
Properties:~
|
||||||
|
{buf} API buffer handle (buffer number)
|
||||||
|
|
||||||
|
|
||||||
|
EXAMPLE ~
|
||||||
|
|
||||||
|
Calling |nvim_buf_attach| with send_buffer=true on an empty buffer, emits: >
|
||||||
|
nvim_buf_lines_event[{buf}, {changedtick}, 0, 0, [""], v:false]
|
||||||
|
|
||||||
|
User adds two lines to the buffer, emits: >
|
||||||
|
nvim_buf_lines_event[{buf}, {changedtick}, 0, 0, ["line1", "line2"], v:false]
|
||||||
|
|
||||||
|
User moves to a line containing the text "Hello world" and inserts "!", emits: >
|
||||||
|
nvim_buf_lines_event[{buf}, {changedtick}, {linenr}, {linenr} + 1,
|
||||||
|
["Hello world!"], v:false]
|
||||||
|
|
||||||
|
User moves to line 3 and deletes 20 lines using "20dd", emits: >
|
||||||
|
nvim_buf_lines_event[{buf}, {changedtick}, 2, 22, [], v:false]
|
||||||
|
|
||||||
|
User selects lines 3-5 using |linewise-visual| mode and then types "p" to
|
||||||
|
paste a block of 6 lines, emits: >
|
||||||
|
nvim_buf_lines_event[{buf}, {changedtick}, 2, 5,
|
||||||
|
['pasted line 1', 'pasted line 2', 'pasted line 3', 'pasted line 4',
|
||||||
|
'pasted line 5', 'pasted line 6'],
|
||||||
|
v:false
|
||||||
|
]
|
||||||
|
|
||||||
|
User reloads the buffer with ":edit", emits: >
|
||||||
|
nvim_buf_detach_event[{buf}]
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
Buffer highlighting *api-highlights*
|
Buffer highlighting *api-highlights*
|
||||||
|
|
||||||
@@ -129,8 +225,10 @@ An example of calling the api from vimscript: >
|
|||||||
Global Functions *api-global*
|
Global Functions *api-global*
|
||||||
|
|
||||||
nvim_command({command}) *nvim_command()*
|
nvim_command({command}) *nvim_command()*
|
||||||
Executes an ex-command. On VimL error: Returns the VimL error;
|
Executes an ex-command.
|
||||||
v:errmsg is not updated.
|
|
||||||
|
On execution error: fails with VimL error, does not update
|
||||||
|
v:errmsg.
|
||||||
|
|
||||||
Parameters:~
|
Parameters:~
|
||||||
{command} Ex-command string
|
{command} Ex-command string
|
||||||
@@ -156,22 +254,24 @@ nvim_get_hl_by_id({hl_id}, {rgb}) *nvim_get_hl_by_id()*
|
|||||||
Highlight definition map
|
Highlight definition map
|
||||||
|
|
||||||
nvim_feedkeys({keys}, {mode}, {escape_csi}) *nvim_feedkeys()*
|
nvim_feedkeys({keys}, {mode}, {escape_csi}) *nvim_feedkeys()*
|
||||||
Passes input keys to Nvim. On VimL error: Does not fail, but
|
Sends input-keys to Nvim, subject to various quirks controlled
|
||||||
updates v:errmsg.
|
by `mode` flags. This is a blocking call, unlike
|
||||||
|
|nvim_input()|.
|
||||||
|
|
||||||
|
On execution error: does not fail, but updates v:errmsg.
|
||||||
|
|
||||||
Parameters:~
|
Parameters:~
|
||||||
{keys} to be typed
|
{keys} to be typed
|
||||||
{mode} mapping options
|
{mode} behavior flags, see |feedkeys()|
|
||||||
{escape_csi} If true, escape K_SPECIAL/CSI bytes in
|
{escape_csi} If true, escape K_SPECIAL/CSI bytes in
|
||||||
`keys`
|
`keys`
|
||||||
|
|
||||||
nvim_input({keys}) *nvim_input()*
|
nvim_input({keys}) *nvim_input()*
|
||||||
Passes keys to Nvim as raw user-input. On VimL error: Does not
|
Queues raw user-input. Unlike |nvim_feedkeys()|, this uses a
|
||||||
fail, but updates v:errmsg.
|
low-level input buffer and the call is non-blocking (input is
|
||||||
|
processed asynchronously by the eventloop).
|
||||||
|
|
||||||
Unlike `nvim_feedkeys`, this uses a lower-level input buffer
|
On execution error: does not fail, but updates v:errmsg.
|
||||||
and the call is not deferred. This is the most reliable way to
|
|
||||||
send real user input.
|
|
||||||
|
|
||||||
Note:
|
Note:
|
||||||
|keycodes| like <CR> are translated, so "<" is special. To
|
|keycodes| like <CR> are translated, so "<" is special. To
|
||||||
@@ -200,13 +300,22 @@ nvim_replace_termcodes({str}, {from_part}, {do_lt}, {special})
|
|||||||
{special} Replace |keycodes|, e.g. <CR> becomes a "\n"
|
{special} Replace |keycodes|, e.g. <CR> becomes a "\n"
|
||||||
char.
|
char.
|
||||||
|
|
||||||
nvim_command_output({str}) *nvim_command_output()*
|
nvim_command_output({command}) *nvim_command_output()*
|
||||||
TODO: Documentation
|
Executes an ex-command and returns its (non-error) output.
|
||||||
|
Shell |:!| output is not captured.
|
||||||
|
|
||||||
|
On execution error: fails with VimL error, does not update
|
||||||
|
v:errmsg.
|
||||||
|
|
||||||
|
Parameters:~
|
||||||
|
{command} Ex-command string
|
||||||
|
|
||||||
nvim_eval({expr}) *nvim_eval()*
|
nvim_eval({expr}) *nvim_eval()*
|
||||||
Evaluates a VimL expression (:help expression). Dictionaries
|
Evaluates a VimL expression (:help expression). Dictionaries
|
||||||
and Lists are recursively expanded. On VimL error: Returns a
|
and Lists are recursively expanded.
|
||||||
generic error; v:errmsg is not updated.
|
|
||||||
|
On execution error: fails with VimL error, does not update
|
||||||
|
v:errmsg.
|
||||||
|
|
||||||
Parameters:~
|
Parameters:~
|
||||||
{expr} VimL expression string
|
{expr} VimL expression string
|
||||||
@@ -214,19 +323,6 @@ nvim_eval({expr}) *nvim_eval()*
|
|||||||
Return:~
|
Return:~
|
||||||
Evaluation result or expanded object
|
Evaluation result or expanded object
|
||||||
|
|
||||||
nvim_call_function({fname}, {args}) *nvim_call_function()*
|
|
||||||
Calls a VimL function with the given arguments
|
|
||||||
|
|
||||||
On VimL error: Returns a generic error; v:errmsg is not
|
|
||||||
updated.
|
|
||||||
|
|
||||||
Parameters:~
|
|
||||||
{fname} Function to call
|
|
||||||
{args} Function arguments packed in an Array
|
|
||||||
|
|
||||||
Return:~
|
|
||||||
Result of the function call
|
|
||||||
|
|
||||||
nvim_execute_lua({code}, {args}) *nvim_execute_lua()*
|
nvim_execute_lua({code}, {args}) *nvim_execute_lua()*
|
||||||
Execute lua code. Parameters (if any) are available as `...`
|
Execute lua code. Parameters (if any) are available as `...`
|
||||||
inside the chunk. The chunk can return a value.
|
inside the chunk. The chunk can return a value.
|
||||||
@@ -241,6 +337,34 @@ nvim_execute_lua({code}, {args}) *nvim_execute_lua()*
|
|||||||
Return:~
|
Return:~
|
||||||
Return value of lua code if present or NIL.
|
Return value of lua code if present or NIL.
|
||||||
|
|
||||||
|
nvim_call_function({fn}, {args}) *nvim_call_function()*
|
||||||
|
Calls a VimL function with the given arguments.
|
||||||
|
|
||||||
|
On execution error: fails with VimL error, does not update
|
||||||
|
v:errmsg.
|
||||||
|
|
||||||
|
Parameters:~
|
||||||
|
{fn} Function to call
|
||||||
|
{args} Function arguments packed in an Array
|
||||||
|
|
||||||
|
Return:~
|
||||||
|
Result of the function call
|
||||||
|
|
||||||
|
nvim_call_dict_function({dict}, {fn}, {args}) *nvim_call_dict_function()*
|
||||||
|
Calls a VimL |Dictionary-function| with the given arguments.
|
||||||
|
|
||||||
|
On execution error: fails with VimL error, does not update
|
||||||
|
v:errmsg.
|
||||||
|
|
||||||
|
Parameters:~
|
||||||
|
{dict} Dictionary, or String evaluating to a VimL |self|
|
||||||
|
dict
|
||||||
|
{fn} Name of the function defined on the VimL dict
|
||||||
|
{args} Function arguments packed in an Array
|
||||||
|
|
||||||
|
Return:~
|
||||||
|
Result of the function call
|
||||||
|
|
||||||
nvim_strwidth({text}) *nvim_strwidth()*
|
nvim_strwidth({text}) *nvim_strwidth()*
|
||||||
Calculates the number of display cells occupied by `text`.
|
Calculates the number of display cells occupied by `text`.
|
||||||
<Tab> counts as one cell.
|
<Tab> counts as one cell.
|
||||||
@@ -435,33 +559,116 @@ nvim_get_mode() *nvim_get_mode()*
|
|||||||
{async}
|
{async}
|
||||||
|
|
||||||
nvim_get_keymap({mode}) *nvim_get_keymap()*
|
nvim_get_keymap({mode}) *nvim_get_keymap()*
|
||||||
Gets a list of dictionaries describing global (non-buffer)
|
Gets a list of global (non-buffer-local) |mapping|
|
||||||
mappings. The "buffer" key in the returned dictionary is
|
definitions.
|
||||||
always zero.
|
|
||||||
|
|
||||||
Parameters:~
|
Parameters:~
|
||||||
{mode} Mode short-name ("n", "i", "v", ...)
|
{mode} Mode short-name ("n", "i", "v", ...)
|
||||||
|
|
||||||
Return:~
|
Return:~
|
||||||
Array of maparg()-like dictionaries describing mappings
|
Array of maparg()-like dictionaries describing mappings.
|
||||||
|
The "buffer" key is always zero.
|
||||||
|
|
||||||
|
nvim_get_commands({opts}) *nvim_get_commands()*
|
||||||
|
Gets a map of global (non-buffer-local) Ex commands.
|
||||||
|
|
||||||
|
Currently only |user-commands| are supported, not builtin Ex
|
||||||
|
commands.
|
||||||
|
|
||||||
|
Parameters:~
|
||||||
|
{opts} Optional parameters. Currently only supports
|
||||||
|
{"builtin":false}
|
||||||
|
|
||||||
|
Return:~
|
||||||
|
Map of maps describing commands.
|
||||||
|
|
||||||
nvim_get_api_info() *nvim_get_api_info()*
|
nvim_get_api_info() *nvim_get_api_info()*
|
||||||
TODO: Documentation
|
Returns a 2-tuple (Array), where item 0 is the current channel
|
||||||
|
id and item 1 is the |api-metadata| map (Dictionary).
|
||||||
|
|
||||||
|
Return:~
|
||||||
|
2-tuple [{channel-id}, {api-metadata}]
|
||||||
|
|
||||||
Attributes:~
|
Attributes:~
|
||||||
{async}
|
{async}
|
||||||
|
|
||||||
nvim_call_atomic({calls}) *nvim_call_atomic()*
|
*nvim_set_client_info()*
|
||||||
Call many api methods atomically
|
nvim_set_client_info({name}, {version}, {type}, {methods},
|
||||||
|
{attributes})
|
||||||
|
Identify the client for nvim. Can be called more than once,
|
||||||
|
but subsequent calls will remove earlier info, which should be
|
||||||
|
resent if it is still valid. (This could happen if a library
|
||||||
|
first identifies the channel, and a plugin using that library
|
||||||
|
later overrides that info)
|
||||||
|
|
||||||
This has two main usages: Firstly, to perform several requests
|
Parameters:~
|
||||||
from an async context atomically, i.e. without processing
|
{name} short name for the connected client
|
||||||
requests from other rpc clients or redrawing or allowing user
|
{version} Dictionary describing the version, with the
|
||||||
interaction in between. Note that api methods that could fire
|
following possible keys (all optional)
|
||||||
autocommands or do event processing still might do so. For
|
"major" major version (defaults to 0 if not
|
||||||
instance invoking the :sleep command might call timer
|
set, for no release yet) "minor" minor
|
||||||
callbacks. Secondly, it can be used to reduce rpc overhead
|
version "patch" patch number "prerelease"
|
||||||
(roundtrips) when doing many requests in sequence.
|
string describing a prerelease, like "dev"
|
||||||
|
or "beta1" "commit" hash or similar
|
||||||
|
identifier of commit
|
||||||
|
{type} Must be one of the following values. A
|
||||||
|
client library should use "remote" if the
|
||||||
|
library user hasn't specified other value.
|
||||||
|
"remote" remote client that connected to
|
||||||
|
nvim. "ui" gui frontend "embedder"
|
||||||
|
application using nvim as a component, for
|
||||||
|
instance IDE/editor implementing a vim mode.
|
||||||
|
"host" plugin host, typically started by
|
||||||
|
nvim "plugin" single plugin, started by
|
||||||
|
nvim
|
||||||
|
{methods} Builtin methods in the client. For a host,
|
||||||
|
this does not include plugin methods which
|
||||||
|
will be discovered later. The key should be
|
||||||
|
the method name, the values are dicts with
|
||||||
|
the following (optional) keys: "async" if
|
||||||
|
true, send as a notification. If false or
|
||||||
|
unspecified, use a blocking request "nargs"
|
||||||
|
Number of arguments. Could be a single
|
||||||
|
integer or an array two integers, minimum
|
||||||
|
and maximum inclusive. Further keys might be
|
||||||
|
added in later versions of nvim and unknown
|
||||||
|
keys are thus ignored. Clients must only use
|
||||||
|
keys defined in this or later versions of
|
||||||
|
nvim!
|
||||||
|
{attributes} Informal attributes describing the client.
|
||||||
|
Clients might define their own keys, but the
|
||||||
|
following are suggested: "website" Website
|
||||||
|
of client (for instance github repository)
|
||||||
|
"license" Informal descripton of the
|
||||||
|
license, such as "Apache 2", "GPLv3" or
|
||||||
|
"MIT" "logo" URI or path to image,
|
||||||
|
preferably small logo or icon. .png or .svg
|
||||||
|
format is preferred.
|
||||||
|
|
||||||
|
nvim_get_chan_info({chan}) *nvim_get_chan_info()*
|
||||||
|
Get information about a channel.
|
||||||
|
|
||||||
|
Return:~
|
||||||
|
a Dictionary, describing a channel with the following
|
||||||
|
keys: "stream" the stream underlying the channel
|
||||||
|
"stdio" stdin and stdout of this Nvim instance "stderr"
|
||||||
|
stderr of this Nvim instance "socket" TCP/IP socket or
|
||||||
|
named pipe "job" job with communication over its stdio
|
||||||
|
|
||||||
|
"mode" how data received on the channel is interpreted "bytes" send and recieve raw bytes "terminal" a |terminal| instance interprets ASCII sequences "rpc" |RPC| communication on the channel is active "pty" Name of pseudoterminal, if one is used (optional). On a POSIX system, this will be a device path like /dev/pts/1. Even if the name is unknown, the key will still be present to indicate a pty is used. This is currently the case when using winpty on windows. "buffer" buffer with connected |terminal| instance (optional) "client" information about the client on the other end of the RPC channel, if it has added it using |nvim_set_client_info|. (optional)
|
||||||
|
|
||||||
|
nvim_list_chans() *nvim_list_chans()*
|
||||||
|
Get information about all open channels.
|
||||||
|
|
||||||
|
Return:~
|
||||||
|
Array of Dictionaries, each describing a channel with the
|
||||||
|
format specified at |nvim_get_chan_info|.
|
||||||
|
|
||||||
|
nvim_call_atomic({calls}) *nvim_call_atomic()*
|
||||||
|
Calls many API methods atomically.
|
||||||
|
|
||||||
|
This has two main usages:
|
||||||
|
To perform several requests from an async context atomically, i.e. without interleaving redraws, RPC requests from other clients, or user interactions (however API methods may trigger autocommands or event processing which have such side-effects, e.g. |:sleep| may wake timers). To minimize RPC overhead (roundtrips) of a sequence of many requests.
|
||||||
|
|
||||||
Parameters:~
|
Parameters:~
|
||||||
{calls} an array of calls, where each call is described
|
{calls} an array of calls, where each call is described
|
||||||
@@ -474,9 +681,87 @@ nvim_call_atomic({calls}) *nvim_call_atomic()*
|
|||||||
If a call resulted in an error, it is a three-element
|
If a call resulted in an error, it is a three-element
|
||||||
array with the zero-based index of the call which resulted
|
array with the zero-based index of the call which resulted
|
||||||
in an error, the error type and the error message. If an
|
in an error, the error type and the error message. If an
|
||||||
error ocurred, the values from all preceding calls will
|
error occurred, the values from all preceding calls will
|
||||||
still be returned.
|
still be returned.
|
||||||
|
|
||||||
|
*nvim_parse_expression()*
|
||||||
|
nvim_parse_expression({expr}, {flags}, {highlight})
|
||||||
|
Parse a VimL expression
|
||||||
|
|
||||||
|
Attributes:~
|
||||||
|
{async}
|
||||||
|
|
||||||
|
Parameters:~
|
||||||
|
{expr} Expression to parse. Is always treated as a
|
||||||
|
single line.
|
||||||
|
{flags} Flags: - "m" if multiple expressions in a
|
||||||
|
row are allowed (only the first one will be
|
||||||
|
parsed), - "E" if EOC tokens are not allowed
|
||||||
|
(determines whether they will stop parsing
|
||||||
|
process or be recognized as an
|
||||||
|
operator/space, though also yielding an
|
||||||
|
error). - "l" when needing to start parsing
|
||||||
|
with lvalues for ":let" or ":for". Common
|
||||||
|
flag sets: - "m" to parse like for ":echo". -
|
||||||
|
"E" to parse like for "<C-r>=". - empty
|
||||||
|
string for ":call". - "lm" to parse for
|
||||||
|
":let".
|
||||||
|
{highlight} If true, return value will also include
|
||||||
|
"highlight" key containing array of 4-tuples
|
||||||
|
(arrays) (Integer, Integer, Integer, String),
|
||||||
|
where first three numbers define the
|
||||||
|
highlighted region and represent line,
|
||||||
|
starting column and ending column (latter
|
||||||
|
exclusive: one should highlight region
|
||||||
|
[start_col, end_col)).
|
||||||
|
|
||||||
|
Return:~
|
||||||
|
AST: top-level dictionary with these keys: "error":
|
||||||
|
Dictionary with error, present only if parser saw some
|
||||||
|
error. Contains the following keys: "message": String,
|
||||||
|
error message in printf format, translated. Must contain
|
||||||
|
exactly one "%.*s". "arg": String, error message argument.
|
||||||
|
"len": Amount of bytes successfully parsed. With flags
|
||||||
|
equal to "" that should be equal to the length of expr
|
||||||
|
string. @note: “Sucessfully parsed” here means
|
||||||
|
“participated in AST creation”, not “till the first
|
||||||
|
error”. "ast": AST, either nil or a dictionary with these
|
||||||
|
keys: "type": node type, one of the value names from
|
||||||
|
ExprASTNodeType stringified without "kExprNode" prefix.
|
||||||
|
"start": a pair [line, column] describing where node is
|
||||||
|
“started” where "line" is always 0 (will not be 0 if you
|
||||||
|
will be using nvim_parse_viml() on e.g. ":let", but that
|
||||||
|
is not present yet). Both elements are Integers. "len":
|
||||||
|
“length” of the node. This and "start" are there for
|
||||||
|
debugging purposes primary (debugging parser and providing
|
||||||
|
debug information). "children": a list of nodes described
|
||||||
|
in top/"ast". There always is zero, one or two children,
|
||||||
|
key will not be present if node has no children. Maximum
|
||||||
|
number of children may be found in node_maxchildren array.
|
||||||
|
Local values (present only for certain nodes): "scope": a
|
||||||
|
single Integer, specifies scope for "Option" and
|
||||||
|
"PlainIdentifier" nodes. For "Option" it is one of
|
||||||
|
ExprOptScope values, for "PlainIdentifier" it is one of
|
||||||
|
ExprVarScope values. "ident": identifier (without scope,
|
||||||
|
if any), present for "Option", "PlainIdentifier",
|
||||||
|
"PlainKey" and "Environment" nodes. "name": Integer,
|
||||||
|
register name (one character) or -1. Only present for
|
||||||
|
"Register" nodes. "cmp_type": String, comparison type, one
|
||||||
|
of the value names from ExprComparisonType, stringified
|
||||||
|
without "kExprCmp" prefix. Only present for "Comparison"
|
||||||
|
nodes. "ccs_strategy": String, case comparison strategy,
|
||||||
|
one of the value names from ExprCaseCompareStrategy,
|
||||||
|
stringified without "kCCStrategy" prefix. Only present for
|
||||||
|
"Comparison" nodes. "augmentation": String, augmentation
|
||||||
|
type for "Assignment" nodes. Is either an empty string,
|
||||||
|
"Add", "Subtract" or "Concat" for "=", "+=", "-=" or ".="
|
||||||
|
respectively. "invert": Boolean, true if result of
|
||||||
|
comparison needs to be inverted. Only present for
|
||||||
|
"Comparison" nodes. "ivalue": Integer, integer value for
|
||||||
|
"Integer" nodes. "fvalue": Float, floating-point value for
|
||||||
|
"Float" nodes. "svalue": String, value for
|
||||||
|
"SingleQuotedString" and "DoubleQuotedString" nodes.
|
||||||
|
|
||||||
nvim__id({obj}) *nvim__id()*
|
nvim__id({obj}) *nvim__id()*
|
||||||
Returns object given as argument
|
Returns object given as argument
|
||||||
|
|
||||||
@@ -525,6 +810,32 @@ nvim__id_float({flt}) *nvim__id_float()*
|
|||||||
Return:~
|
Return:~
|
||||||
its argument.
|
its argument.
|
||||||
|
|
||||||
|
nvim__stats() *nvim__stats()*
|
||||||
|
Gets internal stats.
|
||||||
|
|
||||||
|
Return:~
|
||||||
|
Map of various internal stats.
|
||||||
|
|
||||||
|
nvim_list_uis() *nvim_list_uis()*
|
||||||
|
Gets a list of dictionaries representing attached UIs.
|
||||||
|
|
||||||
|
Return:~
|
||||||
|
Array of UI dictionaries
|
||||||
|
Each dictionary has the following keys:
|
||||||
|
"height" requested height of the UI "width" requested width of the UI "rgb" whether the UI uses rgb colors (false implies cterm colors) "ext_..." Requested UI extensions, see |ui-options| "chan" Channel id of remote UI (not present for TUI)
|
||||||
|
|
||||||
|
nvim_get_proc_children({pid}) *nvim_get_proc_children()*
|
||||||
|
Gets the immediate children of process `pid`.
|
||||||
|
|
||||||
|
Return:~
|
||||||
|
Array of child process ids, empty if process not found.
|
||||||
|
|
||||||
|
nvim_get_proc({pid}) *nvim_get_proc()*
|
||||||
|
Gets info describing process `pid`.
|
||||||
|
|
||||||
|
Return:~
|
||||||
|
Map of process properties, or NIL if process not found.
|
||||||
|
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
Buffer Functions *api-buffer*
|
Buffer Functions *api-buffer*
|
||||||
@@ -538,6 +849,34 @@ nvim_buf_line_count({buffer}) *nvim_buf_line_count()*
|
|||||||
Return:~
|
Return:~
|
||||||
Line count
|
Line count
|
||||||
|
|
||||||
|
nvim_buf_attach({buffer}, {send_buffer}, {opts}) *nvim_buf_attach()*
|
||||||
|
Activate updates from this buffer to the current channel.
|
||||||
|
|
||||||
|
Parameters:~
|
||||||
|
{buffer} The buffer handle
|
||||||
|
{send_buffer} Set to true if the initial notification
|
||||||
|
should contain the whole buffer. If so, the
|
||||||
|
first notification will be a
|
||||||
|
`nvim_buf_lines_event`. Otherwise, the
|
||||||
|
first notification will be a
|
||||||
|
`nvim_buf_changedtick_event`
|
||||||
|
{opts} Optional parameters. Currently not used.
|
||||||
|
|
||||||
|
Return:~
|
||||||
|
False when updates couldn't be enabled because the buffer
|
||||||
|
isn't loaded or optscontained an invalid key; otherwise
|
||||||
|
True.
|
||||||
|
|
||||||
|
nvim_buf_detach({buffer}) *nvim_buf_detach()*
|
||||||
|
Deactivate updates from this buffer to the current channel.
|
||||||
|
|
||||||
|
Parameters:~
|
||||||
|
{buffer} The buffer handle
|
||||||
|
|
||||||
|
Return:~
|
||||||
|
False when updates couldn't be disabled because the buffer
|
||||||
|
isn't loaded; otherwise True.
|
||||||
|
|
||||||
*nvim_buf_get_lines()*
|
*nvim_buf_get_lines()*
|
||||||
nvim_buf_get_lines({buffer}, {start}, {end}, {strict_indexing})
|
nvim_buf_get_lines({buffer}, {start}, {end}, {strict_indexing})
|
||||||
Retrieves a line range from the buffer
|
Retrieves a line range from the buffer
|
||||||
@@ -604,16 +943,25 @@ nvim_buf_get_changedtick({buffer}) *nvim_buf_get_changedtick()*
|
|||||||
b:changedtickvalue.
|
b:changedtickvalue.
|
||||||
|
|
||||||
nvim_buf_get_keymap({buffer}, {mode}) *nvim_buf_get_keymap()*
|
nvim_buf_get_keymap({buffer}, {mode}) *nvim_buf_get_keymap()*
|
||||||
Gets a list of dictionaries describing buffer-local mappings.
|
Gets a list of buffer-local |mapping| definitions.
|
||||||
The "buffer" key in the returned dictionary reflects the
|
|
||||||
buffer handle where the mapping is present.
|
|
||||||
|
|
||||||
Parameters:~
|
Parameters:~
|
||||||
{mode} Mode short-name ("n", "i", "v", ...)
|
{mode} Mode short-name ("n", "i", "v", ...)
|
||||||
{buffer} Buffer handle
|
{buffer} Buffer handle
|
||||||
|
|
||||||
Return:~
|
Return:~
|
||||||
Array of maparg()-like dictionaries describing mappings
|
Array of maparg()-like dictionaries describing mappings.
|
||||||
|
The "buffer" key holds the associated buffer handle.
|
||||||
|
|
||||||
|
nvim_buf_get_commands({buffer}, {opts}) *nvim_buf_get_commands()*
|
||||||
|
Gets a map of buffer-local |user-commands|.
|
||||||
|
|
||||||
|
Parameters:~
|
||||||
|
{buffer} Buffer handle.
|
||||||
|
{opts} Optional parameters. Currently not used.
|
||||||
|
|
||||||
|
Return:~
|
||||||
|
Map of maps describing commands.
|
||||||
|
|
||||||
nvim_buf_set_var({buffer}, {name}, {value}) *nvim_buf_set_var()*
|
nvim_buf_set_var({buffer}, {name}, {value}) *nvim_buf_set_var()*
|
||||||
Sets a buffer-scoped (b:) variable
|
Sets a buffer-scoped (b:) variable
|
||||||
@@ -717,9 +1065,10 @@ nvim_buf_add_highlight({buffer}, {src_id}, {hl_group}, {line},
|
|||||||
or -1 for ungrouped highlight
|
or -1 for ungrouped highlight
|
||||||
{hl_group} Name of the highlight group to use
|
{hl_group} Name of the highlight group to use
|
||||||
{line} Line to highlight (zero-indexed)
|
{line} Line to highlight (zero-indexed)
|
||||||
{col_start} Start of range of columns to highlight
|
{col_start} Start of (byte-indexed) column range to
|
||||||
{col_end} End of range of columns to highlight, or -1
|
highlight
|
||||||
to highlight to end of line
|
{col_end} End of (byte-indexed) column range to
|
||||||
|
highlight, or -1 to highlight to end of line
|
||||||
|
|
||||||
Return:~
|
Return:~
|
||||||
The src_id that was used
|
The src_id that was used
|
||||||
@@ -729,7 +1078,7 @@ nvim_buf_clear_highlight({buffer}, {src_id}, {line_start}, {line_end})
|
|||||||
Clears highlights from a given source group and a range of
|
Clears highlights from a given source group and a range of
|
||||||
lines
|
lines
|
||||||
|
|
||||||
To clear a source group in the entire buffer, pass in 1 and -1
|
To clear a source group in the entire buffer, pass in 0 and -1
|
||||||
to line_start and line_end respectively.
|
to line_start and line_end respectively.
|
||||||
|
|
||||||
Parameters:~
|
Parameters:~
|
||||||
@@ -953,9 +1302,6 @@ nvim_tabpage_is_valid({tabpage}) *nvim_tabpage_is_valid()*
|
|||||||
==============================================================================
|
==============================================================================
|
||||||
UI Functions *api-ui*
|
UI Functions *api-ui*
|
||||||
|
|
||||||
remote_ui_disconnect() *remote_ui_disconnect()*
|
|
||||||
TODO: Documentation
|
|
||||||
|
|
||||||
nvim_ui_attach({width}, {height}, {options}) *nvim_ui_attach()*
|
nvim_ui_attach({width}, {height}, {options}) *nvim_ui_attach()*
|
||||||
TODO: Documentation
|
TODO: Documentation
|
||||||
|
|
||||||
@@ -968,4 +1314,4 @@ nvim_ui_try_resize({width}, {height}) *nvim_ui_try_resize()*
|
|||||||
nvim_ui_set_option({name}, {value}) *nvim_ui_set_option()*
|
nvim_ui_set_option({name}, {value}) *nvim_ui_set_option()*
|
||||||
TODO: Documentation
|
TODO: Documentation
|
||||||
|
|
||||||
vim:tw=78:ts=8:ft=help:norl:
|
vim:tw=78:ts=8:ft=help:norl:
|
||||||
|
@@ -259,13 +259,14 @@ Name triggered by ~
|
|||||||
|BufNew| just after creating a new buffer
|
|BufNew| just after creating a new buffer
|
||||||
|
|
||||||
|SwapExists| detected an existing swap file
|
|SwapExists| detected an existing swap file
|
||||||
|TermOpen| when a terminal buffer is starting
|
|TermOpen| when a terminal job starts
|
||||||
|TermClose| when a terminal buffer ends
|
|TermClose| when a terminal job ends
|
||||||
|
|ChanOpen| after a channel opened
|
||||||
|
|ChanInfo| after a channel has its state changed
|
||||||
|
|
||||||
Options
|
Options
|
||||||
|FileType| when the 'filetype' option has been set
|
|FileType| when the 'filetype' option has been set
|
||||||
|Syntax| when the 'syntax' option has been set
|
|Syntax| when the 'syntax' option has been set
|
||||||
|TermChanged| after the value of 'term' has changed
|
|
||||||
|OptionSet| after setting any option
|
|OptionSet| after setting any option
|
||||||
|
|
||||||
Startup and exit
|
Startup and exit
|
||||||
@@ -273,10 +274,11 @@ Name triggered by ~
|
|||||||
|GUIEnter| after starting the GUI successfully
|
|GUIEnter| after starting the GUI successfully
|
||||||
|GUIFailed| after starting the GUI failed
|
|GUIFailed| after starting the GUI failed
|
||||||
|TermResponse| after the terminal response to |t_RV| is received
|
|TermResponse| after the terminal response to |t_RV| is received
|
||||||
|
|
||||||
|QuitPre| when using `:quit`, before deciding whether to quit
|
|QuitPre| when using `:quit`, before deciding whether to quit
|
||||||
|VimLeavePre| before exiting Vim, before writing the shada file
|
|VimLeavePre| before exiting Nvim, before writing the shada file
|
||||||
|VimLeave| before exiting Vim, after writing the shada file
|
|VimLeave| before exiting Nvim, after writing the shada file
|
||||||
|
|VimResume| after Nvim is resumed
|
||||||
|
|VimSuspend| before Nvim is suspended
|
||||||
|
|
||||||
Various
|
Various
|
||||||
|DirChanged| after the |current-directory| was changed
|
|DirChanged| after the |current-directory| was changed
|
||||||
@@ -310,6 +312,8 @@ Name triggered by ~
|
|||||||
|TabNew| when creating a new tab page
|
|TabNew| when creating a new tab page
|
||||||
|TabNewEntered| after entering a new tab page
|
|TabNewEntered| after entering a new tab page
|
||||||
|TabClosed| after closing a tab page
|
|TabClosed| after closing a tab page
|
||||||
|
|CmdlineEnter| after entering cmdline mode
|
||||||
|
|CmdlineLeave| before leaving cmdline mode
|
||||||
|CmdwinEnter| after entering the command-line window
|
|CmdwinEnter| after entering the command-line window
|
||||||
|CmdwinLeave| before leaving the command-line window
|
|CmdwinLeave| before leaving the command-line window
|
||||||
|
|
||||||
@@ -323,6 +327,9 @@ Name triggered by ~
|
|||||||
|
|
||||||
|TextChanged| after a change was made to the text in Normal mode
|
|TextChanged| after a change was made to the text in Normal mode
|
||||||
|TextChangedI| after a change was made to the text in Insert mode
|
|TextChangedI| after a change was made to the text in Insert mode
|
||||||
|
when popup menu is not visible
|
||||||
|
|TextChangedP| after a change was made to the text in Insert mode
|
||||||
|
when popup menu visible
|
||||||
|
|
||||||
|ColorScheme| after loading a color scheme
|
|ColorScheme| after loading a color scheme
|
||||||
|
|
||||||
@@ -482,6 +489,19 @@ BufWriteCmd Before writing the whole buffer to a file.
|
|||||||
*BufWritePost*
|
*BufWritePost*
|
||||||
BufWritePost After writing the whole buffer to a file
|
BufWritePost After writing the whole buffer to a file
|
||||||
(should undo the commands for BufWritePre).
|
(should undo the commands for BufWritePre).
|
||||||
|
*ChanInfo*
|
||||||
|
ChanInfo State of channel changed, for instance the
|
||||||
|
client of a RPC channel described itself.
|
||||||
|
Sets these |v:event| keys:
|
||||||
|
info
|
||||||
|
See |nvim_get_chan_info| for the format of the
|
||||||
|
info Dictionary.
|
||||||
|
*ChanOpen*
|
||||||
|
ChanOpen Just after a channel was opened.
|
||||||
|
Sets these |v:event| keys:
|
||||||
|
info
|
||||||
|
See |nvim_get_chan_info| for the format of the
|
||||||
|
info Dictionary.
|
||||||
*CmdUndefined*
|
*CmdUndefined*
|
||||||
CmdUndefined When a user command is used but it isn't
|
CmdUndefined When a user command is used but it isn't
|
||||||
defined. Useful for defining a command only
|
defined. Useful for defining a command only
|
||||||
@@ -492,6 +512,28 @@ CmdUndefined When a user command is used but it isn't
|
|||||||
command is defined. An alternative is to
|
command is defined. An alternative is to
|
||||||
always define the user command and have it
|
always define the user command and have it
|
||||||
invoke an autoloaded function. See |autoload|.
|
invoke an autoloaded function. See |autoload|.
|
||||||
|
*CmdlineEnter*
|
||||||
|
CmdlineEnter After moving the cursor to the command line,
|
||||||
|
where the user can type a command or search
|
||||||
|
string.
|
||||||
|
<afile> is set to a single character,
|
||||||
|
indicating the type of command-line.
|
||||||
|
|cmdline-char|
|
||||||
|
Sets these |v:event| keys:
|
||||||
|
cmdlevel
|
||||||
|
cmdtype
|
||||||
|
*CmdlineLeave*
|
||||||
|
CmdlineLeave Before leaving the command line.
|
||||||
|
<afile> is set to a single character,
|
||||||
|
indicating the type of command-line.
|
||||||
|
|cmdline-char|
|
||||||
|
Sets these |v:event| keys:
|
||||||
|
abort (mutable)
|
||||||
|
cmdlevel
|
||||||
|
cmdtype
|
||||||
|
Note: `abort` can only be changed from false
|
||||||
|
to true. An autocmd cannot execute an already
|
||||||
|
aborted cmdline by changing it to false.
|
||||||
*CmdwinEnter*
|
*CmdwinEnter*
|
||||||
CmdwinEnter After entering the command-line window.
|
CmdwinEnter After entering the command-line window.
|
||||||
Useful for setting options specifically for
|
Useful for setting options specifically for
|
||||||
@@ -862,14 +904,11 @@ SpellFileMissing When trying to load a spell checking file and
|
|||||||
language, 'encoding' also matters. See
|
language, 'encoding' also matters. See
|
||||||
|spell-SpellFileMissing|.
|
|spell-SpellFileMissing|.
|
||||||
*StdinReadPost*
|
*StdinReadPost*
|
||||||
StdinReadPost After reading from the stdin into the buffer,
|
StdinReadPost During startup, after reading from stdin into
|
||||||
before executing the modelines. Only used
|
the buffer, before executing modelines. |--|
|
||||||
when the "-" argument was used when Vim was
|
|
||||||
started |--|.
|
|
||||||
*StdinReadPre*
|
*StdinReadPre*
|
||||||
StdinReadPre Before reading from stdin into the buffer.
|
StdinReadPre During startup, before reading from stdin into
|
||||||
Only used when the "-" argument was used when
|
the buffer. |--|
|
||||||
Vim was started |--|.
|
|
||||||
*SwapExists*
|
*SwapExists*
|
||||||
SwapExists Detected an existing swap file when starting
|
SwapExists Detected an existing swap file when starting
|
||||||
to edit a file. Only when it is possible to
|
to edit a file. Only when it is possible to
|
||||||
@@ -909,26 +948,20 @@ TabEnter Just after entering a tab page. |tab-page|
|
|||||||
TabLeave Just before leaving a tab page. |tab-page|
|
TabLeave Just before leaving a tab page. |tab-page|
|
||||||
A WinLeave event will have been triggered
|
A WinLeave event will have been triggered
|
||||||
first.
|
first.
|
||||||
{Nvim} *TabNew*
|
*TabNew*
|
||||||
TabNew When creating a new tab page. |tab-page|
|
TabNew When creating a new tab page. |tab-page|
|
||||||
After WinEnter and before TabEnter.
|
After WinEnter and before TabEnter.
|
||||||
{Nvim} *TabNewEntered*
|
*TabNewEntered*
|
||||||
TabNewEntered After entering a new tab page. |tab-page|
|
TabNewEntered After entering a new tab page. |tab-page|
|
||||||
After BufEnter.
|
After BufEnter.
|
||||||
{Nvim} *TabClosed*
|
*TabClosed*
|
||||||
TabClosed After closing a tab page. <afile> can be used
|
TabClosed After closing a tab page. <afile> can be used
|
||||||
for the tab page number.
|
for the tab page number.
|
||||||
*TermChanged*
|
*TermClose*
|
||||||
TermChanged After the value of 'term' has changed. Useful
|
TermClose When a |terminal| job ends.
|
||||||
for re-loading the syntax file to update the
|
*TermOpen*
|
||||||
colors, fonts and other terminal-dependent
|
TermOpen When a |terminal| job is starting. Can be
|
||||||
settings. Executed for all loaded buffers.
|
used to configure the terminal buffer.
|
||||||
{Nvim} *TermClose*
|
|
||||||
TermClose When a terminal buffer ends.
|
|
||||||
{Nvim} *TermOpen*
|
|
||||||
TermOpen When a terminal buffer is starting. This can
|
|
||||||
be used to configure the terminal emulator by
|
|
||||||
setting buffer variables. |terminal|
|
|
||||||
*TermResponse*
|
*TermResponse*
|
||||||
TermResponse After the response to |t_RV| is received from
|
TermResponse After the response to |t_RV| is received from
|
||||||
the terminal. The value of |v:termresponse|
|
the terminal. The value of |v:termresponse|
|
||||||
@@ -951,6 +984,11 @@ TextChangedI After a change was made to the text in the
|
|||||||
current buffer in Insert mode.
|
current buffer in Insert mode.
|
||||||
Not triggered when the popup menu is visible.
|
Not triggered when the popup menu is visible.
|
||||||
Otherwise the same as TextChanged.
|
Otherwise the same as TextChanged.
|
||||||
|
*TextChangedP*
|
||||||
|
TextChangedP After a change was made to the text in the
|
||||||
|
current buffer in Insert mode, only when the
|
||||||
|
popup menu is visible. Otherwise the same as
|
||||||
|
TextChanged.
|
||||||
*User*
|
*User*
|
||||||
User Never executed automatically. To be used for
|
User Never executed automatically. To be used for
|
||||||
autocommands that are only executed with
|
autocommands that are only executed with
|
||||||
@@ -992,6 +1030,10 @@ VimLeavePre Before exiting Vim, just before writing the
|
|||||||
VimResized After the Vim window was resized, thus 'lines'
|
VimResized After the Vim window was resized, thus 'lines'
|
||||||
and/or 'columns' changed. Not when starting
|
and/or 'columns' changed. Not when starting
|
||||||
up though.
|
up though.
|
||||||
|
*VimResume*
|
||||||
|
VimResume After Nvim resumes from |suspend| state.
|
||||||
|
*VimSuspend*
|
||||||
|
VimSuspend Before Nvim enters |suspend| state.
|
||||||
*WinEnter*
|
*WinEnter*
|
||||||
WinEnter After entering another window. Not done for
|
WinEnter After entering another window. Not done for
|
||||||
the first window, when Vim has just started.
|
the first window, when Vim has just started.
|
||||||
|
170
runtime/doc/channel.txt
Normal file
170
runtime/doc/channel.txt
Normal file
@@ -0,0 +1,170 @@
|
|||||||
|
*channel.txt* Nvim
|
||||||
|
|
||||||
|
|
||||||
|
NVIM REFERENCE MANUAL by Thiago de Arruda
|
||||||
|
|
||||||
|
|
||||||
|
Nvim asynchronous IO *channel*
|
||||||
|
|
||||||
|
Type |gO| to see the table of contents.
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
1. Introduction *channel-intro*
|
||||||
|
|
||||||
|
Channels are nvim's way of communicating with external processes.
|
||||||
|
|
||||||
|
There are several ways to open a channel:
|
||||||
|
|
||||||
|
1. Through stdin/stdout when `nvim` is started with `--headless`, and a startup
|
||||||
|
script or --cmd command opens the stdio channel using |stdioopen()|.
|
||||||
|
|
||||||
|
2. Through stdin, stdout and stderr of a process spawned by |jobstart()|.
|
||||||
|
|
||||||
|
3. Through the PTY master end of a PTY opened with
|
||||||
|
`jobstart(..., {'pty': v:true})` or |termopen()|.
|
||||||
|
|
||||||
|
4. By connecting to a TCP/IP socket or named pipe with |sockconnect()|.
|
||||||
|
|
||||||
|
5. By another process connecting to a socket listened to by nvim. This only
|
||||||
|
supports RPC channels, see |rpc-connecting|.
|
||||||
|
|
||||||
|
Channels support multiple modes or protocols. In the most basic
|
||||||
|
mode of operation, raw bytes are read and written to the channel.
|
||||||
|
The |rpc| protocol, based on the msgpack-rpc standard, enables nvim and the
|
||||||
|
process at the other end to send remote calls and events to each other.
|
||||||
|
Additionally, the builtin |terminal-emulator|, is implemented on top of PTY
|
||||||
|
channels.
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
2. Reading and writing raw bytes *channel-bytes*
|
||||||
|
|
||||||
|
By default, channels opened by vimscript functions will operate with raw
|
||||||
|
bytes. Additionally, for a job channel using rpc, bytes can still be
|
||||||
|
read over its stderr. Similarily, only bytes can be written to nvim's own stderr.
|
||||||
|
|
||||||
|
*channel-callback* *buffered*
|
||||||
|
*E5210* *on_stdout* *on_stderr* *on_stdin* *on_data*
|
||||||
|
It is possible to register callback functions when a channel receives data by
|
||||||
|
passing the `on_stdout`, `on_stderr`, `on_stdin` options on creation. Sockets
|
||||||
|
may specify an `on_data` callback instead. Each callback function will be
|
||||||
|
invoked with data read from the channel. By default, the callback will be
|
||||||
|
invoked immediately when data is available, to facilitate interactive
|
||||||
|
communication. The same callback will then be invoked with empty data, to
|
||||||
|
indicate that the stream reached EOF. Alternatively the `stdout_buffered`,
|
||||||
|
`stderr_buffered`, `stdin_buffered`, `data_buffered` options can be set to
|
||||||
|
invoke the corresponding callback only when the underlying stream reaches EOF.
|
||||||
|
The callback will then be passed complete output. This is helpful when only
|
||||||
|
the complete output is useful, and not partial data. Futhermore if the stream
|
||||||
|
is set to be buffered, but the callback is not set, the data is saved in the
|
||||||
|
options dict, with the stream name as key. For this to work a new options dict
|
||||||
|
must be used for each opened channel. If a script uses a global `s:job_opts`
|
||||||
|
dict, it can be copied with |copy()| before supplying it to |jobstart()|. If a
|
||||||
|
dict is reused, so that the dict key already is occupied, error `E5210` will
|
||||||
|
be raised.
|
||||||
|
|
||||||
|
- The arguments passed to the callback function are:
|
||||||
|
|
||||||
|
0: The channel id
|
||||||
|
1: the raw data read from the channel, formatted as a |readfile()|-style
|
||||||
|
list. If EOF occured, a single empty string `['']` will be passed in.
|
||||||
|
Note that the items in this list do not directly correspond to actual
|
||||||
|
lines in the output. See |channel-lines|
|
||||||
|
2: Stream name as a string, like `"stdout"`. This is to allow multiple
|
||||||
|
stream handlers to be implemented by the same function. The available
|
||||||
|
events depend on how the channel was opened and in what mode/protocol.
|
||||||
|
|
||||||
|
*channel-lines*
|
||||||
|
Note:
|
||||||
|
stream event handlers may receive partial (incomplete) lines. For a given
|
||||||
|
invocation of on_stdout etc, `a:data` is not guaranteed to end
|
||||||
|
with a newline.
|
||||||
|
- `abcdefg` may arrive as `['abc']`, `['defg']`.
|
||||||
|
- `abc\nefg` may arrive as `['abc', '']`, `['efg']` or `['abc']`,
|
||||||
|
`['','efg']`, or even `['ab']`, `['c','efg']`.
|
||||||
|
|
||||||
|
If you only are interested in complete output when the process exits,
|
||||||
|
use buffered mode. Otherwise, an easy way to deal with this:
|
||||||
|
initialize a list as `['']`, then append to it as follows: >
|
||||||
|
let s:chunks = ['']
|
||||||
|
func! s:on_event(job_id, data, event) dict
|
||||||
|
let s:chunks[-1] .= a:data[0]
|
||||||
|
call extend(s:chunks, a:data[1:])
|
||||||
|
endf
|
||||||
|
<
|
||||||
|
|
||||||
|
Additionally, if the callbacks are Dictionary functions, |self| can be used to
|
||||||
|
refer to the options dictionary containing the callbacks. |Partial|s can also be
|
||||||
|
used as callbacks.
|
||||||
|
|
||||||
|
Data can be sent to the channel using the |chansend()| function. Here is a
|
||||||
|
simple example, echoing some data through a cat-process:
|
||||||
|
>
|
||||||
|
function! s:OnEvent(id, data, event) dict
|
||||||
|
let str = join(a:data, "\n")
|
||||||
|
echomsg str
|
||||||
|
endfunction
|
||||||
|
let id = jobstart(['cat'], {'on_stdout': function('s:OnEvent') } )
|
||||||
|
call chansend(id, "hello!")
|
||||||
|
<
|
||||||
|
|
||||||
|
Here is a example of setting a buffer to the result of grep, but only after
|
||||||
|
all data has been processed:
|
||||||
|
>
|
||||||
|
function! s:OnEvent(id, data, event) dict
|
||||||
|
call nvim_buf_set_lines(2, 0, -1, v:true, a:data)
|
||||||
|
endfunction
|
||||||
|
let id = jobstart(['grep', '^[0-9]'], { 'on_stdout': function('s:OnEvent'),
|
||||||
|
\ 'stdout_buffered':v:true } )
|
||||||
|
|
||||||
|
call chansend(id, "stuff\n10 PRINT \"NVIM\"\nxx")
|
||||||
|
" no output is received, buffer is empty
|
||||||
|
|
||||||
|
call chansend(id, "xx\n20 GOTO 10\nzz\n")
|
||||||
|
call chanclose(id, 'stdin')
|
||||||
|
" now buffer has result
|
||||||
|
<
|
||||||
|
For additional examples with jobs, see |job-control|.
|
||||||
|
|
||||||
|
*channel-pty*
|
||||||
|
Special case: PTY channels opened with `jobstart(..., {'pty': v:true})` do not
|
||||||
|
preprocess ANSI escape sequences, these will be sent raw to the callback.
|
||||||
|
However, change of PTY size can be signaled to the slave using |jobresize()|.
|
||||||
|
See also |terminal-emulator|.
|
||||||
|
|
||||||
|
Terminal characteristics (termios) for |:terminal| and PTY channels are copied
|
||||||
|
from the host TTY, or if Nvim is |--headless| it uses default values: >
|
||||||
|
:echo system('nvim --headless +"te stty -a" +"sleep 1" +"1,/^$/print" +q')
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
3. Communicating using msgpack-rpc *channel-rpc*
|
||||||
|
|
||||||
|
When channels are opened with the `rpc` option set to true, the channel can be
|
||||||
|
used for remote method calls in both directions, see |msgpack-rpc|. Note that
|
||||||
|
rpc channels are implicitly trusted and the process at the other end can
|
||||||
|
invoke any |api| function!
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
4. Standard IO channel *channel-stdio*
|
||||||
|
|
||||||
|
Nvim uses stdin/stdout to interact with the user over the terminal interface
|
||||||
|
(TUI). If Nvim is |--headless| the TUI is not started and stdin/stdout can be
|
||||||
|
used as a channel. See also |--embed|.
|
||||||
|
|
||||||
|
Call |stdioopen()| during |startup| to open the stdio channel as channel-id 1.
|
||||||
|
Nvim's stderr is always available as channel-id 2 (|v:stderr| to be explicit),
|
||||||
|
a write-only bytes channel.
|
||||||
|
|
||||||
|
Example: >
|
||||||
|
func! OnEvent(id, data, event)
|
||||||
|
if a:data == [""]
|
||||||
|
quit
|
||||||
|
end
|
||||||
|
call chansend(a:id, map(a:data, {i,v -> toupper(v)}))
|
||||||
|
endfunc
|
||||||
|
call stdioopen({'on_stdin': 'OnEvent'})
|
||||||
|
<
|
||||||
|
Put this in `uppercase.vim` and run: >
|
||||||
|
nvim --headless --cmd "source uppercase.vim"
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
vim:tw=78:ts=8:noet:ft=help:norl:
|
@@ -382,7 +382,7 @@ CTRL-N After using 'wildchar' which got multiple matches, go to next
|
|||||||
<S-Tab> *c_CTRL-P* *c_<S-Tab>*
|
<S-Tab> *c_CTRL-P* *c_<S-Tab>*
|
||||||
CTRL-P After using 'wildchar' which got multiple matches, go to
|
CTRL-P After using 'wildchar' which got multiple matches, go to
|
||||||
previous match. Otherwise recall older command-line from
|
previous match. Otherwise recall older command-line from
|
||||||
history. <S-Tab> only works with the GUI.
|
history.
|
||||||
*c_CTRL-A*
|
*c_CTRL-A*
|
||||||
CTRL-A All names that match the pattern in front of the cursor are
|
CTRL-A All names that match the pattern in front of the cursor are
|
||||||
inserted.
|
inserted.
|
||||||
@@ -1088,7 +1088,7 @@ Another example: >
|
|||||||
:au CmdwinEnter [/?] startinsert
|
:au CmdwinEnter [/?] startinsert
|
||||||
This will make Vim start in Insert mode in the command-line window.
|
This will make Vim start in Insert mode in the command-line window.
|
||||||
|
|
||||||
*cmdwin-char*
|
*cmdline-char* *cmdwin-char*
|
||||||
The character used for the pattern indicates the type of command-line:
|
The character used for the pattern indicates the type of command-line:
|
||||||
: normal Ex command
|
: normal Ex command
|
||||||
> debug mode command |debug-mode|
|
> debug mode command |debug-mode|
|
||||||
|
@@ -12,16 +12,16 @@ updated.
|
|||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
|
|
||||||
Normal commands ~
|
|
||||||
*]f*
|
|
||||||
*[f* Same as "gf".
|
|
||||||
|
|
||||||
Commands ~
|
Commands ~
|
||||||
*:rv*
|
*:rv*
|
||||||
*:rviminfo* Deprecated alias to |:rshada| command.
|
*:rviminfo* Deprecated alias to |:rshada| command.
|
||||||
*:wv*
|
*:wv*
|
||||||
*:wviminfo* Deprecated alias to |:wshada| command.
|
*:wviminfo* Deprecated alias to |:wshada| command.
|
||||||
|
|
||||||
|
Environment Variables ~
|
||||||
|
*$NVIM_LISTEN_ADDRESS* Deprecated in favor of |--listen|. If both are given,
|
||||||
|
$NVIM_LISTEN_ADDRESS is ignored.
|
||||||
|
|
||||||
Events ~
|
Events ~
|
||||||
*EncodingChanged* Never fired; 'encoding' is always "utf-8".
|
*EncodingChanged* Never fired; 'encoding' is always "utf-8".
|
||||||
*FileEncoding* Never fired; equivalent to |EncodingChanged|.
|
*FileEncoding* Never fired; equivalent to |EncodingChanged|.
|
||||||
@@ -37,6 +37,8 @@ Functions ~
|
|||||||
*file_readable()* Obsolete name for |filereadable()|.
|
*file_readable()* Obsolete name for |filereadable()|.
|
||||||
*highlight_exists()* Obsolete name for |hlexists()|.
|
*highlight_exists()* Obsolete name for |hlexists()|.
|
||||||
*highlightID()* Obsolete name for |hlID()|.
|
*highlightID()* Obsolete name for |hlID()|.
|
||||||
|
*jobclose()* Obsolete name for |chanclose()|
|
||||||
|
*jobsend()* Obsolete name for |chansend()|
|
||||||
*last_buffer_nr()* Obsolete name for bufnr("$").
|
*last_buffer_nr()* Obsolete name for bufnr("$").
|
||||||
|
|
||||||
Modifiers ~
|
Modifiers ~
|
||||||
@@ -45,11 +47,22 @@ Modifiers ~
|
|||||||
*:map-<special>*
|
*:map-<special>*
|
||||||
*:map-special* <> notation is always enabled. |cpo-<|
|
*:map-special* <> notation is always enabled. |cpo-<|
|
||||||
|
|
||||||
|
Normal commands ~
|
||||||
|
*]f*
|
||||||
|
*[f* Same as "gf".
|
||||||
|
|
||||||
Options ~
|
Options ~
|
||||||
|
*'cscopeverbose'* Enabled by default. Use |:silent| instead.
|
||||||
|
'gd'
|
||||||
|
'gdefault' Enables the |:substitute| flag 'g' by default.
|
||||||
*'fe'* 'fenc'+'enc' before Vim 6.0; no longer used.
|
*'fe'* 'fenc'+'enc' before Vim 6.0; no longer used.
|
||||||
*'highlight'* *'hl'* Names of builtin |highlight-groups| cannot be changed.
|
*'highlight'* *'hl'* Names of builtin |highlight-groups| cannot be changed.
|
||||||
*'langnoremap'* Deprecated alias to 'nolangremap'.
|
*'langnoremap'* Deprecated alias to 'nolangremap'.
|
||||||
*'vi'*
|
*'vi'*
|
||||||
*'viminfo'* Deprecated alias to 'shada' option.
|
*'viminfo'* Deprecated alias to 'shada' option.
|
||||||
|
|
||||||
|
Variables~
|
||||||
|
*b:terminal_job_pid* PID of the top-level process in a |:terminal|.
|
||||||
|
Use `jobpid(&channel)` instead.
|
||||||
|
|
||||||
vim:noet:tw=78:ts=8:ft=help:norl:
|
vim:noet:tw=78:ts=8:ft=help:norl:
|
||||||
|
@@ -203,7 +203,7 @@ DOCUMENTATION *dev-doc*
|
|||||||
|
|
||||||
API *dev-api*
|
API *dev-api*
|
||||||
|
|
||||||
Use this pattern to name new API functions:
|
Use this template to name new API functions:
|
||||||
nvim_{thing}_{action}_{arbitrary-qualifiers}
|
nvim_{thing}_{action}_{arbitrary-qualifiers}
|
||||||
|
|
||||||
If the function acts on an object then {thing} is the name of that object
|
If the function acts on an object then {thing} is the name of that object
|
||||||
@@ -231,6 +231,11 @@ Example: `nvim_list_bufs` operates in a global context (first parameter is
|
|||||||
_not_ a Buffer). The common {action} "list" indicates that it lists all
|
_not_ a Buffer). The common {action} "list" indicates that it lists all
|
||||||
bufs (plural) in the global context.
|
bufs (plural) in the global context.
|
||||||
|
|
||||||
|
Use this template to name new API events:
|
||||||
|
nvim_{thing}_{event}_event
|
||||||
|
|
||||||
|
Example: `nvim_buf_changedtick_event`.
|
||||||
|
|
||||||
|
|
||||||
API-CLIENT *dev-api-client*
|
API-CLIENT *dev-api-client*
|
||||||
|
|
||||||
@@ -267,12 +272,16 @@ Common Features ~
|
|||||||
External UIs are expected to implement these common features:
|
External UIs are expected to implement these common features:
|
||||||
- Cursor style (shape, color) should respond to the 'guicursor' properties
|
- Cursor style (shape, color) should respond to the 'guicursor' properties
|
||||||
delivered with the mode_info_set UI event.
|
delivered with the mode_info_set UI event.
|
||||||
|
- Send the ALT/META ("Option" on macOS) key as a |<M-| chord.
|
||||||
- Send the "super" key (Windows key, Apple key) as a |<D-| chord.
|
- Send the "super" key (Windows key, Apple key) as a |<D-| chord.
|
||||||
|
- Avoid mappings that conflict with Nvim defaults. GUIs have many new chords
|
||||||
|
like <C-,> <C-Enter> <C-S-x> <D-x> and patterns like "shift shift", which
|
||||||
|
don't conflict with typical Nvim mappings.
|
||||||
|
|
||||||
Implementation ~
|
Implementation ~
|
||||||
- Options can be monitored for changes by the |OptionSet| autocmd. E.g. if the
|
- UI-related options ('guifont', 'ambiwidth', …) are published in the
|
||||||
user sets the 'guifont' option, this autocmd notifies channel 42: >
|
"option_set" |ui-global| event. The event is triggered when the UI first
|
||||||
autocmd OptionSet guifont call rpcnotify(42, 'option-changed', 'guifont', &guifont)
|
connects to Nvim and whenever an option is changed by the user or a plugin.
|
||||||
|
|
||||||
|
|
||||||
vim:tw=78:ts=8:ft=help:norl:
|
vim:tw=78:ts=8:ft=help:norl:
|
||||||
|
@@ -165,7 +165,7 @@ loaded. Since Vim doesn't allow having two buffers for the same file, you
|
|||||||
need another buffer. This command is useful: >
|
need another buffer. This command is useful: >
|
||||||
command DiffOrig vert new | set buftype=nofile | read ++edit # | 0d_
|
command DiffOrig vert new | set buftype=nofile | read ++edit # | 0d_
|
||||||
\ | diffthis | wincmd p | diffthis
|
\ | diffthis | wincmd p | diffthis
|
||||||
(this is in |vimrc_example.vim|). Use ":DiffOrig" to see the differences
|
Use ":DiffOrig" to see the differences
|
||||||
between the current buffer and the file it was loaded from.
|
between the current buffer and the file it was loaded from.
|
||||||
|
|
||||||
A buffer that is unloaded cannot be used for the diff. But it does work for
|
A buffer that is unloaded cannot be used for the diff. But it does work for
|
||||||
|
@@ -562,16 +562,16 @@ list of the current window.
|
|||||||
buffer.
|
buffer.
|
||||||
Also see |++opt| and |+cmd|.
|
Also see |++opt| and |+cmd|.
|
||||||
|
|
||||||
:[count]arge[dit][!] [++opt] [+cmd] {name} *:arge* *:argedit*
|
:[count]arge[dit][!] [++opt] [+cmd] {name} .. *:arge* *:argedit*
|
||||||
Add {name} to the argument list and edit it.
|
Add {name}s to the argument list and edit it.
|
||||||
When {name} already exists in the argument list, this
|
When {name} already exists in the argument list, this
|
||||||
entry is edited.
|
entry is edited.
|
||||||
This is like using |:argadd| and then |:edit|.
|
This is like using |:argadd| and then |:edit|.
|
||||||
Note that only one file name is allowed, and spaces
|
Spaces in filenames have to be escaped with "\".
|
||||||
inside the file name are allowed, like with |:edit|.
|
|
||||||
[count] is used like with |:argadd|.
|
[count] is used like with |:argadd|.
|
||||||
[!] is required if the current file cannot be
|
If the current file cannot be |abandon|ed {name}s will
|
||||||
|abandon|ed.
|
still be added to the argument list, but won't be
|
||||||
|
edited. No check for duplicates is done.
|
||||||
Also see |++opt| and |+cmd|.
|
Also see |++opt| and |+cmd|.
|
||||||
|
|
||||||
:[count]arga[dd] {name} .. *:arga* *:argadd* *E479*
|
:[count]arga[dd] {name} .. *:arga* *:argadd* *E479*
|
||||||
|
File diff suppressed because it is too large
Load Diff
@@ -24,10 +24,8 @@ Each time a new or existing file is edited, Vim will try to recognize the type
|
|||||||
of the file and set the 'filetype' option. This will trigger the FileType
|
of the file and set the 'filetype' option. This will trigger the FileType
|
||||||
event, which can be used to set the syntax highlighting, set options, etc.
|
event, which can be used to set the syntax highlighting, set options, etc.
|
||||||
|
|
||||||
Detail: The ":filetype on" command will load one of these files:
|
Detail: The ":filetype on" command will load this file:
|
||||||
Mac $VIMRUNTIME/filetype.vim
|
$VIMRUNTIME/filetype.vim
|
||||||
MS-DOS $VIMRUNTIME\filetype.vim
|
|
||||||
Unix $VIMRUNTIME/filetype.vim
|
|
||||||
This file is a Vim script that defines autocommands for the
|
This file is a Vim script that defines autocommands for the
|
||||||
BufNewFile and BufRead events. If the file type is not found by the
|
BufNewFile and BufRead events. If the file type is not found by the
|
||||||
name, the file $VIMRUNTIME/scripts.vim is used to detect it from the
|
name, the file $VIMRUNTIME/scripts.vim is used to detect it from the
|
||||||
|
@@ -4,42 +4,19 @@
|
|||||||
VIM REFERENCE MANUAL by Andy Kahn
|
VIM REFERENCE MANUAL by Andy Kahn
|
||||||
|
|
||||||
*cscope* *Cscope*
|
*cscope* *Cscope*
|
||||||
This document explains how to use Vim's cscope interface.
|
Cscope is a "code intelligence" tool that helps you navigate C programs. It
|
||||||
|
can also perform some refactoring tasks, such as renaming a global variable in
|
||||||
|
all source files. Think of it as "ctags on steroids".
|
||||||
|
|
||||||
Cscope is a tool like ctags, but think of it as ctags on steroids since it
|
See |cscope-usage| for a quickstart.
|
||||||
does a lot more than what ctags provides. In Vim, jumping to a result from
|
|
||||||
a cscope query is just like jumping to any tag; it is saved on the tag stack
|
|
||||||
so that with the right keyboard mappings, you can jump back and forth between
|
|
||||||
functions as you normally would with |tags|.
|
|
||||||
|
|
||||||
Type |gO| to see the table of contents.
|
Type |gO| to see the table of contents.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
1. Cscope introduction *cscope-intro*
|
Cscope introduction *cscope-intro*
|
||||||
|
|
||||||
The following text is taken from a version of the cscope man page:
|
|
||||||
|
|
||||||
-----
|
Cscope is designed to answer questions like:
|
||||||
|
|
||||||
Cscope is an interactive screen-oriented tool that helps you:
|
|
||||||
|
|
||||||
Learn how a C program works without endless flipping through a thick
|
|
||||||
listing.
|
|
||||||
|
|
||||||
Locate the section of code to change to fix a bug without having to
|
|
||||||
learn the entire program.
|
|
||||||
|
|
||||||
Examine the effect of a proposed change such as adding a value to an
|
|
||||||
enum variable.
|
|
||||||
|
|
||||||
Verify that a change has been made in all source files such as adding
|
|
||||||
an argument to an existing function.
|
|
||||||
|
|
||||||
Rename a global variable in all source files.
|
|
||||||
|
|
||||||
Change a constant to a preprocessor symbol in selected lines of files.
|
|
||||||
|
|
||||||
It is designed to answer questions like:
|
|
||||||
Where is this symbol used?
|
Where is this symbol used?
|
||||||
Where is it defined?
|
Where is it defined?
|
||||||
Where did this variable get its value?
|
Where did this variable get its value?
|
||||||
@@ -51,35 +28,17 @@ The following text is taken from a version of the cscope man page:
|
|||||||
Where is this source file in the directory structure?
|
Where is this source file in the directory structure?
|
||||||
What files include this header file?
|
What files include this header file?
|
||||||
|
|
||||||
Cscope answers these questions from a symbol database that it builds the
|
Cscope answers these questions from a symbol database that it builds the first
|
||||||
first time it is used on the source files. On a subsequent call, cscope
|
time it is used on the source files. On a subsequent call, cscope rebuilds
|
||||||
rebuilds the database only if a source file has changed or the list of
|
the database only if a source file has changed or the list of source files is
|
||||||
source files is different. When the database is rebuilt the data for the
|
different. When the database is rebuilt the data for the unchanged files is
|
||||||
unchanged files is copied from the old database, which makes rebuilding
|
copied from the old database, which makes rebuilding much faster than the
|
||||||
much faster than the initial build.
|
initial build.
|
||||||
|
|
||||||
-----
|
|
||||||
|
|
||||||
When cscope is normally invoked, you will get a full-screen selection
|
|
||||||
screen allowing you to make a query for one of the above questions.
|
|
||||||
However, once a match is found to your query and you have entered your
|
|
||||||
text editor to edit the source file containing match, you cannot simply
|
|
||||||
jump from tag to tag as you normally would with vi's Ctrl-] or :tag
|
|
||||||
command.
|
|
||||||
|
|
||||||
Vim's cscope interface is done by invoking cscope with its line-oriented
|
|
||||||
interface, and then parsing the output returned from a query. The end
|
|
||||||
result is that cscope query results become just like regular tags, so
|
|
||||||
you can jump to them just like you do with normal tags (Ctrl-] or :tag)
|
|
||||||
and then go back by popping off the tagstack with Ctrl-T. (Please note
|
|
||||||
however, that you don't actually jump to a cscope tag simply by doing
|
|
||||||
Ctrl-] or :tag without remapping these commands or setting an option.
|
|
||||||
See the remaining sections on how the cscope interface works and for
|
|
||||||
suggested use.)
|
|
||||||
|
|
||||||
|
See |cscope-usage| to get started.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
2. Cscope related commands *cscope-commands*
|
Cscope commands *cscope-commands*
|
||||||
|
|
||||||
*:cscope* *:cs* *:scs* *:scscope* *E259* *E262* *E561* *E560*
|
*:cscope* *:cs* *:scs* *:scscope* *E259* *E262* *E561* *E560*
|
||||||
All cscope commands are accessed through suboptions to the cscope commands.
|
All cscope commands are accessed through suboptions to the cscope commands.
|
||||||
@@ -232,7 +191,7 @@ through your tags file(s).
|
|||||||
|
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
3. Cscope options *cscope-options*
|
Cscope options *cscope-options*
|
||||||
|
|
||||||
Use the |:set| command to set all cscope options. Ideally, you would do
|
Use the |:set| command to set all cscope options. Ideally, you would do
|
||||||
this in one of your startup files (e.g., vimrc). Some cscope related
|
this in one of your startup files (e.g., vimrc). Some cscope related
|
||||||
@@ -245,7 +204,6 @@ started will have no effect!
|
|||||||
:set csprg=/usr/local/bin/cscope
|
:set csprg=/usr/local/bin/cscope
|
||||||
<
|
<
|
||||||
*cscopequickfix* *csqf* *E469*
|
*cscopequickfix* *csqf* *E469*
|
||||||
{not available when compiled without the |+quickfix| feature}
|
|
||||||
'cscopequickfix' specifies whether to use quickfix window to show cscope
|
'cscopequickfix' specifies whether to use quickfix window to show cscope
|
||||||
results. This is a list of comma-separated values. Each item consists of
|
results. This is a list of comma-separated values. Each item consists of
|
||||||
|cscope-find| command (s, g, d, c, t, e, f, i or a) and flag (+, - or 0).
|
|cscope-find| command (s, g, d, c, t, e, f, i or a) and flag (+, - or 0).
|
||||||
@@ -260,81 +218,56 @@ seems to be useful: >
|
|||||||
If 'cscopetag' is set, the commands ":tag" and CTRL-] as well as "vim -t"
|
If 'cscopetag' is set, the commands ":tag" and CTRL-] as well as "vim -t"
|
||||||
will always use |:cstag| instead of the default :tag behavior. Effectively,
|
will always use |:cstag| instead of the default :tag behavior. Effectively,
|
||||||
by setting 'cst', you will always search your cscope databases as well as
|
by setting 'cst', you will always search your cscope databases as well as
|
||||||
your tag files. The default is off. Examples: >
|
your tag files. The default is off.
|
||||||
:set cst
|
|
||||||
:set nocst
|
|
||||||
<
|
|
||||||
*cscoperelative* *csre*
|
*cscoperelative* *csre*
|
||||||
If 'cscoperelative' is set, then in absence of a prefix given to cscope
|
If 'cscoperelative' is set, then in absence of a prefix given to cscope
|
||||||
(prefix is the argument of -P option of cscope), basename of cscope.out
|
(prefix is the argument of -P option of cscope), basename of cscope.out
|
||||||
location (usually the project root directory) will be used as the prefix
|
location (usually the project root directory) will be used as the prefix
|
||||||
to construct an absolute path. The default is off. Note: This option is
|
to construct an absolute path. The default is off. Note: This option is
|
||||||
only effective when cscope (cscopeprg) is initialized without a prefix
|
only effective when cscope (cscopeprg) is initialized without a prefix
|
||||||
path (-P). Examples: >
|
path (-P).
|
||||||
:set csre
|
|
||||||
:set nocsre
|
|
||||||
<
|
|
||||||
*cscopetagorder* *csto*
|
*cscopetagorder* *csto*
|
||||||
The value of 'csto' determines the order in which |:cstag| performs a search.
|
The value of 'csto' determines the order in which |:cstag| performs a search.
|
||||||
If 'csto' is set to zero, cscope database(s) are searched first, followed
|
If 'csto' is set to zero, cscope database(s) are searched first, followed
|
||||||
by tag file(s) if cscope did not return any matches. If 'csto' is set to
|
by tag file(s) if cscope did not return any matches. If 'csto' is set to
|
||||||
one, tag file(s) are searched before cscope database(s). The default is zero.
|
one, tag file(s) are searched before cscope database(s). The default is zero.
|
||||||
Examples: >
|
|
||||||
:set csto=0
|
|
||||||
:set csto=1
|
|
||||||
<
|
|
||||||
*cscopeverbose* *csverb*
|
|
||||||
If 'cscopeverbose' is not set (the default), messages will not be printed
|
|
||||||
indicating success or failure when adding a cscope database. Ideally, you
|
|
||||||
should reset this option in your |init.vim| before adding any cscope
|
|
||||||
databases, and after adding them, set it. From then on, when you add more
|
|
||||||
databases within Vim, you will get a (hopefully) useful message should the
|
|
||||||
database fail to be added. Examples: >
|
|
||||||
:set csverb
|
|
||||||
:set nocsverb
|
|
||||||
<
|
|
||||||
*cscopepathcomp* *cspc*
|
*cscopepathcomp* *cspc*
|
||||||
The value of 'cspc' determines how many components of a file's path to
|
'cscopepathcomp' determines how many components of a file's path to display.
|
||||||
display. With the default value of zero the entire path will be displayed.
|
With the default value of zero the entire path will be displayed.
|
||||||
The value one will display only the filename with no path. Other values
|
The value one will display only the filename with no path. Other values
|
||||||
display that many components. For example: >
|
display that many components. For example: >
|
||||||
:set cspc=3
|
:set cscopepathcomp=3
|
||||||
will display the last 3 components of the file's path, including the file
|
will display the last 3 components of the file's path, including the file
|
||||||
name itself.
|
name itself.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
4. How to use cscope in Vim *cscope-howtouse*
|
Using cscope in Nvim *cscope-usage* *cscope-howtouse*
|
||||||
|
|
||||||
The first thing you need to do is to build a cscope database for your
|
To get started, build the cscope database in your project root directory: >
|
||||||
source files. For the most basic case, simply do "cscope -b". Please
|
cscope -bcqR
|
||||||
refer to the cscope man page for more details.
|
|
||||||
|
|
||||||
Assuming you have a cscope database, you need to "add" the database to Vim.
|
See the cscope manpage for details: >
|
||||||
This establishes a cscope "connection" and makes it available for Vim to use.
|
:Man cscope
|
||||||
You can do this in your vimrc file, or you can do it manually after starting
|
|
||||||
vim. For example, to add the cscope database "cscope.out", you would do:
|
|
||||||
|
|
||||||
:cs add cscope.out
|
By default the cscope database file is named "cscope.out". After building the
|
||||||
|
database, connect to it from Nvim: >
|
||||||
|
:cscope add cscope.out
|
||||||
|
|
||||||
You can double-check the result of this by executing ":cs show". This will
|
That establishes a cscope connection for Nvim to use. You can check the
|
||||||
produce output which looks like this:
|
result with ":cs show". It will show something like:
|
||||||
|
|
||||||
# pid database name prepend path
|
# pid database name prepend path
|
||||||
0 28806 cscope.out <none>
|
0 28806 cscope.out <none>
|
||||||
|
|
||||||
Note:
|
|
||||||
Because of the Microsoft RTL limitations, Win32 version shows 0 instead
|
|
||||||
of the real pid.
|
|
||||||
|
|
||||||
Once a cscope connection is established, you can make queries to cscope and
|
Once a cscope connection is established, you can make queries to cscope and
|
||||||
the results will be printed to you. Queries are made using the command
|
the results will be printed. Queries are made using the command ":cs find".
|
||||||
":cs find". For example:
|
For example: >
|
||||||
|
|
||||||
:cs find g ALIGN_SIZE
|
:cs find g ALIGN_SIZE
|
||||||
|
|
||||||
This can get a little cumbersome since one ends up doing a significant
|
To make this easier you can configure mappings, see |cscope-suggestions|.
|
||||||
amount of typing. Fortunately, there are ways around this by mapping
|
|
||||||
shortcut keys. See |cscope-suggestions| for suggested usage.
|
|
||||||
|
|
||||||
If the results return only one match, you will automatically be taken to it.
|
If the results return only one match, you will automatically be taken to it.
|
||||||
If there is more than one match, you will be given a selection screen to pick
|
If there is more than one match, you will be given a selection screen to pick
|
||||||
@@ -343,39 +276,28 @@ simply hit Ctrl-T to get back to the previous one.
|
|||||||
|
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
5. Limitations *cscope-limitations*
|
Limitations *cscope-limitations*
|
||||||
|
|
||||||
Cscope support for Vim is only available on systems that support these four
|
|
||||||
system calls: fork(), pipe(), execl(), waitpid(). This means it is mostly
|
|
||||||
limited to Unix systems.
|
|
||||||
|
|
||||||
Additionally Cscope support works for Win32. For more information and a
|
|
||||||
cscope version for Win32 see:
|
|
||||||
|
|
||||||
http://iamphet.nm.ru/cscope/index.html
|
|
||||||
|
|
||||||
Hard-coded limitation: doing a |:tjump| when |:cstag| searches the tag files
|
Hard-coded limitation: doing a |:tjump| when |:cstag| searches the tag files
|
||||||
is not configurable (e.g., you can't do a tselect instead).
|
is not configurable (e.g., you can't do a tselect instead).
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
6. Suggested usage *cscope-suggestions*
|
|
||||||
|
|
||||||
Put these entries in your vimrc (adjust the pathname accordingly to your
|
==============================================================================
|
||||||
setup): >
|
Sample config *cscope-suggestions*
|
||||||
|
|
||||||
|
Copy this into your init.vim (adjust paths for your system): >
|
||||||
|
|
||||||
if has("cscope")
|
if has("cscope")
|
||||||
set csprg=/usr/local/bin/cscope
|
set csprg=/usr/local/bin/cscope
|
||||||
set csto=0
|
set csto=0
|
||||||
set cst
|
set cst
|
||||||
set nocsverb
|
|
||||||
" add any database in current directory
|
" add any database in current directory
|
||||||
if filereadable("cscope.out")
|
if filereadable("cscope.out")
|
||||||
cs add cscope.out
|
silent cs add cscope.out
|
||||||
" else add database pointed to by environment
|
" else add database pointed to by environment
|
||||||
elseif $CSCOPE_DB != ""
|
elseif $CSCOPE_DB != ""
|
||||||
cs add $CSCOPE_DB
|
silent cs add $CSCOPE_DB
|
||||||
endif
|
endif
|
||||||
set csverb
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
By setting 'cscopetag', we have effectively replaced all instances of the :tag
|
By setting 'cscopetag', we have effectively replaced all instances of the :tag
|
||||||
@@ -447,47 +369,6 @@ Cscope Home Page (http://cscope.sourceforge.net/): >
|
|||||||
\:vert scs find d <C-R>=expand("<cword>")<CR><CR>
|
\:vert scs find d <C-R>=expand("<cword>")<CR><CR>
|
||||||
nmap <C-Space><C-Space>a
|
nmap <C-Space><C-Space>a
|
||||||
\:vert scs find a <C-R>=expand("<cword>")<CR><CR>
|
\:vert scs find a <C-R>=expand("<cword>")<CR><CR>
|
||||||
|
<
|
||||||
==============================================================================
|
|
||||||
7. Cscope availability and information *cscope-info*
|
|
||||||
|
|
||||||
If you do not already have cscope (it did not come with your compiler
|
|
||||||
license or OS distribution), then you can download it for free from:
|
|
||||||
http://cscope.sourceforge.net/
|
|
||||||
This is released by SCO under the BSD license.
|
|
||||||
|
|
||||||
If you want a newer version of cscope, you will probably have to buy it.
|
|
||||||
According to the (old) nvi documentation:
|
|
||||||
|
|
||||||
You can buy version 13.3 source with an unrestricted license
|
|
||||||
for $400 from AT&T Software Solutions by calling +1-800-462-8146.
|
|
||||||
|
|
||||||
Also you can download cscope 13.x and mlcscope 14.x (multi-lingual cscope
|
|
||||||
which supports C, C++, Java, lex, yacc, breakpoint listing, Ingres, and SDL)
|
|
||||||
from World-Wide Exptools Open Source packages page:
|
|
||||||
http://www.bell-labs.com/project/wwexptools/packages.html
|
|
||||||
|
|
||||||
In Solaris 2.x, if you have the C compiler license, you will also have
|
|
||||||
cscope. Both are usually located under /opt/SUNWspro/bin
|
|
||||||
|
|
||||||
SGI developers can also get it. Search for Cscope on this page:
|
|
||||||
http://freeware.sgi.com/index-by-alpha.html
|
|
||||||
https://toolbox.sgi.com/toolbox/utilities/cscope/
|
|
||||||
The second one is for those who have a password for the SGI toolbox.
|
|
||||||
|
|
||||||
There is source to an older version of a cscope clone (called "cs") available
|
|
||||||
on the net. Due to various reasons, this is not supported with Vim.
|
|
||||||
|
|
||||||
The cscope interface/support for Vim was originally written by
|
|
||||||
Andy Kahn <ackahn@netapp.com>. The original structure (as well as a tiny
|
|
||||||
bit of code) was adapted from the cscope interface in nvi. Please report
|
|
||||||
any problems, suggestions, patches, et al., you have for the usage of
|
|
||||||
cscope within Vim to him.
|
|
||||||
*cscope-win32*
|
|
||||||
For a cscope version for Win32 see:
|
|
||||||
http://code.google.com/p/cscope-win32/
|
|
||||||
|
|
||||||
Win32 support was added by Sergey Khorev <sergey.khorev@gmail.com>. Contact
|
|
||||||
him if you have Win32-specific issues.
|
|
||||||
|
|
||||||
vim:tw=78:ts=8:ft=help:norl:
|
vim:tw=78:ts=8:ft=help:norl:
|
||||||
|
@@ -320,6 +320,21 @@ The examples below assume a 'shiftwidth' of 4.
|
|||||||
{ {
|
{ {
|
||||||
void function(); void function();
|
void function(); void function();
|
||||||
} }
|
} }
|
||||||
|
<
|
||||||
|
*cino-E*
|
||||||
|
EN Indent inside C++ linkage specifications (extern "C" or
|
||||||
|
extern "C++") N characters extra compared to a normal block.
|
||||||
|
(default 0).
|
||||||
|
|
||||||
|
cino= cino=E-s >
|
||||||
|
extern "C" { extern "C" {
|
||||||
|
void function(); void function();
|
||||||
|
} }
|
||||||
|
|
||||||
|
extern "C" extern "C"
|
||||||
|
{ {
|
||||||
|
void function(); void function();
|
||||||
|
} }
|
||||||
<
|
<
|
||||||
*cino-p*
|
*cino-p*
|
||||||
pN Parameter declarations for K&R-style function declarations will
|
pN Parameter declarations for K&R-style function declarations will
|
||||||
@@ -550,7 +565,7 @@ The examples below assume a 'shiftwidth' of 4.
|
|||||||
|
|
||||||
|
|
||||||
The defaults, spelled out in full, are:
|
The defaults, spelled out in full, are:
|
||||||
cinoptions=>s,e0,n0,f0,{0,}0,^0,L-1,:s,=s,l0,b0,gs,hs,N0,ps,ts,is,+s,
|
cinoptions=>s,e0,n0,f0,{0,}0,^0,L-1,:s,=s,l0,b0,gs,hs,N0,E0,ps,ts,is,+s,
|
||||||
c3,C0,/0,(2s,us,U0,w0,W0,k0,m0,j0,J0,)20,*70,#0
|
c3,C0,/0,(2s,us,U0,w0,W0,k0,m0,j0,J0,)20,*70,#0
|
||||||
|
|
||||||
Vim puts a line in column 1 if:
|
Vim puts a line in column 1 if:
|
||||||
|
@@ -40,10 +40,11 @@ char action ~
|
|||||||
*i_CTRL-[* *i_<Esc>*
|
*i_CTRL-[* *i_<Esc>*
|
||||||
<Esc> or CTRL-[ End insert or Replace mode, go back to Normal mode. Finish
|
<Esc> or CTRL-[ End insert or Replace mode, go back to Normal mode. Finish
|
||||||
abbreviation.
|
abbreviation.
|
||||||
Note: If your <Esc> key is hard to hit on your keyboard, train
|
Note: If your <Esc> key is hard to hit, try CTRL-[ instead.
|
||||||
yourself to use CTRL-[.
|
*i_META* *i_ALT*
|
||||||
If Esc doesn't work and you are using a Mac, try CTRL-Esc.
|
ALT (|META|) acts like <Esc> if the chord is not mapped.
|
||||||
Or disable Listening under Accessibility preferences.
|
For example <A-x> acts like <Esc>x if <A-x> does not have an
|
||||||
|
insert-mode mapping.
|
||||||
*i_CTRL-C*
|
*i_CTRL-C*
|
||||||
CTRL-C Quit insert mode, go back to Normal mode. Do not check for
|
CTRL-C Quit insert mode, go back to Normal mode. Do not check for
|
||||||
abbreviations. Does not trigger the |InsertLeave| autocommand
|
abbreviations. Does not trigger the |InsertLeave| autocommand
|
||||||
@@ -1077,6 +1078,8 @@ items:
|
|||||||
item with the same word is already present.
|
item with the same word is already present.
|
||||||
empty when non-zero this match will be added even when it is
|
empty when non-zero this match will be added even when it is
|
||||||
an empty string
|
an empty string
|
||||||
|
user_data custom data which is associated with the item and
|
||||||
|
available in |v:completed_item|
|
||||||
|
|
||||||
All of these except "icase", "dup" and "empty" must be a string. If an item
|
All of these except "icase", "dup" and "empty" must be a string. If an item
|
||||||
does not meet these requirements then an error message is given and further
|
does not meet these requirements then an error message is given and further
|
||||||
@@ -1170,6 +1173,8 @@ The menu is used when:
|
|||||||
|
|
||||||
The 'pumheight' option can be used to set a maximum height. The default is to
|
The 'pumheight' option can be used to set a maximum height. The default is to
|
||||||
use all space available.
|
use all space available.
|
||||||
|
The 'pumwidth' option can be used to set a minimum width. The default is 15
|
||||||
|
characters.
|
||||||
|
|
||||||
There are three states:
|
There are three states:
|
||||||
1. A complete match has been inserted, e.g., after using CTRL-N or CTRL-P.
|
1. A complete match has been inserted, e.g., after using CTRL-N or CTRL-P.
|
||||||
|
@@ -655,9 +655,6 @@ Q Switch to "Ex" mode. This is a bit like typing ":"
|
|||||||
Vim will enter this mode by default if it's invoked as
|
Vim will enter this mode by default if it's invoked as
|
||||||
"ex" on the command-line.
|
"ex" on the command-line.
|
||||||
Use the ":vi" command |:visual| to exit "Ex" mode.
|
Use the ":vi" command |:visual| to exit "Ex" mode.
|
||||||
Note: In older versions of Vim "Q" formatted text,
|
|
||||||
that is now done with |gq|. But if you use the
|
|
||||||
|vimrc_example.vim| script "Q" works like "gq".
|
|
||||||
|
|
||||||
*gQ*
|
*gQ*
|
||||||
gQ Switch to "Ex" mode like with "Q", but really behave
|
gQ Switch to "Ex" mode like with "Q", but really behave
|
||||||
|
@@ -20,6 +20,8 @@ When a job starts it is assigned a number, unique for the life of the current
|
|||||||
Nvim session. Functions like |jobstart()| return job ids. Functions like
|
Nvim session. Functions like |jobstart()| return job ids. Functions like
|
||||||
|jobsend()|, |jobstop()|, |rpcnotify()|, and |rpcrequest()| take job ids.
|
|jobsend()|, |jobstop()|, |rpcnotify()|, and |rpcrequest()| take job ids.
|
||||||
|
|
||||||
|
The job's stdio streams are represented as a |channel|. It is possible to send
|
||||||
|
and recieve raw bytes, or use |msgpack-rpc|.
|
||||||
==============================================================================
|
==============================================================================
|
||||||
Usage *job-control-usage*
|
Usage *job-control-usage*
|
||||||
|
|
||||||
@@ -28,7 +30,7 @@ To control jobs, use the "job…" family of functions: |jobstart()|,
|
|||||||
|
|
||||||
Example: >
|
Example: >
|
||||||
|
|
||||||
function! s:JobHandler(job_id, data, event) dict
|
function! s:OnEvent(job_id, data, event) dict
|
||||||
if a:event == 'stdout'
|
if a:event == 'stdout'
|
||||||
let str = self.shell.' stdout: '.join(a:data)
|
let str = self.shell.' stdout: '.join(a:data)
|
||||||
elseif a:event == 'stderr'
|
elseif a:event == 'stderr'
|
||||||
@@ -40,9 +42,9 @@ Example: >
|
|||||||
call append(line('$'), str)
|
call append(line('$'), str)
|
||||||
endfunction
|
endfunction
|
||||||
let s:callbacks = {
|
let s:callbacks = {
|
||||||
\ 'on_stdout': function('s:JobHandler'),
|
\ 'on_stdout': function('s:OnEvent'),
|
||||||
\ 'on_stderr': function('s:JobHandler'),
|
\ 'on_stderr': function('s:OnEvent'),
|
||||||
\ 'on_exit': function('s:JobHandler')
|
\ 'on_exit': function('s:OnEvent')
|
||||||
\ }
|
\ }
|
||||||
let job1 = jobstart(['bash'], extend({'shell': 'shell 1'}, s:callbacks))
|
let job1 = jobstart(['bash'], extend({'shell': 'shell 1'}, s:callbacks))
|
||||||
let job2 = jobstart(['bash', '-c', 'for i in {1..10}; do echo hello $i!; sleep 1; done'], extend({'shell': 'shell 2'}, s:callbacks))
|
let job2 = jobstart(['bash', '-c', 'for i in {1..10}; do echo hello $i!; sleep 1; done'], extend({'shell': 'shell 2'}, s:callbacks))
|
||||||
@@ -56,29 +58,17 @@ Description of what happens:
|
|||||||
- The first shell is idle, waiting to read commands from its stdin.
|
- The first shell is idle, waiting to read commands from its stdin.
|
||||||
- The second shell is started with -c which executes the command (a for-loop
|
- The second shell is started with -c which executes the command (a for-loop
|
||||||
printing 0 through 9) and then exits.
|
printing 0 through 9) and then exits.
|
||||||
- `JobHandler()` callback is passed to |jobstart()| to handle various job
|
- `OnEvent()` callback is passed to |jobstart()| to handle various job
|
||||||
events. It displays stdout/stderr data received from the shells.
|
events. It displays stdout/stderr data received from the shells.
|
||||||
|
|
||||||
*on_stdout*
|
For |on_stdout| and |on_stderr| see |channel-callback|.
|
||||||
Arguments passed to on_stdout callback:
|
|
||||||
0: |job-id|
|
|
||||||
1: List of lines read from the stream. If the last item is not "" (empty
|
|
||||||
string), then it is an incomplete line that might be continued at the
|
|
||||||
next on_stdout invocation. See Note 2 below.
|
|
||||||
2: Event type: "stdout"
|
|
||||||
*on_stderr*
|
|
||||||
Arguments passed to on_stderr callback:
|
|
||||||
0: |job-id|
|
|
||||||
1: List of lines read from the stream. If the last item is not "" (empty
|
|
||||||
string), then it is an incomplete line that might be continued at the
|
|
||||||
next on_stderr invocation. See Note 2 below.
|
|
||||||
2: Event type: "stderr"
|
|
||||||
*on_exit*
|
*on_exit*
|
||||||
Arguments passed to on_exit callback:
|
Arguments passed to on_exit callback:
|
||||||
0: |job-id|
|
0: |job-id|
|
||||||
1: Exit-code of the process.
|
1: Exit-code of the process.
|
||||||
2: Event type: "exit"
|
2: Event type: "exit"
|
||||||
|
|
||||||
|
|
||||||
Note: Buffered stdout/stderr data which has not been flushed by the sender
|
Note: Buffered stdout/stderr data which has not been flushed by the sender
|
||||||
will not trigger the on_stdout/on_stderr callback (but if the process
|
will not trigger the on_stdout/on_stderr callback (but if the process
|
||||||
ends, the on_exit callback will be invoked).
|
ends, the on_exit callback will be invoked).
|
||||||
@@ -137,13 +127,19 @@ The above example could be written in this "object-oriented" style: >
|
|||||||
let instance = Shell.new('bomb',
|
let instance = Shell.new('bomb',
|
||||||
\ 'for i in $(seq 9 -1 1); do echo $i 1>&$((i % 2 + 1)); sleep 1; done')
|
\ 'for i in $(seq 9 -1 1); do echo $i 1>&$((i % 2 + 1)); sleep 1; done')
|
||||||
<
|
<
|
||||||
To send data to the job's stdin, use |jobsend()|: >
|
To send data to the job's stdin, use |chansend()|: >
|
||||||
:call jobsend(job1, "ls\n")
|
:call chansend(job1, "ls\n")
|
||||||
:call jobsend(job1, "invalid-command\n")
|
:call chansend(job1, "invalid-command\n")
|
||||||
:call jobsend(job1, "exit\n")
|
:call chansend(job1, "exit\n")
|
||||||
<
|
<
|
||||||
A job may be killed with |jobstop()|: >
|
A job may be killed with |jobstop()|: >
|
||||||
:call jobstop(job1)
|
:call jobstop(job1)
|
||||||
<
|
<
|
||||||
|
A job may be killed at any time with the |jobstop()| function:
|
||||||
|
>
|
||||||
|
:call jobstop(job1)
|
||||||
|
<
|
||||||
|
Individual streams can be closed without killing the job, see |chanclose()|.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
vim:tw=78:ts=8:noet:ft=help:norl:
|
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||||
|
@@ -232,8 +232,9 @@ For this reason the following is blocked:
|
|||||||
- Editing another buffer.
|
- Editing another buffer.
|
||||||
- The |:normal| command.
|
- The |:normal| command.
|
||||||
- Moving the cursor is allowed, but it is restored afterwards.
|
- Moving the cursor is allowed, but it is restored afterwards.
|
||||||
|
- If the cmdline is changed, the old text and cursor position are restored.
|
||||||
If you want the mapping to do any of these let the returned characters do
|
If you want the mapping to do any of these let the returned characters do
|
||||||
that.
|
that. Or use a |<Cmd>| mapping (which doesn't have these restrictions).
|
||||||
|
|
||||||
You can use getchar(), it consumes typeahead if there is any. E.g., if you
|
You can use getchar(), it consumes typeahead if there is any. E.g., if you
|
||||||
have these mappings: >
|
have these mappings: >
|
||||||
@@ -272,6 +273,30 @@ again for using <expr>. This does work: >
|
|||||||
Using 0x80 as a single byte before other text does not work, it will be seen
|
Using 0x80 as a single byte before other text does not work, it will be seen
|
||||||
as a special key.
|
as a special key.
|
||||||
|
|
||||||
|
*<Cmd>* *:map-cmd*
|
||||||
|
The <Cmd> pseudokey may be used to define a "command mapping", which executes
|
||||||
|
the command directly (without changing modes, etc.). Where you might use
|
||||||
|
":...<CR>" in the {lhs} of a mapping, you can instead use "<Cmd>...<CR>".
|
||||||
|
Example: >
|
||||||
|
noremap x <Cmd>echo mode(1)<cr>
|
||||||
|
<
|
||||||
|
This is more flexible than `:<C-U>` in visual and operator-pending mode, or
|
||||||
|
`<C-O>:` in insert-mode, because the commands are executed directly in the
|
||||||
|
current mode (instead of always going to normal-mode). Visual-mode is
|
||||||
|
preserved, so tricks with |gv| are not needed. Commands can be invoked
|
||||||
|
directly in cmdline-mode (which otherwise would require timer hacks).
|
||||||
|
|
||||||
|
Unlike <expr> mappings, there are no special restrictions on the <Cmd>
|
||||||
|
command: it is executed as if an (unrestricted) |autocmd| was invoked or an
|
||||||
|
async event event was processed.
|
||||||
|
|
||||||
|
In select-mode, |:map| and |:vmap| command mappings are executed in
|
||||||
|
visual-mode. Use |:smap| to handle select-mode.
|
||||||
|
|
||||||
|
*E5520*
|
||||||
|
<Cmd> commands must terminate, that is, they must be followed by <CR> in the
|
||||||
|
{lhs} of the mapping definition. |Command-line| mode is never entered.
|
||||||
|
|
||||||
|
|
||||||
1.3 MAPPING AND MODES *:map-modes*
|
1.3 MAPPING AND MODES *:map-modes*
|
||||||
*mapmode-nvo* *mapmode-n* *mapmode-v* *mapmode-o* *mapmode-t*
|
*mapmode-nvo* *mapmode-n* *mapmode-v* *mapmode-o* *mapmode-t*
|
||||||
@@ -386,7 +411,8 @@ state for Insert mode is also used when typing a character as an argument to
|
|||||||
command like "f" or "t".
|
command like "f" or "t".
|
||||||
Language mappings will never be applied to already mapped characters. They
|
Language mappings will never be applied to already mapped characters. They
|
||||||
are only used for typed characters. This assumes that the language mapping
|
are only used for typed characters. This assumes that the language mapping
|
||||||
was already done when typing the mapping.
|
was already done when typing the mapping. Correspondingly, language mappings
|
||||||
|
are applied when recording macros, rather than when applying them.
|
||||||
|
|
||||||
|
|
||||||
1.4 LISTING MAPPINGS *map-listing*
|
1.4 LISTING MAPPINGS *map-listing*
|
||||||
|
@@ -834,7 +834,7 @@ keyboards and encodings.
|
|||||||
The actual mappings are in the lines below "loadkeymap". In the example "a"
|
The actual mappings are in the lines below "loadkeymap". In the example "a"
|
||||||
is mapped to "A" and "b" to "B". Thus the first item is mapped to the second
|
is mapped to "A" and "b" to "B". Thus the first item is mapped to the second
|
||||||
item. This is done for each line, until the end of the file.
|
item. This is done for each line, until the end of the file.
|
||||||
These items are exactly the same as what can be used in a |:lnoremap| command,
|
These items are exactly the same as what can be used in a |:lmap| command,
|
||||||
using "<buffer>" to make the mappings local to the buffer.
|
using "<buffer>" to make the mappings local to the buffer.
|
||||||
You can check the result with this command: >
|
You can check the result with this command: >
|
||||||
:lmap
|
:lmap
|
||||||
@@ -849,8 +849,9 @@ Since Vim doesn't know if the next character after a quote is really an "a",
|
|||||||
it will wait for the next character. To be able to insert a single quote,
|
it will wait for the next character. To be able to insert a single quote,
|
||||||
also add this line: >
|
also add this line: >
|
||||||
'' '
|
'' '
|
||||||
Since the mapping is defined with |:lnoremap| the resulting quote will not be
|
Since the mapping is defined with |:lmap| the resulting quote will not be
|
||||||
used for the start of another character.
|
used for the start of another character defined in the 'keymap'.
|
||||||
|
It can be used in a standard |:imap| mapping.
|
||||||
The "accents" keymap uses this. *keymap-accents*
|
The "accents" keymap uses this. *keymap-accents*
|
||||||
|
|
||||||
The first column can also be in |<>| form:
|
The first column can also be in |<>| form:
|
||||||
|
@@ -761,9 +761,8 @@ g'{mark} g`{mark}
|
|||||||
Jump to the {mark}, but don't change the jumplist when
|
Jump to the {mark}, but don't change the jumplist when
|
||||||
jumping within the current buffer. Example: >
|
jumping within the current buffer. Example: >
|
||||||
g`"
|
g`"
|
||||||
< jumps to the last known position in a file. See
|
< jumps to the last known position in a file.
|
||||||
$VIMRUNTIME/vimrc_example.vim.
|
See also |:keepjumps|.
|
||||||
Also see |:keepjumps|.
|
|
||||||
|
|
||||||
*:marks*
|
*:marks*
|
||||||
:marks List all the current marks (not a motion command).
|
:marks List all the current marks (not a motion command).
|
||||||
|
@@ -1,4 +1,3 @@
|
|||||||
*msgpack_rpc.txt* Nvim
|
|
||||||
|
|
||||||
|
|
||||||
NVIM REFERENCE MANUAL by Thiago de Arruda
|
NVIM REFERENCE MANUAL by Thiago de Arruda
|
||||||
@@ -61,24 +60,23 @@ To get a formatted dump of the API using python (requires the `pyyaml` and
|
|||||||
==============================================================================
|
==============================================================================
|
||||||
3. Connecting *rpc-connecting*
|
3. Connecting *rpc-connecting*
|
||||||
|
|
||||||
There are several ways to open a msgpack-rpc channel to an Nvim instance:
|
See |channel-intro|, for various ways to open a channel. Most of the channel
|
||||||
|
opening functions take an `rpc` key in the options dictionary, to enable rpc.
|
||||||
|
|
||||||
1. Through stdin/stdout when `nvim` is started with `--embed`. This is how
|
Additionally, rpc channels can be opened by other processes connecting to
|
||||||
applications can embed Nvim.
|
TCP/IP sockets or named pipes listened to by nvim.
|
||||||
|
|
||||||
2. Through stdin/stdout of some other process spawned by |jobstart()|.
|
An rpc socket is automatically created with each instance. The socket
|
||||||
Set the "rpc" key to |v:true| in the options dict to use the job's stdin
|
location is stored in |v:servername|. By default this is a named pipe
|
||||||
and stdout as a single msgpack channel that is processed directly by
|
with an automatically generated address. See |XXX|.
|
||||||
Nvim. Then it is not possible to process raw data to or from the
|
|
||||||
process's stdin and stdout. stderr can still be used, though.
|
|
||||||
|
|
||||||
3. Through the socket automatically created with each instance. The socket
|
To make Nvim listen on a TCP/IP socket instead, specify |--listen|: >
|
||||||
location is stored in |v:servername|.
|
nvim --listen 127.0.0.1:6666
|
||||||
|
<Also, more sockets and named pipes can be listened on using |serverstart()|.
|
||||||
|
|
||||||
|
Note that localhost TCP sockets are generally less secure than named pipes,
|
||||||
|
and can lead to vunerabilities like remote code execution.
|
||||||
|
|
||||||
4. Through a TCP/IP socket. To make Nvim listen on a TCP/IP socket, set the
|
|
||||||
|$NVIM_LISTEN_ADDRESS| environment variable before starting Nvim: >
|
|
||||||
NVIM_LISTEN_ADDRESS=127.0.0.1:6666 nvim
|
|
||||||
<
|
|
||||||
Connecting to the socket is the easiest way a programmer can test the API,
|
Connecting to the socket is the easiest way a programmer can test the API,
|
||||||
which can be done through any msgpack-rpc client library or full-featured
|
which can be done through any msgpack-rpc client library or full-featured
|
||||||
|api-client|. Here's a Ruby script that prints 'hello world!' in the current
|
|api-client|. Here's a Ruby script that prints 'hello world!' in the current
|
||||||
@@ -192,10 +190,10 @@ prefix is stripped off.
|
|||||||
5. Types *rpc-types*
|
5. Types *rpc-types*
|
||||||
|
|
||||||
The Nvim C API uses custom types for all functions. |api-types|
|
The Nvim C API uses custom types for all functions. |api-types|
|
||||||
At the RPC layer, the types can be split into two groups:
|
At the RPC layer, types form two groups:
|
||||||
|
|
||||||
- Basic types that map natively to msgpack (and probably have a default
|
- Basic types that map natively to msgpack (and have a default
|
||||||
representation in msgpack-supported programming languages)
|
representation in most msgpack-supported programming languages)
|
||||||
- Special Nvim types that map to msgpack EXT with custom type codes.
|
- Special Nvim types that map to msgpack EXT with custom type codes.
|
||||||
|
|
||||||
Basic types ~
|
Basic types ~
|
||||||
@@ -208,6 +206,8 @@ Basic types ~
|
|||||||
Array -> msgpack array
|
Array -> msgpack array
|
||||||
Dictionary -> msgpack map
|
Dictionary -> msgpack map
|
||||||
|
|
||||||
|
Note: in function calls, empty Array is accepted for Dictionary parameter.
|
||||||
|
|
||||||
Special types (msgpack EXT) ~
|
Special types (msgpack EXT) ~
|
||||||
|
|
||||||
Buffer -> enum value kObjectTypeBuffer
|
Buffer -> enum value kObjectTypeBuffer
|
||||||
@@ -243,4 +243,4 @@ Even for statically compiled clients it is good practice to avoid hardcoding
|
|||||||
the type codes, because a client may be built against one Nvim version but
|
the type codes, because a client may be built against one Nvim version but
|
||||||
connect to another with different type codes.
|
connect to another with different type codes.
|
||||||
|
|
||||||
|
vim:tw=78:ts=8:ft=help:norl:
|
||||||
|
@@ -20,15 +20,24 @@ differences from Vim.
|
|||||||
==============================================================================
|
==============================================================================
|
||||||
Transitioning from Vim *nvim-from-vim*
|
Transitioning from Vim *nvim-from-vim*
|
||||||
|
|
||||||
To start the transition, create ~/.config/nvim/init.vim with these contents:
|
To start the transition, create init.vim in the correct directory for your
|
||||||
|
platform.
|
||||||
|
|
||||||
|
For Linux, macOS and other Unixes, create the file at ~/.config/nvim/init.vim.
|
||||||
|
|
||||||
|
For Windows, create the file at %LOCALAPPDATA%\nvim\init.vim. `%LOCALAPPDATA%`
|
||||||
|
usually expands to `C:\Users\<username>\AppData\Local`.
|
||||||
|
|
||||||
|
Note: If your system sets `$XDG_CONFIG_HOME`, use that instead of `~/.config`
|
||||||
|
or `%LOCALAPPDATA%` in the paths above. Nvim follows the XDG |base-directories|
|
||||||
|
convention.
|
||||||
|
|
||||||
|
Next, add these contents to the file:
|
||||||
>
|
>
|
||||||
set runtimepath^=~/.vim runtimepath+=~/.vim/after
|
set runtimepath^=~/.vim runtimepath+=~/.vim/after
|
||||||
let &packpath = &runtimepath
|
let &packpath = &runtimepath
|
||||||
source ~/.vimrc
|
source ~/.vimrc
|
||||||
<
|
<
|
||||||
Note: If your system sets `$XDG_CONFIG_HOME`, use that instead of `~/.config`
|
|
||||||
in the code above. Nvim follows the XDG |base-directories| convention.
|
|
||||||
|
|
||||||
See |provider-python| and |provider-clipboard| for additional software you
|
See |provider-python| and |provider-clipboard| for additional software you
|
||||||
might need to use some features.
|
might need to use some features.
|
||||||
|
|
||||||
|
@@ -96,7 +96,6 @@ global configuration.
|
|||||||
|
|
||||||
- 'list' is disabled
|
- 'list' is disabled
|
||||||
- 'wrap' is disabled
|
- 'wrap' is disabled
|
||||||
- 'relativenumber' is disabled in |Terminal-mode| (and cannot be enabled)
|
|
||||||
|
|
||||||
You can change the defaults with a TermOpen autocommand: >
|
You can change the defaults with a TermOpen autocommand: >
|
||||||
au TermOpen * setlocal list
|
au TermOpen * setlocal list
|
||||||
@@ -117,10 +116,8 @@ variables:
|
|||||||
- *b:term_title* The settable title of the terminal, typically displayed in
|
- *b:term_title* The settable title of the terminal, typically displayed in
|
||||||
the window title or tab title of a graphical terminal emulator. Programs
|
the window title or tab title of a graphical terminal emulator. Programs
|
||||||
running in the terminal can set this title via an escape sequence.
|
running in the terminal can set this title via an escape sequence.
|
||||||
- *b:terminal_job_id* The nvim job ID of the job running in the terminal. See
|
- |'channel'| The nvim channel ID for the underlying PTY.
|
||||||
|job-control| for more information.
|
|chansend()| can be used to send input to the terminal.
|
||||||
- *b:terminal_job_pid* The PID of the top-level process running in the
|
|
||||||
terminal.
|
|
||||||
|
|
||||||
These variables are initialized before TermOpen, so you can use them in
|
These variables are initialized before TermOpen, so you can use them in
|
||||||
a local 'statusline'. Example: >
|
a local 'statusline'. Example: >
|
||||||
|
@@ -1213,6 +1213,12 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
< |Nvi| also has this option, but it only uses the first character.
|
< |Nvi| also has this option, but it only uses the first character.
|
||||||
See |cmdwin|.
|
See |cmdwin|.
|
||||||
|
|
||||||
|
*'channel'*
|
||||||
|
'channel' number (default: 0)
|
||||||
|
local to buffer
|
||||||
|
|Channel| connected to the buffer. Currently only used by
|
||||||
|
|terminal-emulator|. Is 0 if no terminal is open. Cannot be changed.
|
||||||
|
|
||||||
*'charconvert'* *'ccv'* *E202* *E214* *E513*
|
*'charconvert'* *'ccv'* *E202* *E214* *E513*
|
||||||
'charconvert' 'ccv' string (default "")
|
'charconvert' 'ccv' string (default "")
|
||||||
global
|
global
|
||||||
@@ -1801,12 +1807,6 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
Determines the order in which ":cstag" performs a search. See
|
Determines the order in which ":cstag" performs a search. See
|
||||||
|cscopetagorder|.
|
|cscopetagorder|.
|
||||||
|
|
||||||
*'cscopeverbose'* *'csverb'*
|
|
||||||
*'nocscopeverbose'* *'nocsverb'*
|
|
||||||
'cscopeverbose' 'csverb' boolean (default off)
|
|
||||||
global
|
|
||||||
Give messages when adding a cscope database. See |cscopeverbose|.
|
|
||||||
|
|
||||||
*'cursorbind'* *'crb'* *'nocursorbind'* *'nocrb'*
|
*'cursorbind'* *'crb'* *'nocursorbind'* *'nocrb'*
|
||||||
'cursorbind' 'crb' boolean (default off)
|
'cursorbind' 'crb' boolean (default off)
|
||||||
local to window
|
local to window
|
||||||
@@ -2024,7 +2024,7 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
security reasons.
|
security reasons.
|
||||||
|
|
||||||
*'display'* *'dy'*
|
*'display'* *'dy'*
|
||||||
'display' 'dy' string (default "lastline", Vi default: "")
|
'display' 'dy' string (default "lastline,msgsep", Vi default: "")
|
||||||
global
|
global
|
||||||
Change the way text is displayed. This is comma separated list of
|
Change the way text is displayed. This is comma separated list of
|
||||||
flags:
|
flags:
|
||||||
@@ -2036,6 +2036,10 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
column of the last screen line. Overrules "lastline".
|
column of the last screen line. Overrules "lastline".
|
||||||
uhex Show unprintable characters hexadecimal as <xx>
|
uhex Show unprintable characters hexadecimal as <xx>
|
||||||
instead of using ^C and ~C.
|
instead of using ^C and ~C.
|
||||||
|
msgsep When showing messages longer than 'cmdheight', only
|
||||||
|
scroll the message lines, not the entire screen. The
|
||||||
|
separator line is decorated by |MsgSeparator| and the
|
||||||
|
"msgsep" flag of 'fillchars'.
|
||||||
|
|
||||||
When neither "lastline" nor "truncate" is included, a last line that
|
When neither "lastline" nor "truncate" is included, a last line that
|
||||||
doesn't fit is replaced with "@" lines.
|
doesn't fit is replaced with "@" lines.
|
||||||
@@ -2058,13 +2062,11 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
|
|
||||||
|
|
||||||
*'encoding'* *'enc'* *E543*
|
*'encoding'* *'enc'* *E543*
|
||||||
'encoding' 'enc' Removed. |vim-differences| {Nvim}
|
'encoding' 'enc'
|
||||||
Nvim always uses UTF-8 internally. RPC communication
|
String-encoding used internally and for |RPC| communication.
|
||||||
(remote plugins/GUIs) must use UTF-8 strings.
|
Always UTF-8.
|
||||||
|
|
||||||
The character encoding of files can be different than UTF-8.
|
See 'fileencoding' to control file-content encoding.
|
||||||
This is specified with 'fileencoding'. The conversion is done with
|
|
||||||
iconv() or as specified with 'charconvert'.
|
|
||||||
|
|
||||||
*'endofline'* *'eol'* *'noendofline'* *'noeol'*
|
*'endofline'* *'eol'* *'noendofline'* *'noeol'*
|
||||||
'endofline' 'eol' boolean (default on)
|
'endofline' 'eol' boolean (default on)
|
||||||
@@ -2180,16 +2182,16 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
*'fileencoding'* *'fenc'* *E213*
|
*'fileencoding'* *'fenc'* *E213*
|
||||||
'fileencoding' 'fenc' string (default: "")
|
'fileencoding' 'fenc' string (default: "")
|
||||||
local to buffer
|
local to buffer
|
||||||
{only available when compiled with the |+multi_byte|
|
File-content encoding for the current buffer. Conversion is done with
|
||||||
feature}
|
iconv() or as specified with 'charconvert'.
|
||||||
Sets the character encoding for the file of this buffer.
|
|
||||||
|
|
||||||
When 'fileencoding' is different from "utf-8", conversion will be
|
When 'fileencoding' is not UTF-8, conversion will be done when
|
||||||
done when writing the file. For reading see below.
|
writing the file. For reading see below.
|
||||||
When 'fileencoding' is empty, the file will be saved with utf-8
|
When 'fileencoding' is empty, the file will be saved with UTF-8
|
||||||
encoding. (no conversion when reading or writing a file).
|
encoding (no conversion when reading or writing a file).
|
||||||
WARNING: Conversion to a non-Unicode encoding can cause loss of
|
|
||||||
information!
|
WARNING: Conversion to a non-Unicode encoding can cause loss of
|
||||||
|
information!
|
||||||
|
|
||||||
See |encoding-names| for the possible values. Additionally, values may be
|
See |encoding-names| for the possible values. Additionally, values may be
|
||||||
specified that can be handled by the converter, see
|
specified that can be handled by the converter, see
|
||||||
@@ -2216,7 +2218,7 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
written. If you do set 'fenc' in a modeline, you might want to set
|
written. If you do set 'fenc' in a modeline, you might want to set
|
||||||
'nomodified' to avoid not being able to ":q".
|
'nomodified' to avoid not being able to ":q".
|
||||||
|
|
||||||
This option can not be changed when 'modifiable' is off.
|
This option cannot be changed when 'modifiable' is off.
|
||||||
|
|
||||||
*'fileencodings'* *'fencs'*
|
*'fileencodings'* *'fencs'*
|
||||||
'fileencodings' 'fencs' string (default: "ucs-bom,utf-8,default,latin1")
|
'fileencodings' 'fencs' string (default: "ucs-bom,utf-8,default,latin1")
|
||||||
@@ -2289,7 +2291,7 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
'fileformats' is not empty and 'binary' is off.
|
'fileformats' is not empty and 'binary' is off.
|
||||||
When this option is set, after starting to edit a file, the 'modified'
|
When this option is set, after starting to edit a file, the 'modified'
|
||||||
option is set, because the file would be different when written.
|
option is set, because the file would be different when written.
|
||||||
This option can not be changed when 'modifiable' is off.
|
This option cannot be changed when 'modifiable' is off.
|
||||||
|
|
||||||
*'fileformats'* *'ffs'*
|
*'fileformats'* *'ffs'*
|
||||||
'fileformats' 'ffs' string (default:
|
'fileformats' 'ffs' string (default:
|
||||||
@@ -2377,7 +2379,7 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
Only normal file name characters can be used, "/\*?[|<>" are illegal.
|
Only normal file name characters can be used, "/\*?[|<>" are illegal.
|
||||||
|
|
||||||
*'fillchars'* *'fcs'*
|
*'fillchars'* *'fcs'*
|
||||||
'fillchars' 'fcs' string (default "vert:|,fold:-")
|
'fillchars' 'fcs' string (default "")
|
||||||
global
|
global
|
||||||
{not available when compiled without the |+windows|
|
{not available when compiled without the |+windows|
|
||||||
and |+folding| features}
|
and |+folding| features}
|
||||||
@@ -2387,16 +2389,20 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
item default Used for ~
|
item default Used for ~
|
||||||
stl:c ' ' or '^' statusline of the current window
|
stl:c ' ' or '^' statusline of the current window
|
||||||
stlnc:c ' ' or '=' statusline of the non-current windows
|
stlnc:c ' ' or '=' statusline of the non-current windows
|
||||||
vert:c '|' vertical separators |:vsplit|
|
vert:c '│' or '|' vertical separators |:vsplit|
|
||||||
fold:c '-' filling 'foldtext'
|
fold:c '·' or '-' filling 'foldtext'
|
||||||
diff:c '-' deleted lines of the 'diff' option
|
diff:c '-' deleted lines of the 'diff' option
|
||||||
|
msgsep:c ' ' message separator 'display'
|
||||||
|
|
||||||
Any one that is omitted will fall back to the default. For "stl" and
|
Any one that is omitted will fall back to the default. For "stl" and
|
||||||
"stlnc" the space will be used when there is highlighting, '^' or '='
|
"stlnc" the space will be used when there is highlighting, '^' or '='
|
||||||
otherwise.
|
otherwise.
|
||||||
|
|
||||||
|
If 'ambiwidth' is "double" then "vert" and "fold" default to
|
||||||
|
single-byte alternatives.
|
||||||
|
|
||||||
Example: >
|
Example: >
|
||||||
:set fillchars=stl:^,stlnc:=,vert:\|,fold:-,diff:-
|
:set fillchars=stl:^,stlnc:=,vert:│,fold:·,diff:-
|
||||||
< This is similar to the default, except that these characters will also
|
< This is similar to the default, except that these characters will also
|
||||||
be used when there is highlighting.
|
be used when there is highlighting.
|
||||||
|
|
||||||
@@ -2681,17 +2687,19 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
security reasons.
|
security reasons.
|
||||||
|
|
||||||
*'fsync'* *'fs'*
|
*'fsync'* *'fs'*
|
||||||
'fsync' 'fs' boolean (default on)
|
'fsync' 'fs' boolean (default off)
|
||||||
global
|
global
|
||||||
When on, the library function fsync() will be called after writing a
|
When on, the OS function fsync() will be called after saving a file
|
||||||
file. This will flush a file to disk, ensuring that it is safely
|
(|:write|, |writefile()|, …), |swap-file| and |shada-file|. This
|
||||||
written even on filesystems which do metadata-only journaling. This
|
flushes the file to disk, ensuring that it is safely written.
|
||||||
will force the harddrive to spin up on Linux systems running in laptop
|
Slow on some systems: writing buffers, quitting Nvim, and other
|
||||||
mode, so it may be undesirable in some situations. Be warned that
|
operations may sometimes take a few seconds.
|
||||||
turning this off increases the chances of data loss after a crash.
|
|
||||||
|
|
||||||
Currently applies only to writing the buffer with e.g. |:w| and
|
Files are ALWAYS flushed ('fsync' is ignored) when:
|
||||||
|writefile()|.
|
- |CursorHold| event is triggered
|
||||||
|
- |:preserve| is called
|
||||||
|
- system signals low battery life
|
||||||
|
- Nvim exits abnormally
|
||||||
|
|
||||||
*'gdefault'* *'gd'* *'nogdefault'* *'nogd'*
|
*'gdefault'* *'gd'* *'nogdefault'* *'nogd'*
|
||||||
'gdefault' 'gd' boolean (default off)
|
'gdefault' 'gd' boolean (default off)
|
||||||
@@ -2706,6 +2714,10 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
:s///g subst. one subst. all
|
:s///g subst. one subst. all
|
||||||
:s///gg subst. all subst. one
|
:s///gg subst. all subst. one
|
||||||
|
|
||||||
|
DEPRECATED: Setting this option may break plugins that are not aware
|
||||||
|
of this option. Also, many users get confused that adding the /g flag
|
||||||
|
has the opposite effect of that it normally does.
|
||||||
|
|
||||||
*'grepformat'* *'gfm'*
|
*'grepformat'* *'gfm'*
|
||||||
'grepformat' 'gfm' string (default "%f:%l:%m,%f:%l%m,%f %l%m")
|
'grepformat' 'gfm' string (default "%f:%l:%m,%f:%l%m,%f %l%m")
|
||||||
global
|
global
|
||||||
@@ -3295,7 +3307,17 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
pattern and/or a lot of text the match may not be found. This is to
|
pattern and/or a lot of text the match may not be found. This is to
|
||||||
avoid that Vim hangs while you are typing the pattern.
|
avoid that Vim hangs while you are typing the pattern.
|
||||||
The |hl-IncSearch| highlight group determines the highlighting.
|
The |hl-IncSearch| highlight group determines the highlighting.
|
||||||
See also: 'hlsearch'.
|
When 'hlsearch' is on, all matched strings are highlighted too while typing
|
||||||
|
a search command. See also: 'hlsearch'.
|
||||||
|
If you don't want turn 'hlsearch' on, but want to highlight all matches
|
||||||
|
while searching, you can turn on and off 'hlsearch' with autocmd.
|
||||||
|
Example: >
|
||||||
|
augroup vimrc-incsearch-highlight
|
||||||
|
autocmd!
|
||||||
|
autocmd CmdlineEnter /,\? :set hlsearch
|
||||||
|
autocmd CmdlineLeave /,\? :set nohlsearch
|
||||||
|
augroup END
|
||||||
|
<
|
||||||
CTRL-L can be used to add one character from after the current match
|
CTRL-L can be used to add one character from after the current match
|
||||||
to the command line. If 'ignorecase' and 'smartcase' are set and the
|
to the command line. If 'ignorecase' and 'smartcase' are set and the
|
||||||
command line has no uppercase characters, the added character is
|
command line has no uppercase characters, the added character is
|
||||||
@@ -3666,7 +3688,7 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
< Minimum value is 2, maximum value is 1000.
|
< Minimum value is 2, maximum value is 1000.
|
||||||
|
|
||||||
*'linespace'* *'lsp'*
|
*'linespace'* *'lsp'*
|
||||||
'linespace' 'lsp' number (default 0, 1 for Win32 GUI)
|
'linespace' 'lsp' number (default 0)
|
||||||
global
|
global
|
||||||
{only in the GUI}
|
{only in the GUI}
|
||||||
Number of pixel lines inserted between characters. Useful if the font
|
Number of pixel lines inserted between characters. Useful if the font
|
||||||
@@ -3803,6 +3825,23 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
This option cannot be set from a |modeline| or in the |sandbox|, for
|
This option cannot be set from a |modeline| or in the |sandbox|, for
|
||||||
security reasons.
|
security reasons.
|
||||||
|
|
||||||
|
*'makeencoding'* *'menc'*
|
||||||
|
'makeencoding' 'menc' string (default "")
|
||||||
|
global or local to buffer |global-local|
|
||||||
|
{only available when compiled with the |+multi_byte|
|
||||||
|
feature}
|
||||||
|
{not in Vi}
|
||||||
|
Encoding used for reading the output of external commands. When empty,
|
||||||
|
encoding is not converted.
|
||||||
|
This is used for `:make`, `:lmake`, `:grep`, `:lgrep`, `:grepadd`,
|
||||||
|
`:lgrepadd`, `:cfile`, `:cgetfile`, `:caddfile`, `:lfile`, `:lgetfile`,
|
||||||
|
and `:laddfile`.
|
||||||
|
|
||||||
|
This would be mostly useful when you use MS-Windows. If |+iconv| is
|
||||||
|
enabled and GNU libiconv is used, setting 'makeencoding' to "char" has
|
||||||
|
the same effect as setting to the system locale encoding. Example: >
|
||||||
|
:set makeencoding=char " system locale is used
|
||||||
|
<
|
||||||
*'makeprg'* *'mp'*
|
*'makeprg'* *'mp'*
|
||||||
'makeprg' 'mp' string (default "make")
|
'makeprg' 'mp' string (default "make")
|
||||||
global or local to buffer |global-local|
|
global or local to buffer |global-local|
|
||||||
@@ -3882,16 +3921,6 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
because the 'w' is used before the next mapping is done. See also
|
because the 'w' is used before the next mapping is done. See also
|
||||||
|key-mapping|.
|
|key-mapping|.
|
||||||
|
|
||||||
*'maxmem'* *'mm'*
|
|
||||||
'maxmem' 'mm' number (default between 256 to 5120 (system
|
|
||||||
dependent) or half the amount of memory
|
|
||||||
available)
|
|
||||||
global
|
|
||||||
Maximum amount of memory (in Kbyte) to use for one buffer. When this
|
|
||||||
limit is reached allocating extra memory for a buffer will cause
|
|
||||||
other memory to be freed. The maximum usable value is about 2000000.
|
|
||||||
Use this to work without a limit. Also see 'maxmemtot'.
|
|
||||||
|
|
||||||
*'maxmempattern'* *'mmp'*
|
*'maxmempattern'* *'mmp'*
|
||||||
'maxmempattern' 'mmp' number (default 1000)
|
'maxmempattern' 'mmp' number (default 1000)
|
||||||
global
|
global
|
||||||
@@ -3905,20 +3934,6 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
"\(.\)*" on a very long line. ".*" works much better.
|
"\(.\)*" on a very long line. ".*" works much better.
|
||||||
Vim may run out of memory before hitting the 'maxmempattern' limit.
|
Vim may run out of memory before hitting the 'maxmempattern' limit.
|
||||||
|
|
||||||
*'maxmemtot'* *'mmt'*
|
|
||||||
'maxmemtot' 'mmt' number (default between 2048 and 10240 (system
|
|
||||||
dependent) or half the amount of memory
|
|
||||||
available)
|
|
||||||
global
|
|
||||||
Maximum amount of memory in Kbyte to use for all buffers together.
|
|
||||||
The maximum usable value is about 2000000 (2 Gbyte). Use this to work
|
|
||||||
without a limit.
|
|
||||||
On 64 bit machines higher values might work. But hey, do you really
|
|
||||||
need more than 2 Gbyte for text editing? Keep in mind that text is
|
|
||||||
stored in the swap file, one can edit files > 2 Gbyte anyway. We do
|
|
||||||
need the memory to store undo info.
|
|
||||||
Also see 'maxmem'.
|
|
||||||
|
|
||||||
*'menuitems'* *'mis'*
|
*'menuitems'* *'mis'*
|
||||||
'menuitems' 'mis' number (default 25)
|
'menuitems' 'mis' number (default 25)
|
||||||
global
|
global
|
||||||
@@ -5121,15 +5136,19 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
to escape quote: 'a\"b"' is the same as "a\b".
|
to escape quote: 'a\"b"' is the same as "a\b".
|
||||||
Note that such processing is done after |:set| did its own round of
|
Note that such processing is done after |:set| did its own round of
|
||||||
unescaping, so to keep yourself sane use |:let-&| like shown above.
|
unescaping, so to keep yourself sane use |:let-&| like shown above.
|
||||||
|
*shell-powershell*
|
||||||
|
To use powershell (on Windows): >
|
||||||
|
set shell=powershell shellquote=( shellpipe=\| shellredir=> shellxquote=
|
||||||
|
set shellcmdflag=-NoLogo\ -NoProfile\ -ExecutionPolicy\ RemoteSigned\ -Command
|
||||||
|
|
||||||
This option cannot be set from a |modeline| or in the |sandbox|, for
|
< This option cannot be set from a |modeline| or in the |sandbox|, for
|
||||||
security reasons.
|
security reasons.
|
||||||
|
|
||||||
*'shellcmdflag'* *'shcf'*
|
*'shellcmdflag'* *'shcf'*
|
||||||
'shellcmdflag' 'shcf' string (default: "-c"; Windows: "/c")
|
'shellcmdflag' 'shcf' string (default: "-c"; Windows: "/s /c")
|
||||||
global
|
global
|
||||||
Flag passed to the shell to execute "!" and ":!" commands; e.g.,
|
Flag passed to the shell to execute "!" and ":!" commands; e.g.,
|
||||||
"bash.exe -c ls" or "cmd.exe /c dir". For Windows
|
`bash.exe -c ls` or `cmd.exe /s /c "dir"`. For Windows
|
||||||
systems, the default is set according to the value of 'shell', to
|
systems, the default is set according to the value of 'shell', to
|
||||||
reduce the need to set this option by the user.
|
reduce the need to set this option by the user.
|
||||||
On Unix it can have more than one flag. Each white space separated
|
On Unix it can have more than one flag. Each white space separated
|
||||||
@@ -5250,7 +5269,7 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
to execute most external commands with cmd.exe.
|
to execute most external commands with cmd.exe.
|
||||||
|
|
||||||
*'shellxquote'* *'sxq'*
|
*'shellxquote'* *'sxq'*
|
||||||
'shellxquote' 'sxq' string (default: "")
|
'shellxquote' 'sxq' string (default: "", Windows: "\"")
|
||||||
global
|
global
|
||||||
Quoting character(s), put around the command passed to the shell, for
|
Quoting character(s), put around the command passed to the shell, for
|
||||||
the "!" and ":!" commands. Includes the redirection. See
|
the "!" and ":!" commands. Includes the redirection. See
|
||||||
@@ -5414,14 +5433,13 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
See |tab-page| for more information about tab pages.
|
See |tab-page| for more information about tab pages.
|
||||||
|
|
||||||
*'sidescroll'* *'ss'*
|
*'sidescroll'* *'ss'*
|
||||||
'sidescroll' 'ss' number (default 0)
|
'sidescroll' 'ss' number (default 1)
|
||||||
global
|
global
|
||||||
The minimal number of columns to scroll horizontally. Used only when
|
The minimal number of columns to scroll horizontally. Used only when
|
||||||
the 'wrap' option is off and the cursor is moved off of the screen.
|
the 'wrap' option is off and the cursor is moved off of the screen.
|
||||||
When it is zero the cursor will be put in the middle of the screen.
|
When it is zero the cursor will be put in the middle of the screen.
|
||||||
When using a slow terminal set it to a large number or 0. When using
|
When using a slow terminal set it to a large number or 0. Not used
|
||||||
a fast terminal use a small number or 1. Not used for "zh" and "zl"
|
for "zh" and "zl" commands.
|
||||||
commands.
|
|
||||||
|
|
||||||
*'sidescrolloff'* *'siso'*
|
*'sidescrolloff'* *'siso'*
|
||||||
'sidescrolloff' 'siso' number (default 0)
|
'sidescrolloff' 'siso' number (default 0)
|
||||||
@@ -6186,7 +6204,6 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
When on, uses |highlight-guifg| and |highlight-guibg| attributes in
|
When on, uses |highlight-guifg| and |highlight-guibg| attributes in
|
||||||
the terminal (thus using 24-bit color). Requires a ISO-8613-3
|
the terminal (thus using 24-bit color). Requires a ISO-8613-3
|
||||||
compatible terminal.
|
compatible terminal.
|
||||||
Must be set at startup (in your |init.vim| or |--cmd|).
|
|
||||||
|
|
||||||
*'terse'* *'noterse'*
|
*'terse'* *'noterse'*
|
||||||
'terse' boolean (default off)
|
'terse' boolean (default off)
|
||||||
@@ -6252,15 +6269,14 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
*'timeoutlen'* *'tm'*
|
*'timeoutlen'* *'tm'*
|
||||||
'timeoutlen' 'tm' number (default 1000)
|
'timeoutlen' 'tm' number (default 1000)
|
||||||
global
|
global
|
||||||
The time in milliseconds that is waited for a mapped sequence to
|
Time in milliseconds to wait for a mapped sequence to complete.
|
||||||
complete.
|
|
||||||
|
|
||||||
*'ttimeoutlen'* *'ttm'*
|
*'ttimeoutlen'* *'ttm'*
|
||||||
'ttimeoutlen' 'ttm' number (default 50)
|
'ttimeoutlen' 'ttm' number (default 50)
|
||||||
global
|
global
|
||||||
The time in milliseconds that is waited for a key code
|
Time in milliseconds to wait for a key code sequence to complete. Also
|
||||||
sequence to complete. Also used for CTRL-\ CTRL-N and CTRL-\ CTRL-G
|
used for CTRL-\ CTRL-N and CTRL-\ CTRL-G when part of a command has
|
||||||
when part of a command has been typed.
|
been typed.
|
||||||
|
|
||||||
*'title'* *'notitle'*
|
*'title'* *'notitle'*
|
||||||
'title' boolean (default off)
|
'title' boolean (default off)
|
||||||
@@ -6418,6 +6434,7 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
Currently, these messages are given:
|
Currently, these messages are given:
|
||||||
>= 1 When the shada file is read or written.
|
>= 1 When the shada file is read or written.
|
||||||
>= 2 When a file is ":source"'ed.
|
>= 2 When a file is ":source"'ed.
|
||||||
|
>= 3 UI info, terminal capabilities
|
||||||
>= 5 Every searched tags file and include file.
|
>= 5 Every searched tags file and include file.
|
||||||
>= 8 Files for which a group of autocommands is executed.
|
>= 8 Files for which a group of autocommands is executed.
|
||||||
>= 9 Every executed autocommand.
|
>= 9 Every executed autocommand.
|
||||||
@@ -6889,7 +6906,8 @@ A jump table for the options with a short description can be found at |Q_op|.
|
|||||||
'writedelay' 'wd' number (default 0)
|
'writedelay' 'wd' number (default 0)
|
||||||
global
|
global
|
||||||
The number of milliseconds to wait for each character sent to the
|
The number of milliseconds to wait for each character sent to the
|
||||||
screen. When non-zero, characters are sent to the terminal one by
|
screen. When positive, characters are sent to the UI one by one.
|
||||||
one. For debugging purposes.
|
When negative, all redrawn characters cause a delay, even if the
|
||||||
|
character already was displayed by the UI. For debugging purposes.
|
||||||
|
|
||||||
vim:tw=78:ts=8:ft=help:noet:norl:
|
vim:tw=78:ts=8:ft=help:noet:norl:
|
||||||
|
@@ -1071,25 +1071,27 @@ x A single character, with no special meaning, matches itself
|
|||||||
- A character class expression is evaluated to the set of characters
|
- A character class expression is evaluated to the set of characters
|
||||||
belonging to that character class. The following character classes
|
belonging to that character class. The following character classes
|
||||||
are supported:
|
are supported:
|
||||||
Name Contents ~
|
Name Func Contents ~
|
||||||
*[:alnum:]* [:alnum:] ASCII letters and digits
|
*[:alnum:]* [:alnum:] isalnum ASCII letters and digits
|
||||||
*[:alpha:]* [:alpha:] ASCII letters
|
*[:alpha:]* [:alpha:] isalpha ASCII letters
|
||||||
*[:blank:]* [:blank:] space and tab characters
|
*[:blank:]* [:blank:] space and tab
|
||||||
*[:cntrl:]* [:cntrl:] control characters
|
*[:cntrl:]* [:cntrl:] iscntrl ASCII control characters
|
||||||
*[:digit:]* [:digit:] decimal digits
|
*[:digit:]* [:digit:] decimal digits '0' to '9'
|
||||||
*[:graph:]* [:graph:] printable characters excluding space
|
*[:graph:]* [:graph:] isgraph ASCII printable characters excluding
|
||||||
*[:lower:]* [:lower:] lowercase letters (all letters when
|
space
|
||||||
|
*[:lower:]* [:lower:] (1) lowercase letters (all letters when
|
||||||
'ignorecase' is used)
|
'ignorecase' is used)
|
||||||
*[:print:]* [:print:] printable characters including space
|
*[:print:]* [:print:] (2) printable characters including space
|
||||||
*[:punct:]* [:punct:] ASCII punctuation characters
|
*[:punct:]* [:punct:] ispunct ASCII punctuation characters
|
||||||
*[:space:]* [:space:] whitespace characters
|
*[:space:]* [:space:] whitespace characters: space, tab, CR,
|
||||||
*[:upper:]* [:upper:] uppercase letters (all letters when
|
NL, vertical tab, form feed
|
||||||
|
*[:upper:]* [:upper:] (3) uppercase letters (all letters when
|
||||||
'ignorecase' is used)
|
'ignorecase' is used)
|
||||||
*[:xdigit:]* [:xdigit:] hexadecimal digits
|
*[:xdigit:]* [:xdigit:] hexadecimal digits: 0-9, a-f, A-F
|
||||||
*[:return:]* [:return:] the <CR> character
|
*[:return:]* [:return:] the <CR> character
|
||||||
*[:tab:]* [:tab:] the <Tab> character
|
*[:tab:]* [:tab:] the <Tab> character
|
||||||
*[:escape:]* [:escape:] the <Esc> character
|
*[:escape:]* [:escape:] the <Esc> character
|
||||||
*[:backspace:]* [:backspace:] the <BS> character
|
*[:backspace:]* [:backspace:] the <BS> character
|
||||||
The brackets in character class expressions are additional to the
|
The brackets in character class expressions are additional to the
|
||||||
brackets delimiting a collection. For example, the following is a
|
brackets delimiting a collection. For example, the following is a
|
||||||
plausible pattern for a Unix filename: "[-./[:alnum:]_~]\+" That is,
|
plausible pattern for a Unix filename: "[-./[:alnum:]_~]\+" That is,
|
||||||
@@ -1100,6 +1102,13 @@ x A single character, with no special meaning, matches itself
|
|||||||
regexp engine. See |two-engines|. In the future these items may
|
regexp engine. See |two-engines|. In the future these items may
|
||||||
work for multi-byte characters. For now, to get all "alpha"
|
work for multi-byte characters. For now, to get all "alpha"
|
||||||
characters you can use: [[:lower:][:upper:]].
|
characters you can use: [[:lower:][:upper:]].
|
||||||
|
|
||||||
|
The "Func" column shows what library function is used. The
|
||||||
|
implementation depends on the system. Otherwise:
|
||||||
|
(1) Uses islower() for ASCII and Vim builtin rules for other
|
||||||
|
characters when built with the |+multi_byte| feature.
|
||||||
|
(2) Uses Vim builtin rules
|
||||||
|
(3) As with (1) but using isupper()
|
||||||
*/[[=* *[==]*
|
*/[[=* *[==]*
|
||||||
- An equivalence class. This means that characters are matched that
|
- An equivalence class. This means that characters are matched that
|
||||||
have almost the same meaning, e.g., when ignoring accents. This
|
have almost the same meaning, e.g., when ignoring accents. This
|
||||||
|
@@ -20,33 +20,31 @@ Note: Only the Vim 7.3 API is supported; bindeval (Vim 7.4) is not.
|
|||||||
PYTHON QUICKSTART ~
|
PYTHON QUICKSTART ~
|
||||||
|
|
||||||
If you used a package manager to install Nvim, you might already have the
|
If you used a package manager to install Nvim, you might already have the
|
||||||
required `neovim` Python package. Run |:checkhealth| to see if your system is
|
required `neovim` Python package. Run |:checkhealth| to verify.
|
||||||
up-to-date.
|
|
||||||
|
|
||||||
Following are steps to install the package with Python's `pip` tool.
|
Following are steps to install the package with Python `pip`.
|
||||||
|
|
||||||
Note: Depending on your system, `pip` might refer to Python 2 or Python 3,
|
|
||||||
which is why the following instructions mention `pip2` or `pip3`
|
|
||||||
explicitly. If one of these is not available, try `pip`.
|
|
||||||
|
|
||||||
To use Vim Python 2/3 plugins with Nvim:
|
|
||||||
|
|
||||||
- For Python 2 plugins, make sure an interpreter for Python 2.6 or 2.7 is
|
- For Python 2 plugins, make sure Python 2.7 is available in your `$PATH`,
|
||||||
available in your `$PATH`, then install the `neovim` Python package systemwide: >
|
then install the `neovim` Python package systemwide: >
|
||||||
$ sudo pip2 install --upgrade neovim
|
sudo pip2 install --upgrade neovim
|
||||||
<
|
<
|
||||||
or for the current user: >
|
or for the current user: >
|
||||||
$ pip2 install --user --upgrade neovim
|
pip2 install --user --upgrade neovim
|
||||||
<
|
<
|
||||||
- For Python 3 plugins, make sure an interpreter for Python 3.3 or above is
|
- For Python 3 plugins, make sure Python 3.4+ is available in your `$PATH`,
|
||||||
available in your `$PATH`, then install the `neovim` Python package systemwide: >
|
then install the `neovim` Python package systemwide: >
|
||||||
$ sudo pip3 install --upgrade neovim
|
sudo pip3 install --upgrade neovim
|
||||||
<
|
<
|
||||||
or for the current user: >
|
or for the current user: >
|
||||||
$ pip3 install --user --upgrade neovim
|
pip3 install --user --upgrade neovim
|
||||||
<
|
<
|
||||||
|
Note: `pip` may refer to Python 2 or Python 3, so the instructions mention
|
||||||
|
`pip2` or `pip3` explicitly. If one is missing, try `pip`.
|
||||||
|
|
||||||
Note: The `--upgrade` flag ensures you have the latest version even if
|
Note: The `--upgrade` flag ensures you have the latest version even if
|
||||||
a previous version was already installed.
|
a previous version was already installed.
|
||||||
|
|
||||||
PYTHON PROVIDER CONFIGURATION ~
|
PYTHON PROVIDER CONFIGURATION ~
|
||||||
*g:python_host_prog*
|
*g:python_host_prog*
|
||||||
@@ -93,7 +91,7 @@ Run |:checkhealth| to see if your system is up-to-date.
|
|||||||
RUBY QUICKSTART ~
|
RUBY QUICKSTART ~
|
||||||
|
|
||||||
To use Vim Ruby plugins with Nvim, just install the latest `neovim` RubyGem: >
|
To use Vim Ruby plugins with Nvim, just install the latest `neovim` RubyGem: >
|
||||||
$ gem install neovim
|
gem install neovim
|
||||||
|
|
||||||
RUBY PROVIDER CONFIGURATION ~
|
RUBY PROVIDER CONFIGURATION ~
|
||||||
*g:loaded_ruby_provider*
|
*g:loaded_ruby_provider*
|
||||||
@@ -112,7 +110,30 @@ To use an absolute path (e.g. to an rbenv installation): >
|
|||||||
To use the RVM "system" Ruby installation: >
|
To use the RVM "system" Ruby installation: >
|
||||||
let g:ruby_host_prog = 'rvm system do neovim-ruby-host'
|
let g:ruby_host_prog = 'rvm system do neovim-ruby-host'
|
||||||
<
|
<
|
||||||
|
==============================================================================
|
||||||
|
Node.js integration *provider-nodejs*
|
||||||
|
|
||||||
|
Nvim supports Node.js |remote-plugin|s.
|
||||||
|
https://github.com/neovim/node-client/
|
||||||
|
https://nodejs.org/
|
||||||
|
|
||||||
|
NODEJS QUICKSTART~
|
||||||
|
|
||||||
|
To use javascript remote-plugins with Nvim, install the `neovim` npm package: >
|
||||||
|
npm install -g neovim
|
||||||
|
<
|
||||||
|
NODEJS PROVIDER CONFIGURATION~
|
||||||
|
*g:loaded_node_provider*
|
||||||
|
To disable Node support: >
|
||||||
|
:let g:loaded_node_provider = 1
|
||||||
|
<
|
||||||
|
*g:node_host_prog*
|
||||||
|
Command to start the Node host. Setting this makes startup faster.
|
||||||
|
|
||||||
|
By default, Nvim searches for `neovim-node-host` using "npm root -g", which
|
||||||
|
can be slow. To avoid this, set g:node_host_prog to an absolute path: >
|
||||||
|
let g:node_host_prog = '/usr/local/bin/neovim-node-host'
|
||||||
|
<
|
||||||
==============================================================================
|
==============================================================================
|
||||||
Clipboard integration *provider-clipboard* *clipboard*
|
Clipboard integration *provider-clipboard* *clipboard*
|
||||||
|
|
||||||
|
@@ -165,6 +165,9 @@ processing a quickfix or location list command, it will be aborted.
|
|||||||
keep Vim running while compiling. If you give the
|
keep Vim running while compiling. If you give the
|
||||||
name of the errorfile, the 'errorfile' option will
|
name of the errorfile, the 'errorfile' option will
|
||||||
be set to [errorfile]. See |:cc| for [!].
|
be set to [errorfile]. See |:cc| for [!].
|
||||||
|
If the encoding of the error file differs from the
|
||||||
|
'encoding' option, you can use the 'makeencoding'
|
||||||
|
option to specify the encoding.
|
||||||
|
|
||||||
*:lf* *:lfile*
|
*:lf* *:lfile*
|
||||||
:lf[ile][!] [errorfile] Same as ":cfile", except the location list for the
|
:lf[ile][!] [errorfile] Same as ":cfile", except the location list for the
|
||||||
@@ -176,6 +179,9 @@ processing a quickfix or location list command, it will be aborted.
|
|||||||
:cg[etfile] [errorfile] *:cg* *:cgetfile*
|
:cg[etfile] [errorfile] *:cg* *:cgetfile*
|
||||||
Read the error file. Just like ":cfile" but don't
|
Read the error file. Just like ":cfile" but don't
|
||||||
jump to the first error.
|
jump to the first error.
|
||||||
|
If the encoding of the error file differs from the
|
||||||
|
'encoding' option, you can use the 'makeencoding'
|
||||||
|
option to specify the encoding.
|
||||||
|
|
||||||
|
|
||||||
:lg[etfile] [errorfile] *:lg* *:lgetfile*
|
:lg[etfile] [errorfile] *:lg* *:lgetfile*
|
||||||
@@ -186,6 +192,9 @@ processing a quickfix or location list command, it will be aborted.
|
|||||||
:caddf[ile] [errorfile] Read the error file and add the errors from the
|
:caddf[ile] [errorfile] Read the error file and add the errors from the
|
||||||
errorfile to the current quickfix list. If a quickfix
|
errorfile to the current quickfix list. If a quickfix
|
||||||
list is not present, then a new list is created.
|
list is not present, then a new list is created.
|
||||||
|
If the encoding of the error file differs from the
|
||||||
|
'encoding' option, you can use the 'makeencoding'
|
||||||
|
option to specify the encoding.
|
||||||
|
|
||||||
*:laddf* *:laddfile*
|
*:laddf* *:laddfile*
|
||||||
:laddf[ile] [errorfile] Same as ":caddfile", except the location list for the
|
:laddf[ile] [errorfile] Same as ":caddfile", except the location list for the
|
||||||
@@ -322,6 +331,7 @@ use this code: >
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
au QuickfixCmdPost make call QfMakeConv()
|
au QuickfixCmdPost make call QfMakeConv()
|
||||||
|
Another option is using 'makeencoding'.
|
||||||
|
|
||||||
EXECUTE A COMMAND IN ALL THE BUFFERS IN QUICKFIX OR LOCATION LIST:
|
EXECUTE A COMMAND IN ALL THE BUFFERS IN QUICKFIX OR LOCATION LIST:
|
||||||
*:cdo*
|
*:cdo*
|
||||||
@@ -460,7 +470,11 @@ keep its height, ignoring 'winheight' and 'equalalways'. You can change the
|
|||||||
height manually (e.g., by dragging the status line above it with the mouse).
|
height manually (e.g., by dragging the status line above it with the mouse).
|
||||||
|
|
||||||
In the quickfix window, each line is one error. The line number is equal to
|
In the quickfix window, each line is one error. The line number is equal to
|
||||||
the error number. You can use ":.cc" to jump to the error under the cursor.
|
the error number. The current entry is highlighted with the QuickFixLine
|
||||||
|
highlighting. You can change it to your liking, e.g.: >
|
||||||
|
:hi QuickFixLine ctermbg=Yellow guibg=Yellow
|
||||||
|
|
||||||
|
You can use ":.cc" to jump to the error under the cursor.
|
||||||
Hitting the <Enter> key or double-clicking the mouse on a line has the same
|
Hitting the <Enter> key or double-clicking the mouse on a line has the same
|
||||||
effect. The file containing the error is opened in the window above the
|
effect. The file containing the error is opened in the window above the
|
||||||
quickfix window. If there already is a window for that file, it is used
|
quickfix window. If there already is a window for that file, it is used
|
||||||
@@ -586,6 +600,9 @@ lists, use ":cnewer 99" first.
|
|||||||
like |:cnext| and |:cprevious|, see above.
|
like |:cnext| and |:cprevious|, see above.
|
||||||
This command does not accept a comment, any "
|
This command does not accept a comment, any "
|
||||||
characters are considered part of the arguments.
|
characters are considered part of the arguments.
|
||||||
|
If the encoding of the program output differs from the
|
||||||
|
'encoding' option, you can use the 'makeencoding'
|
||||||
|
option to specify the encoding.
|
||||||
|
|
||||||
*:lmak* *:lmake*
|
*:lmak* *:lmake*
|
||||||
:lmak[e][!] [arguments]
|
:lmak[e][!] [arguments]
|
||||||
@@ -645,6 +662,7 @@ read the error messages: >
|
|||||||
au QuickfixCmdPost make call QfMakeConv()
|
au QuickfixCmdPost make call QfMakeConv()
|
||||||
|
|
||||||
(Example by Faque Cheng)
|
(Example by Faque Cheng)
|
||||||
|
Another option is using 'makeencoding'.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
5. Using :vimgrep and :grep *grep* *lid*
|
5. Using :vimgrep and :grep *grep* *lid*
|
||||||
@@ -759,6 +777,9 @@ id-utils) in a similar way to its compiler integration (see |:make| above).
|
|||||||
When 'grepprg' is "internal" this works like
|
When 'grepprg' is "internal" this works like
|
||||||
|:vimgrep|. Note that the pattern needs to be
|
|:vimgrep|. Note that the pattern needs to be
|
||||||
enclosed in separator characters then.
|
enclosed in separator characters then.
|
||||||
|
If the encoding of the program output differs from the
|
||||||
|
'encoding' option, you can use the 'makeencoding'
|
||||||
|
option to specify the encoding.
|
||||||
|
|
||||||
*:lgr* *:lgrep*
|
*:lgr* *:lgrep*
|
||||||
:lgr[ep][!] [arguments] Same as ":grep", except the location list for the
|
:lgr[ep][!] [arguments] Same as ":grep", except the location list for the
|
||||||
@@ -783,6 +804,10 @@ id-utils) in a similar way to its compiler integration (see |:make| above).
|
|||||||
\ | catch /E480:/
|
\ | catch /E480:/
|
||||||
\ | endtry"
|
\ | endtry"
|
||||||
<
|
<
|
||||||
|
If the encoding of the program output differs from the
|
||||||
|
'encoding' option, you can use the 'makeencoding'
|
||||||
|
option to specify the encoding.
|
||||||
|
|
||||||
*:lgrepa* *:lgrepadd*
|
*:lgrepa* *:lgrepadd*
|
||||||
:lgrepa[dd][!] [arguments]
|
:lgrepa[dd][!] [arguments]
|
||||||
Same as ":grepadd", except the location list for the
|
Same as ":grepadd", except the location list for the
|
||||||
|
@@ -655,7 +655,6 @@ Short explanation of each option: *option-list*
|
|||||||
'cscoperelative' 'csre' Use cscope.out path basename as prefix
|
'cscoperelative' 'csre' Use cscope.out path basename as prefix
|
||||||
'cscopetag' 'cst' use cscope for tag commands
|
'cscopetag' 'cst' use cscope for tag commands
|
||||||
'cscopetagorder' 'csto' determines ":cstag" search order
|
'cscopetagorder' 'csto' determines ":cstag" search order
|
||||||
'cscopeverbose' 'csverb' give messages when adding a cscope database
|
|
||||||
'cursorbind' 'crb' move cursor in window as it moves in other windows
|
'cursorbind' 'crb' move cursor in window as it moves in other windows
|
||||||
'cursorcolumn' 'cuc' highlight the screen column of the cursor
|
'cursorcolumn' 'cuc' highlight the screen column of the cursor
|
||||||
'cursorline' 'cul' highlight the screen line of the cursor
|
'cursorline' 'cul' highlight the screen line of the cursor
|
||||||
@@ -762,15 +761,14 @@ Short explanation of each option: *option-list*
|
|||||||
'loadplugins' 'lpl' load plugin scripts when starting up
|
'loadplugins' 'lpl' load plugin scripts when starting up
|
||||||
'magic' changes special characters in search patterns
|
'magic' changes special characters in search patterns
|
||||||
'makeef' 'mef' name of the errorfile for ":make"
|
'makeef' 'mef' name of the errorfile for ":make"
|
||||||
|
'makeencoding' 'menc' encoding of external make/grep commands
|
||||||
'makeprg' 'mp' program to use for the ":make" command
|
'makeprg' 'mp' program to use for the ":make" command
|
||||||
'matchpairs' 'mps' pairs of characters that "%" can match
|
'matchpairs' 'mps' pairs of characters that "%" can match
|
||||||
'matchtime' 'mat' tenths of a second to show matching paren
|
'matchtime' 'mat' tenths of a second to show matching paren
|
||||||
'maxcombine' 'mco' maximum nr of combining characters displayed
|
'maxcombine' 'mco' maximum nr of combining characters displayed
|
||||||
'maxfuncdepth' 'mfd' maximum recursive depth for user functions
|
'maxfuncdepth' 'mfd' maximum recursive depth for user functions
|
||||||
'maxmapdepth' 'mmd' maximum recursive depth for mapping
|
'maxmapdepth' 'mmd' maximum recursive depth for mapping
|
||||||
'maxmem' 'mm' maximum memory (in Kbyte) used for one buffer
|
|
||||||
'maxmempattern' 'mmp' maximum memory (in Kbyte) used for pattern search
|
'maxmempattern' 'mmp' maximum memory (in Kbyte) used for pattern search
|
||||||
'maxmemtot' 'mmt' maximum memory (in Kbyte) used for all buffers
|
|
||||||
'menuitems' 'mis' maximum number of items in a menu
|
'menuitems' 'mis' maximum number of items in a menu
|
||||||
'mkspellmem' 'msm' memory used before |:mkspell| compresses the tree
|
'mkspellmem' 'msm' memory used before |:mkspell| compresses the tree
|
||||||
'modeline' 'ml' recognize modelines at start or end of file
|
'modeline' 'ml' recognize modelines at start or end of file
|
||||||
|
@@ -63,10 +63,8 @@ following ones in your vimrc:
|
|||||||
This is also very handy when editing files on floppy. Of course you will have
|
This is also very handy when editing files on floppy. Of course you will have
|
||||||
to create that "tmp" directory for this to work!
|
to create that "tmp" directory for this to work!
|
||||||
|
|
||||||
For read-only files, a swap file is not used. Unless the file is big, causing
|
For read-only files, a swap file is not used right away. The swap file is
|
||||||
the amount of memory used to be higher than given with 'maxmem' or
|
created only when making changes.
|
||||||
'maxmemtot'. And when making a change to a read-only file, the swap file is
|
|
||||||
created anyway.
|
|
||||||
|
|
||||||
The 'swapfile' option can be reset to avoid creating a swapfile. And the
|
The 'swapfile' option can be reset to avoid creating a swapfile. And the
|
||||||
|:noswapfile| modifier can be used to not create a swapfile for a new buffer.
|
|:noswapfile| modifier can be used to not create a swapfile for a new buffer.
|
||||||
|
@@ -22,8 +22,7 @@ More generally, Vim is started with:
|
|||||||
Option arguments and file name arguments can be mixed, and any number of them
|
Option arguments and file name arguments can be mixed, and any number of them
|
||||||
can be given. However, watch out for options that take an argument.
|
can be given. However, watch out for options that take an argument.
|
||||||
|
|
||||||
Exactly one out of the following five items may be used to choose how to
|
The following items may be used to choose how to start editing:
|
||||||
start editing:
|
|
||||||
|
|
||||||
*-file* *---*
|
*-file* *---*
|
||||||
filename One or more file names. The first one will be the current
|
filename One or more file names. The first one will be the current
|
||||||
@@ -34,26 +33,25 @@ filename One or more file names. The first one will be the current
|
|||||||
nvim -- -filename
|
nvim -- -filename
|
||||||
< All arguments after the "--" will be interpreted as file names,
|
< All arguments after the "--" will be interpreted as file names,
|
||||||
no other options or "+command" argument can follow.
|
no other options or "+command" argument can follow.
|
||||||
For behavior of quotes on MS-Windows, see |win32-quotes|.
|
|
||||||
|
|
||||||
*--*
|
*--*
|
||||||
- This argument can mean two things, depending on whether Ex
|
- Alias for stdin (standard input).
|
||||||
mode is to be used.
|
Example: >
|
||||||
|
echo text | nvim - file
|
||||||
Starting in Normal mode: >
|
< "text" is read into buffer 1, "file" is opened as buffer 2.
|
||||||
nvim -
|
In most cases (except -s, -es, |--embed|, --headless) if stdin
|
||||||
< Start editing a new buffer, which is filled with text
|
is not a TTY then it is read as text, so "-" is implied: >
|
||||||
that is read from stdin. The commands that would normally be
|
echo text | nvim file
|
||||||
read from stdin will now be read from stderr. Example: >
|
|
||||||
find . -name "*.c" -print | nvim -
|
|
||||||
< The buffer will be marked modified, because it contains text
|
< The buffer will be marked modified, because it contains text
|
||||||
that needs to be saved. Except when in readonly mode, then
|
that needs to be saved (except for readonly |-R| mode).
|
||||||
the buffer is not marked modified. Example: >
|
|
||||||
ls | nvim -R -
|
To read stdin as Normal commands use |-s| with "-": >
|
||||||
< Starting in Ex mode: >
|
echo "ifoo" | nvim -s -
|
||||||
nvim -e -
|
< To read stdin as Ex commands use |-es| or |-e|: >
|
||||||
nvim -E
|
echo "echo getpid()" | nvim -e - -V1
|
||||||
< Start editing in |silent-mode|.
|
< To open a file literally named "-", put it after "--": >
|
||||||
|
echo foo | nvim -- -
|
||||||
|
< To read stdin as text with |--headless| use "-".
|
||||||
|
|
||||||
*-t* *-tag*
|
*-t* *-tag*
|
||||||
-t {tag} A tag. "tag" is looked up in the tags file, the associated
|
-t {tag} A tag. "tag" is looked up in the tags file, the associated
|
||||||
@@ -104,13 +102,6 @@ argument.
|
|||||||
(Only available when compiled with the |+startuptime|
|
(Only available when compiled with the |+startuptime|
|
||||||
feature).
|
feature).
|
||||||
|
|
||||||
*--literal*
|
|
||||||
--literal Take file names literally, don't expand wildcards. Not needed
|
|
||||||
for Unix, because Vim always takes file names literally (the
|
|
||||||
shell expands wildcards).
|
|
||||||
Applies to all the names, also the ones that come before this
|
|
||||||
argument.
|
|
||||||
|
|
||||||
*-+*
|
*-+*
|
||||||
+[num] The cursor will be positioned on line "num" for the first
|
+[num] The cursor will be positioned on line "num" for the first
|
||||||
file being edited. If "num" is missing, the cursor will be
|
file being edited. If "num" is missing, the cursor will be
|
||||||
@@ -200,28 +191,24 @@ argument.
|
|||||||
*-E*
|
*-E*
|
||||||
-E Start Vim in improved Ex mode |gQ|.
|
-E Start Vim in improved Ex mode |gQ|.
|
||||||
|
|
||||||
*-s-ex* *silent-mode*
|
*-es* *-Es*
|
||||||
-s Silent or batch mode. Only when "-s" is preceded by the "-e"
|
-es *-s-ex* *silent-mode*
|
||||||
argument. Otherwise see |-s|, which does take an argument
|
-Es Silent or batch mode: execute Ex commands from a file instead
|
||||||
while this use of "-s" doesn't. To be used when Vim is used
|
of a terminal. Special case of |-s| (which takes an argument
|
||||||
to execute Ex commands from a file instead of a terminal.
|
while "-es" doesn't). Disables most prompts, messages,
|
||||||
Switches off most prompts and informative messages. Also
|
warnings and errors.
|
||||||
warnings and error messages. The output of these commands is
|
Output of these commands is displayed (to stdout):
|
||||||
displayed (to stdout):
|
|
||||||
:print
|
:print
|
||||||
:list
|
:list
|
||||||
:number
|
:number
|
||||||
:set to display option values.
|
:set to display option values.
|
||||||
When 'verbose' is non-zero messages are printed (for
|
When 'verbose' is set messages are printed to stderr, e.g.: >
|
||||||
debugging, to stderr).
|
echo foo | nvim -V1 -es
|
||||||
|
<
|
||||||
|
User |init.vim| is skipped (unless given with |-u|).
|
||||||
|$TERM| is not used.
|
|$TERM| is not used.
|
||||||
If Vim appears to be stuck try typing "qa!<Enter>". You don't
|
|
||||||
get a prompt thus you can't see Vim is waiting for you to type
|
|
||||||
something.
|
|
||||||
Initializations are skipped (except the ones given with the
|
|
||||||
"-u" argument).
|
|
||||||
Example: >
|
Example: >
|
||||||
vim -es < thefilter thefile
|
printf "put ='foo'\n%%print\n" | nvim -es
|
||||||
<
|
<
|
||||||
*-b*
|
*-b*
|
||||||
-b Binary mode. File I/O will only recognize <NL> to separate
|
-b Binary mode. File I/O will only recognize <NL> to separate
|
||||||
@@ -249,14 +236,14 @@ argument.
|
|||||||
for reading or writing a ShaDa file. Can be used to find
|
for reading or writing a ShaDa file. Can be used to find
|
||||||
out what is happening upon startup and exit.
|
out what is happening upon startup and exit.
|
||||||
Example: >
|
Example: >
|
||||||
vim -V8 foobar
|
nvim -V8
|
||||||
|
|
||||||
-V[N]{filename}
|
-V[N]{filename}
|
||||||
Like -V and set 'verbosefile' to {filename}. The result is
|
Like -V and set 'verbosefile' to {filename}. Messages are not
|
||||||
that messages are not displayed but written to the file
|
displayed; instead they are written to the file {filename}.
|
||||||
{filename}. {filename} must not start with a digit.
|
{filename} must not start with a digit.
|
||||||
Example: >
|
Example: >
|
||||||
vim -V20vimlog foobar
|
nvim -V20vimlog
|
||||||
<
|
<
|
||||||
*-D*
|
*-D*
|
||||||
-D Debugging. Go to debugging mode when executing the first
|
-D Debugging. Go to debugging mode when executing the first
|
||||||
@@ -324,12 +311,15 @@ argument.
|
|||||||
":rsh" or ":wsh" are used. See also |shada-file|.
|
":rsh" or ":wsh" are used. See also |shada-file|.
|
||||||
|
|
||||||
*-s*
|
*-s*
|
||||||
-s {scriptin} The script file "scriptin" is read. The characters in the
|
-s {scriptin} Read script file {scriptin}, interpreting characters as
|
||||||
file are interpreted as if you had typed them. The same can
|
Normal-mode input. The same can be done with ":source!": >
|
||||||
be done with the command ":source! {scriptin}". If the end
|
:source! {scriptin}
|
||||||
of the file is reached before the editor exits, further
|
< Reads from stdin if {scriptin} is "-": >
|
||||||
characters are read from the keyboard. Only works when not
|
echo "ifoo" | nvim -s -
|
||||||
started in Ex mode, see |-s-ex|. See also |complex-repeat|.
|
< If the end of the file is reached before Nvim exits, further
|
||||||
|
characters are read from the keyboard.
|
||||||
|
|
||||||
|
Does not work with |-es|. See also |complex-repeat|.
|
||||||
|
|
||||||
*-w_nr*
|
*-w_nr*
|
||||||
-w {number}
|
-w {number}
|
||||||
@@ -349,9 +339,34 @@ argument.
|
|||||||
*--api-info*
|
*--api-info*
|
||||||
--api-info Print msgpack-encoded |api-metadata| and exit.
|
--api-info Print msgpack-encoded |api-metadata| and exit.
|
||||||
|
|
||||||
|
*--embed*
|
||||||
|
--embed Use stdin/stdout as a msgpack-RPC channel, so applications can
|
||||||
|
embed and control Nvim via the |rpc-api|. Implies |--headless|.
|
||||||
|
Equivalent to: >
|
||||||
|
nvim --headless --cmd "call stdioopen({'rpc': v:true})"
|
||||||
|
<
|
||||||
|
See also |channel-stdio|.
|
||||||
|
|
||||||
*--headless*
|
*--headless*
|
||||||
--headless Do not start the built-in UI.
|
--headless Do not start the default UI, so stdio can be used as an
|
||||||
See also |silent-mode|, which does start a (limited) UI.
|
arbitrary communication channel. |channel-stdio|
|
||||||
|
|
||||||
|
Also useful for scripting (tests) to see messages that would
|
||||||
|
not be printed by |-es|.
|
||||||
|
|
||||||
|
To detect if a UI is available, check if |nvim_list_uis()| is
|
||||||
|
empty after |VimEnter|.
|
||||||
|
|
||||||
|
To read stdin as text, "-" must be given explicitly:
|
||||||
|
--headless cannot assume that stdin is just text. >
|
||||||
|
echo foo | nvim --headless +"%print" +"q!" -
|
||||||
|
<
|
||||||
|
See also |--embed|.
|
||||||
|
See also |-es|, which also disables most messages.
|
||||||
|
|
||||||
|
--listen {addr} *--listen*
|
||||||
|
Start |RPC| server on pipe or TCP address {addr}. Sets the
|
||||||
|
primary listen address |v:servername| to {addr}. |serverstart()|
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
2. Initialization *initialization* *startup*
|
2. Initialization *initialization* *startup*
|
||||||
@@ -437,15 +452,14 @@ accordingly. Vim proceeds in this order:
|
|||||||
:runtime! filetype.vim
|
:runtime! filetype.vim
|
||||||
:runtime! ftplugin.vim
|
:runtime! ftplugin.vim
|
||||||
:runtime! indent.vim
|
:runtime! indent.vim
|
||||||
< This step is skipped if ":filetype ..." was called before now or if
|
< Skipped if ":filetype … off" was called or if the "-u NONE" command
|
||||||
the "-u NONE" command line argument was given.
|
line argument was given.
|
||||||
|
|
||||||
5. Enable syntax highlighting.
|
5. Enable syntax highlighting.
|
||||||
This does the same as the command: >
|
This does the same as the command: >
|
||||||
:runtime! syntax/syntax.vim
|
:runtime! syntax/syntax.vim
|
||||||
< Note: This enables filetype detection even if ":filetype off" was
|
< Skipped if ":syntax off" was called or if the "-u NONE" command
|
||||||
called before now.
|
line argument was given.
|
||||||
This step is skipped if the "-u NONE" command line argument was given.
|
|
||||||
|
|
||||||
6. Load the plugin scripts. *load-plugins*
|
6. Load the plugin scripts. *load-plugins*
|
||||||
This does the same as the command: >
|
This does the same as the command: >
|
||||||
@@ -608,27 +622,15 @@ there is not enough room, you will see only part of it).
|
|||||||
To avoid the intro message on startup, add the 'I' flag to 'shortmess'.
|
To avoid the intro message on startup, add the 'I' flag to 'shortmess'.
|
||||||
|
|
||||||
*info-message*
|
*info-message*
|
||||||
The |--help| and |--version| arguments cause Vim to print a message and then
|
The |--help| and |--version| arguments cause Nvim to print a message and then
|
||||||
exit. Normally the message is sent to stdout, thus can be redirected to a
|
exit. Normally the message is sent to stdout, thus can be redirected to a
|
||||||
file with: >
|
file with: >
|
||||||
|
|
||||||
vim --help >file
|
nvim --help >file
|
||||||
|
|
||||||
From inside Vim: >
|
From inside Nvim: >
|
||||||
|
|
||||||
:read !vim --help
|
:read !nvim --help
|
||||||
|
|
||||||
When using gvim, it detects that it might have been started from the desktop,
|
|
||||||
without a terminal to show messages on. This is detected when both stdout and
|
|
||||||
stderr are not a tty. This breaks the ":read" command, as used in the example
|
|
||||||
above. To make it work again, set 'shellredir' to ">" instead of the default
|
|
||||||
">&": >
|
|
||||||
|
|
||||||
:set shellredir=>
|
|
||||||
:read !gvim --help
|
|
||||||
|
|
||||||
This still won't work for systems where gvim does not use stdout at all
|
|
||||||
though.
|
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
3. $VIM and $VIMRUNTIME
|
3. $VIM and $VIMRUNTIME
|
||||||
@@ -682,25 +684,17 @@ CTRL-Z Suspend Vim, like ":stop".
|
|||||||
Command-line mode, the CTRL-Z is inserted as a normal
|
Command-line mode, the CTRL-Z is inserted as a normal
|
||||||
character. In Visual mode Vim goes back to Normal
|
character. In Visual mode Vim goes back to Normal
|
||||||
mode.
|
mode.
|
||||||
Note: if CTRL-Z undoes a change see |mswin.vim|.
|
|
||||||
|
|
||||||
|
|
||||||
:sus[pend][!] or *:sus* *:suspend* *:st* *:stop*
|
:sus[pend][!] or *:sus* *:suspend* *:st* *:stop*
|
||||||
:st[op][!] Suspend Vim.
|
:st[op][!] Suspend Vim. Vim will continue if you make it the
|
||||||
|
foreground job again.
|
||||||
If the '!' is not given and 'autowrite' is set, every
|
If the '!' is not given and 'autowrite' is set, every
|
||||||
buffer with changes and a file name is written out.
|
buffer with changes and a file name is written out.
|
||||||
If the '!' is given or 'autowrite' is not set, changed
|
If the '!' is given or 'autowrite' is not set, changed
|
||||||
buffers are not written, don't forget to bring Vim
|
buffers are not written, don't forget to bring Vim
|
||||||
back to the foreground later!
|
back to the foreground later!
|
||||||
|
|
||||||
In the GUI, suspending is implemented as iconising gvim. In Windows 95/NT,
|
In the GUI, suspending is implementation-defined.
|
||||||
gvim is minimized.
|
|
||||||
|
|
||||||
On many Unix systems, it is possible to suspend Vim with CTRL-Z. This is only
|
|
||||||
possible in Normal and Visual mode (see next chapter, |vim-modes|). Vim will
|
|
||||||
continue if you make it the foreground job again. On other systems, CTRL-Z
|
|
||||||
will start a new shell. This is the same as the ":sh" command. Vim will
|
|
||||||
continue if you exit from the shell.
|
|
||||||
|
|
||||||
In X-windows the selection is disowned when Vim suspends. this means you
|
In X-windows the selection is disowned when Vim suspends. this means you
|
||||||
can't paste it in another application (since Vim is going to sleep an attempt
|
can't paste it in another application (since Vim is going to sleep an attempt
|
||||||
@@ -1356,12 +1350,12 @@ file when reading and include:
|
|||||||
complete MessagePack object.
|
complete MessagePack object.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
9. Standard Paths
|
9. Standard Paths *standard-path*
|
||||||
|
|
||||||
Nvim stores configuration and data in standard locations. Plugins are strongly
|
Nvim stores configuration and data in standard locations. Plugins are strongly
|
||||||
encouraged to follow this pattern also.
|
encouraged to follow this pattern also.
|
||||||
|
|
||||||
*base-directories* *xdg*
|
*base-directories* *xdg*
|
||||||
The "base" (root) directories conform to the XDG Base Directory Specification.
|
The "base" (root) directories conform to the XDG Base Directory Specification.
|
||||||
https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html
|
https://specifications.freedesktop.org/basedir-spec/basedir-spec-latest.html
|
||||||
The $XDG_CONFIG_HOME and $XDG_DATA_HOME environment variables are used if they
|
The $XDG_CONFIG_HOME and $XDG_DATA_HOME environment variables are used if they
|
||||||
@@ -1370,24 +1364,21 @@ exist, otherwise default values (listed below) are used.
|
|||||||
Note: Throughout the user manual these defaults are used as placeholders, e.g.
|
Note: Throughout the user manual these defaults are used as placeholders, e.g.
|
||||||
"~/.config" is understood to mean "$XDG_CONFIG_HOME or ~/.config".
|
"~/.config" is understood to mean "$XDG_CONFIG_HOME or ~/.config".
|
||||||
|
|
||||||
CONFIG DIRECTORY *$XDG_CONFIG_HOME*
|
CONFIG DIRECTORY *$XDG_CONFIG_HOME*
|
||||||
Base Nvim ~
|
Base Nvim ~
|
||||||
Unix: ~/.config ~/.config/nvim
|
Unix: ~/.config ~/.config/nvim
|
||||||
Windows: ~/AppData/Local ~/AppData/Local/nvim
|
Windows: ~/AppData/Local ~/AppData/Local/nvim
|
||||||
|
|
||||||
DATA DIRECTORY *$XDG_DATA_HOME*
|
DATA DIRECTORY *$XDG_DATA_HOME*
|
||||||
Base Nvim ~
|
Base Nvim ~
|
||||||
Unix: ~/.local/share ~/.local/share/nvim
|
Unix: ~/.local/share ~/.local/share/nvim
|
||||||
Windows: ~/AppData/Local ~/AppData/Local/nvim-data
|
Windows: ~/AppData/Local ~/AppData/Local/nvim-data
|
||||||
|
|
||||||
STANDARD PATHS *standard-path*
|
LOG FILE *$NVIM_LOG_FILE*
|
||||||
|
Besides 'debug' and 'verbose', Nvim keeps a general log file for internal
|
||||||
*$NVIM_LOG_FILE*
|
debugging, plugins and RPC clients. >
|
||||||
Besides 'debug' and 'verbose', Nvim has a low-level "log of last resort" that
|
|
||||||
is written directly to the filesystem. This log may also be used by plugins or
|
|
||||||
RPC clients for debugging. $NVIM_LOG_FILE contains the log file path: >
|
|
||||||
:echo $NVIM_LOG_FILE
|
:echo $NVIM_LOG_FILE
|
||||||
Usually the file is ~/.local/share/nvim/log unless that path is inaccessible
|
Usually the file is ~/.local/share/nvim/log unless that path is inaccessible
|
||||||
or if $NVIM_LOG_FILE was set before |startup|.
|
or if $NVIM_LOG_FILE was set before |startup|.
|
||||||
|
|
||||||
vim:tw=78:ts=8:ft=help:norl:
|
vim:noet:tw=78:ts=8:ft=help:norl:
|
||||||
|
@@ -4709,17 +4709,7 @@ ctermbg={color-nr} *highlight-ctermbg*
|
|||||||
"cterm". For example, on some systems "cterm=bold ctermfg=3" gives
|
"cterm". For example, on some systems "cterm=bold ctermfg=3" gives
|
||||||
another color, on others you just get color 3.
|
another color, on others you just get color 3.
|
||||||
|
|
||||||
For an xterm this depends on your resources, and is a bit
|
The following names are recognized, with the color number used:
|
||||||
unpredictable. See your xterm documentation for the defaults. The
|
|
||||||
colors for a color-xterm can be changed from the .Xdefaults file.
|
|
||||||
Unfortunately this means that it's not possible to get the same colors
|
|
||||||
for each user.
|
|
||||||
|
|
||||||
The MSDOS standard colors are fixed (in a console window), so these
|
|
||||||
have been used for the names. But the meaning of color names in X11
|
|
||||||
are fixed, so these color settings have been used, to make the
|
|
||||||
highlighting settings portable (complicated, isn't it?). The
|
|
||||||
following names are recognized, with the color number used:
|
|
||||||
|
|
||||||
*cterm-colors*
|
*cterm-colors*
|
||||||
NR-16 NR-8 COLOR NAME ~
|
NR-16 NR-8 COLOR NAME ~
|
||||||
@@ -4919,6 +4909,8 @@ MatchParen The character under the cursor or just before it, if it
|
|||||||
|
|
||||||
*hl-ModeMsg*
|
*hl-ModeMsg*
|
||||||
ModeMsg 'showmode' message (e.g., "-- INSERT --")
|
ModeMsg 'showmode' message (e.g., "-- INSERT --")
|
||||||
|
*hl-MsgSeparator*
|
||||||
|
MsgSeparator Separator for scrolled messages, `msgsep` flag of 'display'
|
||||||
*hl-MoreMsg*
|
*hl-MoreMsg*
|
||||||
MoreMsg |more-prompt|
|
MoreMsg |more-prompt|
|
||||||
*hl-NonText*
|
*hl-NonText*
|
||||||
|
@@ -38,13 +38,13 @@ Otherwise Nvim cannot know what sequences your terminal expects, and weird
|
|||||||
or sub-optimal behavior will result (scrolling quirks, wrong colors, etc.).
|
or sub-optimal behavior will result (scrolling quirks, wrong colors, etc.).
|
||||||
|
|
||||||
$TERM is also important because it is mirrored by SSH to the remote session,
|
$TERM is also important because it is mirrored by SSH to the remote session,
|
||||||
unlike other common client-end environment variables ($COLORTERM,
|
unlike most other environment variables.
|
||||||
$XTERM_VERSION, $VTE_VERSION, $KONSOLE_PROFILE_NAME, $TERM_PROGRAM, ...).
|
|
||||||
|
|
||||||
For this terminal Set $TERM to |builtin-terms|
|
For this terminal Set $TERM to |builtin-terms|
|
||||||
-------------------------------------------------------------------------
|
-------------------------------------------------------------------------
|
||||||
iTerm (original) iterm, iTerm.app N
|
iTerm (original) iterm, iTerm.app N
|
||||||
iTerm2 (new capabilities) iterm2, iTerm2.app Y
|
iTerm2 (new capabilities) iterm2, iTerm2.app Y
|
||||||
|
Konsole konsole-256color N
|
||||||
anything libvte-based vte, vte-256color Y
|
anything libvte-based vte, vte-256color Y
|
||||||
(e.g. GNOME Terminal) (aliases: gnome, gnome-256color)
|
(e.g. GNOME Terminal) (aliases: gnome, gnome-256color)
|
||||||
tmux tmux, tmux-256color Y
|
tmux tmux, tmux-256color Y
|
||||||
@@ -232,11 +232,6 @@ correct values. See |:mode|.
|
|||||||
Slow and fast terminals *slow-fast-terminal*
|
Slow and fast terminals *slow-fast-terminal*
|
||||||
*slow-terminal*
|
*slow-terminal*
|
||||||
|
|
||||||
If you have a fast terminal you may like to set the 'ruler' option. The
|
|
||||||
cursor position is shown in the status line. If you are using horizontal
|
|
||||||
scrolling ('wrap' option off) consider setting 'sidescroll' to a small
|
|
||||||
number.
|
|
||||||
|
|
||||||
If you have a slow terminal you may want to reset the 'showcmd' and 'ruler'
|
If you have a slow terminal you may want to reset the 'showcmd' and 'ruler'
|
||||||
options. The command characters and cursor positions will not be shown in the
|
options. The command characters and cursor positions will not be shown in the
|
||||||
status line (which involves a lot of cursor motions and attribute changes for
|
status line (which involves a lot of cursor motions and attribute changes for
|
||||||
|
@@ -9,7 +9,7 @@ Nvim UI protocol *ui*
|
|||||||
Type |gO| to see the table of contents.
|
Type |gO| to see the table of contents.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
Introduction *ui-intro*
|
UI Events *ui-events*
|
||||||
|
|
||||||
GUIs can be implemented as external processes communicating with Nvim over the
|
GUIs can be implemented as external processes communicating with Nvim over the
|
||||||
RPC API. The UI model consists of a terminal-like grid with a single,
|
RPC API. The UI model consists of a terminal-like grid with a single,
|
||||||
@@ -30,10 +30,22 @@ a dictionary with these (optional) keys:
|
|||||||
`ext_cmdline` Externalize the cmdline. |ui-cmdline|
|
`ext_cmdline` Externalize the cmdline. |ui-cmdline|
|
||||||
`ext_wildmenu` Externalize the wildmenu. |ui-ext-wildmenu|
|
`ext_wildmenu` Externalize the wildmenu. |ui-ext-wildmenu|
|
||||||
|
|
||||||
Nvim will then send msgpack-rpc notifications, with the method name "redraw"
|
Specifying a non-existent option is an error. To facilitate an ui that
|
||||||
and a single argument, an array of screen update events.
|
supports different versions of Nvim, the |api-metadata| key `ui_options`
|
||||||
Update events are tuples whose first element is the event name and remaining
|
contains the list of supported options. Additionally Nvim currently requires
|
||||||
elements the event parameters.
|
that all connected UIs use the same set of widgets. Therefore the active
|
||||||
|
widgets will be the intersection of the requested widget sets of all connected
|
||||||
|
UIs. The "option_set" event will be used to specify which widgets actually are
|
||||||
|
active.
|
||||||
|
|
||||||
|
After attaching, Nvim will send msgpack-rpc notifications, with the method
|
||||||
|
name "redraw" and a single argument, an array of screen update events. Update
|
||||||
|
events are arrays whose first element is the event name and remaining elements
|
||||||
|
are each tuples of event parameters. This allows multiple events of the same
|
||||||
|
kind to be sent in a row without the event name being repeated. This batching
|
||||||
|
is mostly used for "put", as each "put" event just puts contents in one screen
|
||||||
|
cell, but clients must be prepared for multiple argument sets being batched
|
||||||
|
for all event kinds.
|
||||||
|
|
||||||
Events must be handled in order. The user should only see the updated screen
|
Events must be handled in order. The user should only see the updated screen
|
||||||
state after all events in the same "redraw" batch are processed (not any
|
state after all events in the same "redraw" batch are processed (not any
|
||||||
@@ -48,8 +60,8 @@ elements itself; Nvim will not draw those elements on the grid. This is
|
|||||||
controlled by the |ui-ext-options|.
|
controlled by the |ui-ext-options|.
|
||||||
|
|
||||||
Future versions of Nvim may add new update kinds and may append new parameters
|
Future versions of Nvim may add new update kinds and may append new parameters
|
||||||
to existing update kinds. Clients must be prepared to ignore such extensions
|
to existing update kinds. Clients must be prepared to ignore such extensions,
|
||||||
to be forward-compatible. |api-contract|
|
for forward-compatibility. |api-contract|
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
Global Events *ui-global*
|
Global Events *ui-global*
|
||||||
@@ -80,6 +92,29 @@ Global Events *ui-global*
|
|||||||
|
|
||||||
Some keys are missing in some modes.
|
Some keys are missing in some modes.
|
||||||
|
|
||||||
|
["option_set", name, value]
|
||||||
|
The value of ui related option `name` changed. The sent options are
|
||||||
|
listed below:
|
||||||
|
|
||||||
|
'arabicshape'
|
||||||
|
'ambiwidth'
|
||||||
|
'emoji'
|
||||||
|
'guifont'
|
||||||
|
'guifontset'
|
||||||
|
'guifontwide'
|
||||||
|
'linespace'
|
||||||
|
'showtabline'
|
||||||
|
'termguicolors'
|
||||||
|
`ext_*` (all |ui-ext-options|)
|
||||||
|
|
||||||
|
Options are not added to the list if their effects are already taken
|
||||||
|
care of. For instance, instead of forwarding the raw 'mouse' option
|
||||||
|
value, `mouse_on` and `mouse_off` directly indicate if mouse support
|
||||||
|
is active right now. Some options like 'ambiwidth' have already taken
|
||||||
|
effect on the grid, where appropriate empty cells are added, however
|
||||||
|
an ui might still use these options when rendering raw text sent from
|
||||||
|
Nvim, like the text of the cmdline when |ui-ext-cmdline| is set.
|
||||||
|
|
||||||
["mode_change", mode, mode_idx]
|
["mode_change", mode, mode_idx]
|
||||||
The mode changed. The first parameter `mode` is a string representing
|
The mode changed. The first parameter `mode` is a string representing
|
||||||
the current mode. `mode_idx` is an index into the array received in
|
the current mode. `mode_idx` is an index into the array received in
|
||||||
|
@@ -57,12 +57,11 @@ make them visible with: >
|
|||||||
==============================================================================
|
==============================================================================
|
||||||
*01.2* Vim installed *setup-vimrc_example*
|
*01.2* Vim installed *setup-vimrc_example*
|
||||||
|
|
||||||
It's not required for this tutorial, but we provide an example vimrc you may
|
To create an empty vimrc: >
|
||||||
use:
|
|
||||||
|
|
||||||
:!cp -i $VIMRUNTIME/vimrc_example.vim ~/.config/nvim/init.vim
|
:call mkdir(stdpath('config'),'p')
|
||||||
|
:exe 'edit' stdpath('config').'/init.vim'
|
||||||
If the file already exists you probably want to keep it.
|
:write
|
||||||
|
|
||||||
For more info see |vimrc|.
|
For more info see |vimrc|.
|
||||||
|
|
||||||
|
@@ -58,10 +58,9 @@ to write a Vim script file: |usr_41.txt|.
|
|||||||
==============================================================================
|
==============================================================================
|
||||||
*05.2* The example vimrc file explained *vimrc_example.vim*
|
*05.2* The example vimrc file explained *vimrc_example.vim*
|
||||||
|
|
||||||
In the first chapter was explained how the example vimrc file can be used.
|
In the first chapter was explained how to create a vimrc file. >
|
||||||
The file can be found here:
|
|
||||||
|
|
||||||
$VIMRUNTIME/vimrc_example.vim ~
|
:exe 'edit' stdpath('config').'/init.vim'
|
||||||
|
|
||||||
In this section we will explain the various commands used in this file. This
|
In this section we will explain the various commands used in this file. This
|
||||||
will give you hints about how to set up your own preferences. Not everything
|
will give you hints about how to set up your own preferences. Not everything
|
||||||
|
@@ -294,8 +294,6 @@ If you really don't want to see this message, you can add the 'A' flag to the
|
|||||||
disk.
|
disk.
|
||||||
'updatetime' Timeout after which the swap file is flushed to disk.
|
'updatetime' Timeout after which the swap file is flushed to disk.
|
||||||
'directory' List of directory names where to store the swap file.
|
'directory' List of directory names where to store the swap file.
|
||||||
'maxmem' Limit for memory usage before writing text to the swap file.
|
|
||||||
'maxmemtot' Same, but for all files in total.
|
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
|
|
||||||
|
@@ -207,21 +207,18 @@ g8 Print the hex values of the bytes used in the
|
|||||||
:sh[ell] Removed. |vim-differences| {Nvim}
|
:sh[ell] Removed. |vim-differences| {Nvim}
|
||||||
|
|
||||||
*:terminal* *:te*
|
*:terminal* *:te*
|
||||||
:te[rminal][!] [{cmd}] Execute {cmd} with 'shell' in a new |terminal| buffer.
|
:te[rminal][!] [{cmd}] Execute {cmd} with 'shell' in a new |terminal-emulator|
|
||||||
Equivalent to: >
|
buffer. Without {cmd}, start an interactive 'shell'.
|
||||||
:enew
|
|
||||||
:call termopen('{cmd}')
|
|
||||||
<
|
|
||||||
See |termopen()|.
|
|
||||||
|
|
||||||
Without {cmd}, start an interactive shell.
|
Type |i| to enter |Terminal-mode|, then keys are sent to
|
||||||
|
the job running in the terminal. Type <C-\><C-N> to
|
||||||
|
leave Terminal-mode. |CTRL-\_CTRL-N|
|
||||||
|
|
||||||
Creating the terminal buffer fails when changes have been
|
Fails if changes have been made to the current buffer,
|
||||||
made to the current buffer, unless 'hidden' is set.
|
unless 'hidden' is set.
|
||||||
|
|
||||||
To enter |Terminal-mode| automatically: >
|
To enter |Terminal-mode| automatically: >
|
||||||
autocmd BufEnter term://* startinsert
|
autocmd TermOpen * startinsert
|
||||||
autocmd BufLeave term://* stopinsert
|
|
||||||
<
|
<
|
||||||
*:!cmd* *:!* *E34*
|
*:!cmd* *:!* *E34*
|
||||||
:!{cmd} Execute {cmd} with 'shell'. See also |:terminal|.
|
:!{cmd} Execute {cmd} with 'shell'. See also |:terminal|.
|
||||||
@@ -256,8 +253,6 @@ g8 Print the hex values of the bytes used in the
|
|||||||
to a pipe (not a terminal). Use |:terminal| to run an
|
to a pipe (not a terminal). Use |:terminal| to run an
|
||||||
interactive shell connected to a terminal.
|
interactive shell connected to a terminal.
|
||||||
|
|
||||||
For Win32 also see |:!start|.
|
|
||||||
|
|
||||||
After the command has been executed, the timestamp and
|
After the command has been executed, the timestamp and
|
||||||
size of the current file is checked |timestamp|.
|
size of the current file is checked |timestamp|.
|
||||||
|
|
||||||
@@ -274,21 +269,6 @@ g8 Print the hex values of the bytes used in the
|
|||||||
< The screen is not redrawn then, thus you have to use
|
< The screen is not redrawn then, thus you have to use
|
||||||
CTRL-L or ":redraw!" if the command did display
|
CTRL-L or ":redraw!" if the command did display
|
||||||
something.
|
something.
|
||||||
*:!start*
|
|
||||||
:!start {cmd} (Windows only). Special-case of |:!| which works
|
|
||||||
asynchronously, for running a program that does not
|
|
||||||
affect the files you are editing.
|
|
||||||
Optional arguments (can only use one at a time):
|
|
||||||
/min window will be minimized
|
|
||||||
/b no console window will be opened
|
|
||||||
Note: If the process requires input, /b will get an
|
|
||||||
EOF error because its input stream (stdin) would be
|
|
||||||
redirected to \\.\NUL (stdout and stderr too).
|
|
||||||
|
|
||||||
Programs begun with :!start do not get passed Vim's
|
|
||||||
open file handles, which means they do not have to be
|
|
||||||
closed before Vim. To avoid this special treatment,
|
|
||||||
use ":! start".
|
|
||||||
|
|
||||||
*:!!*
|
*:!!*
|
||||||
:!! Repeat last ":!{cmd}".
|
:!! Repeat last ":!{cmd}".
|
||||||
|
@@ -38,18 +38,6 @@ Information for undo and text in registers is kept in memory, thus when making
|
|||||||
undo levels and the text that can be kept in registers. Other things are also
|
undo levels and the text that can be kept in registers. Other things are also
|
||||||
kept in memory: Command-line history, error messages for Quickfix mode, etc.
|
kept in memory: Command-line history, error messages for Quickfix mode, etc.
|
||||||
|
|
||||||
Memory usage limits
|
|
||||||
-------------------
|
|
||||||
|
|
||||||
The option 'maxmem' ('mm') is used to set the maximum memory used for one
|
|
||||||
buffer (in kilobytes). 'maxmemtot' is used to set the maximum memory used for
|
|
||||||
all buffers (in kilobytes). The defaults depend on the system used.
|
|
||||||
These are not hard limits, but tell Vim when to move text into a swap file.
|
|
||||||
If you don't like Vim to swap to a file, set 'maxmem' and 'maxmemtot' to a
|
|
||||||
very large value. The swap file will then only be used for recovery. If you
|
|
||||||
don't want a swap file at all, set 'updatecount' to 0, or use the "-n"
|
|
||||||
argument when starting Vim.
|
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
2. The most interesting additions *vim-additions*
|
2. The most interesting additions *vim-additions*
|
||||||
|
|
||||||
|
@@ -14,11 +14,10 @@ a complete and centralized reference of those differences.
|
|||||||
==============================================================================
|
==============================================================================
|
||||||
1. Configuration *nvim-configuration*
|
1. Configuration *nvim-configuration*
|
||||||
|
|
||||||
- Use `$XDG_CONFIG_HOME/nvim/init.vim` instead of `.vimrc` for storing
|
- Use `$XDG_CONFIG_HOME/nvim/init.vim` instead of `.vimrc` for configuration.
|
||||||
configuration.
|
|
||||||
- Use `$XDG_CONFIG_HOME/nvim` instead of `.vim` to store configuration files.
|
- Use `$XDG_CONFIG_HOME/nvim` instead of `.vim` to store configuration files.
|
||||||
- Use `$XDG_DATA_HOME/nvim/shada/main.shada` instead of `.viminfo` for persistent
|
- Use `$XDG_DATA_HOME/nvim/shada/main.shada` instead of `.viminfo` for persistent
|
||||||
session information.
|
session information. |shada|
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
2. Defaults *nvim-defaults*
|
2. Defaults *nvim-defaults*
|
||||||
@@ -32,8 +31,12 @@ a complete and centralized reference of those differences.
|
|||||||
- 'backupdir' defaults to .,~/.local/share/nvim/backup (|xdg|)
|
- 'backupdir' defaults to .,~/.local/share/nvim/backup (|xdg|)
|
||||||
- 'belloff' defaults to "all"
|
- 'belloff' defaults to "all"
|
||||||
- 'complete' doesn't include "i"
|
- 'complete' doesn't include "i"
|
||||||
|
- 'cscopeverbose' is enabled
|
||||||
- 'directory' defaults to ~/.local/share/nvim/swap// (|xdg|), auto-created
|
- 'directory' defaults to ~/.local/share/nvim/swap// (|xdg|), auto-created
|
||||||
- 'display' defaults to "lastline"
|
- 'display' defaults to "lastline,msgsep"
|
||||||
|
- 'encoding' is UTF-8 (cf. 'fileencoding' for file-content encoding)
|
||||||
|
- 'fillchars' defaults (in effect) to "vert:│,fold:·"
|
||||||
|
- 'fsync' is disabled
|
||||||
- 'formatoptions' defaults to "tcqj"
|
- 'formatoptions' defaults to "tcqj"
|
||||||
- 'history' defaults to 10000 (the maximum)
|
- 'history' defaults to 10000 (the maximum)
|
||||||
- 'hlsearch' is set by default
|
- 'hlsearch' is set by default
|
||||||
@@ -47,6 +50,7 @@ a complete and centralized reference of those differences.
|
|||||||
- 'ruler' is set by default
|
- 'ruler' is set by default
|
||||||
- 'sessionoptions' doesn't include "options"
|
- 'sessionoptions' doesn't include "options"
|
||||||
- 'showcmd' is set by default
|
- 'showcmd' is set by default
|
||||||
|
- 'sidescroll' defaults to 1
|
||||||
- 'smarttab' is set by default
|
- 'smarttab' is set by default
|
||||||
- 'tabpagemax' defaults to 50
|
- 'tabpagemax' defaults to 50
|
||||||
- 'tags' defaults to "./tags;,tags"
|
- 'tags' defaults to "./tags;,tags"
|
||||||
@@ -70,6 +74,7 @@ Providers
|
|||||||
Ruby plugins |provider-ruby|
|
Ruby plugins |provider-ruby|
|
||||||
Shared data |shada|
|
Shared data |shada|
|
||||||
Embedded terminal |terminal|
|
Embedded terminal |terminal|
|
||||||
|
VimL parser |nvim_parse_expression()|
|
||||||
XDG base directories |xdg|
|
XDG base directories |xdg|
|
||||||
|
|
||||||
USER EXPERIENCE ~
|
USER EXPERIENCE ~
|
||||||
@@ -113,20 +118,68 @@ by Nvim developers.
|
|||||||
|
|
||||||
FEATURES ~
|
FEATURES ~
|
||||||
|
|
||||||
"Outline": Type |gO| in |:Man| and |:help| pages to see a document outline.
|
Command-line highlighting:
|
||||||
|
The expression prompt (|@=|, |c_CTRL-R_=|, |i_CTRL-R_=|) is highlighted
|
||||||
|
using a built-in VimL expression parser. |expr-highlight|
|
||||||
|
*E5408* *E5409*
|
||||||
|
|input()|, |inputdialog()| support custom highlighting. |input()-highlight|
|
||||||
|
*g:Nvim_color_cmdline*
|
||||||
|
(Experimental) Command-line (|:|) is colored by callback defined in
|
||||||
|
`g:Nvim_color_cmdline` (this callback is for testing only, and will be
|
||||||
|
removed in the future).
|
||||||
|
|
||||||
|META| (ALT) chords are recognized, even in the terminal. Any |<M-| mapping
|
Commands:
|
||||||
will work. Some examples: <M-1>, <M-2>, <M-BS>, <M-Del>, <M-Ins>, <M-/>,
|
|:checkhealth|
|
||||||
<M-\>, <M-Space>, <M-Enter>, <M-=>, <M-->, <M-?>, <M-$>, ...
|
|:cquit| can use [count] to set the exit code
|
||||||
META chords are case-sensitive: <M-a> and <M-A> are two different keycodes.
|
|:drop| is always available
|
||||||
|
|:Man| is available by default, with many improvements such as completion
|
||||||
|
|:tchdir| tab-local |current-directory|
|
||||||
|
|
||||||
Some `CTRL-SHIFT-...` key chords are distinguished from `CTRL-...` variants
|
Events:
|
||||||
(even in the terminal). Specifically, the following are known to work:
|
|DirChanged|
|
||||||
<C-Tab>, <C-S-Tab>, <C-BS>, <C-S-BS>, <C-Enter>, <C-S-Enter>
|
|TabNewEntered|
|
||||||
|
|TermClose|
|
||||||
|
|TermOpen|
|
||||||
|
|TextYankPost|
|
||||||
|
|VimResume|
|
||||||
|
|VimSuspend|
|
||||||
|
|
||||||
|
Functions:
|
||||||
|
|dictwatcheradd()| notifies a callback whenever a |Dict| is modified
|
||||||
|
|dictwatcherdel()|
|
||||||
|
|menu_get()|
|
||||||
|
|msgpackdump()|, |msgpackparse()| provide msgpack de/serialization
|
||||||
|
|stdpath()|
|
||||||
|
|system()|, |systemlist()| can run {cmd} directly (without 'shell')
|
||||||
|
|
||||||
|
Highlight groups:
|
||||||
|
|expr-highlight| highlight groups (prefixed with "Nvim")
|
||||||
|
|hl-NormalNC| highlights non-current windows
|
||||||
|
|hl-MsgSeparator| highlights separator for scrolled messages
|
||||||
|
|hl-QuickFixLine|
|
||||||
|
|hl-Substitute|
|
||||||
|
|hl-TermCursor|
|
||||||
|
|hl-TermCursorNC|
|
||||||
|
|hl-Whitespace| highlights 'listchars' whitespace
|
||||||
|
|
||||||
|
Input:
|
||||||
|
ALT (|META|) chords always work (even in the |TUI|). Map |<M-| with any key:
|
||||||
|
<M-1>, <M-BS>, <M-Del>, <M-Ins>, <M-/>, <M-\>, <M-Space>, <M-Enter>, etc.
|
||||||
|
Case-sensitive: <M-a> and <M-A> are two different keycodes.
|
||||||
|
|
||||||
|
ALT in insert-mode behaves like <Esc> if not mapped. |i_ALT|
|
||||||
|
|
||||||
|
Mappings:
|
||||||
|
|<Cmd>| pseudokey
|
||||||
|
|
||||||
|
Normal commands:
|
||||||
|
"Outline": Type |gO| in |:Man| and |:help| pages to see a document outline.
|
||||||
|
|
||||||
Options:
|
Options:
|
||||||
'cpoptions' flags: |cpo-_|
|
'cpoptions' flags: |cpo-_|
|
||||||
|
'display' flag `msgsep` to minimize scrolling when showing messages
|
||||||
'guicursor' works in the terminal
|
'guicursor' works in the terminal
|
||||||
|
'fillchars' flag `msgsep` (see 'display' above)
|
||||||
'inccommand' shows interactive results for |:substitute|-like commands
|
'inccommand' shows interactive results for |:substitute|-like commands
|
||||||
'scrollback'
|
'scrollback'
|
||||||
'statusline' supports unlimited alignment sections
|
'statusline' supports unlimited alignment sections
|
||||||
@@ -139,66 +192,20 @@ Variables:
|
|||||||
|v:progpath| is always absolute ("full")
|
|v:progpath| is always absolute ("full")
|
||||||
|v:windowid| is always available (for use by external UIs)
|
|v:windowid| is always available (for use by external UIs)
|
||||||
|
|
||||||
Commands:
|
|
||||||
|:checkhealth|
|
|
||||||
|:drop| is available on all platforms
|
|
||||||
|:Man| is available by default, with many improvements such as completion
|
|
||||||
|:tchdir| tab-local |current-directory|
|
|
||||||
|
|
||||||
Functions:
|
|
||||||
|dictwatcheradd()| notifies a callback whenever a |Dict| is modified
|
|
||||||
|dictwatcherdel()|
|
|
||||||
|menu_get()|
|
|
||||||
|msgpackdump()|, |msgpackparse()| provide msgpack de/serialization
|
|
||||||
|
|
||||||
Events:
|
|
||||||
|DirChanged|
|
|
||||||
|TabNewEntered|
|
|
||||||
|TermClose|
|
|
||||||
|TermOpen|
|
|
||||||
|TextYankPost|
|
|
||||||
|
|
||||||
Highlight groups:
|
|
||||||
|hl-NormalNC| highlights non-current windows
|
|
||||||
|hl-QuickFixLine|
|
|
||||||
|hl-Substitute|
|
|
||||||
|hl-TermCursor|
|
|
||||||
|hl-TermCursorNC|
|
|
||||||
|hl-Whitespace| highlights 'listchars' whitespace
|
|
||||||
|
|
||||||
UI:
|
|
||||||
*E5408* *E5409* *g:Nvim_color_expr* *g:Nvim_color_cmdline*
|
|
||||||
Command-line coloring is supported. Only |input()| and |inputdialog()| may
|
|
||||||
be colored. For testing purposes expressions (e.g. |i_CTRL-R_=|) and regular
|
|
||||||
command-line (|:|) are colored by callbacks defined in `g:Nvim_color_expr`
|
|
||||||
and `g:Nvim_color_cmdline` respectively (these callbacks are for testing
|
|
||||||
only, and will be removed in a future version).
|
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
4. Changed features *nvim-features-changed*
|
4. Changed features *nvim-features-changed*
|
||||||
|
|
||||||
Nvim always builds with all features, in contrast to Vim which may have
|
Nvim always builds with all features, in contrast to Vim which may have
|
||||||
certain features removed/added at compile-time. This is like if Vim's "HUGE"
|
certain features removed/added at compile-time. |feature-compile|
|
||||||
build was the only Vim release type (except Nvim is smaller than Vim's "HUGE"
|
|
||||||
build).
|
|
||||||
|
|
||||||
If a Python interpreter is available on your `$PATH`, |:python| and |:python3|
|
If a Python interpreter is available on your `$PATH`, |:python| and |:python3|
|
||||||
are always available and may be used simultaneously in separate plugins. The
|
are always available and may be used simultaneously. See |provider-python|.
|
||||||
`neovim` pip package must be installed to use Python plugins in Nvim (see
|
|
||||||
|provider-python|).
|
|
||||||
|
|
||||||
Because of general |256-color| usage whereever possible, Nvim will even use
|
|
||||||
256-colour capability on Linux virtual terminals. Vim uses only 8 colours
|
|
||||||
plus bright foreground on Linux VTs.
|
|
||||||
|
|
||||||
Vim combines what is in its |builtin-terms| with what it reads from termcap,
|
|
||||||
and has a |ttybuiltin| setting to control how that combination works. Nvim
|
|
||||||
uses either one or the other of an external |terminfo| entry or the built-in
|
|
||||||
one. It does not attempt to mix data from the two.
|
|
||||||
|
|
||||||
|:!| does not support "interactive" commands. Use |:terminal| instead.
|
|:!| does not support "interactive" commands. Use |:terminal| instead.
|
||||||
(GUI Vim has a similar limitation, see ":help gui-pty" in Vim.)
|
(GUI Vim has a similar limitation, see ":help gui-pty" in Vim.)
|
||||||
|
|
||||||
|
:!start is not special-cased on Windows.
|
||||||
|
|
||||||
|system()| does not support writing/reading "backgrounded" commands. |E5677|
|
|system()| does not support writing/reading "backgrounded" commands. |E5677|
|
||||||
|
|
||||||
|:redir| nested in |execute()| works.
|
|:redir| nested in |execute()| works.
|
||||||
@@ -215,8 +222,6 @@ makes things faster. |:terminal| output is never throttled.
|
|||||||
'p')) mkdir() will silently exit. In Vim this was an error.
|
'p')) mkdir() will silently exit. In Vim this was an error.
|
||||||
3. mkdir() error messages now include strerror() text when mkdir fails.
|
3. mkdir() error messages now include strerror() text when mkdir fails.
|
||||||
|
|
||||||
'encoding' is always "utf-8".
|
|
||||||
|
|
||||||
|string()| and |:echo| behaviour changed:
|
|string()| and |:echo| behaviour changed:
|
||||||
1. No maximum recursion depth limit is applied to nested container
|
1. No maximum recursion depth limit is applied to nested container
|
||||||
structures.
|
structures.
|
||||||
@@ -299,7 +304,45 @@ Highlight groups:
|
|||||||
|hl-ColorColumn|, |hl-CursorColumn| are lower priority than most other
|
|hl-ColorColumn|, |hl-CursorColumn| are lower priority than most other
|
||||||
groups
|
groups
|
||||||
|
|
||||||
The variable name "count" is no fallback for |v:count| anymore.
|
Macro/|recording| behavior
|
||||||
|
Replay of a macro recorded during :lmap produces the same actions as when it
|
||||||
|
was recorded. In Vim if a macro is recorded while using :lmap'ped keys then
|
||||||
|
the behaviour during record and replay differs.
|
||||||
|
|
||||||
|
'keymap' is implemented via :lmap instead of :lnoremap so that you can use
|
||||||
|
macros and 'keymap' at the same time. This also means you can use |:imap| on
|
||||||
|
the results of keys from 'keymap'.
|
||||||
|
|
||||||
|
Options:
|
||||||
|
'ttimeout', 'ttimeoutlen' behavior was simplified
|
||||||
|
|
||||||
|
Startup:
|
||||||
|
|-s| reads Normal commands from stdin if the script name is "-".
|
||||||
|
Reading text (instead of commands) from stdin |--|:
|
||||||
|
- works by default: "-" file is optional
|
||||||
|
- works in more cases: |-Es|, file args
|
||||||
|
|
||||||
|
TUI:
|
||||||
|
*:set-termcap*
|
||||||
|
Start Nvim with 'verbose' level 3 to show terminal capabilities: >
|
||||||
|
nvim -V3
|
||||||
|
<
|
||||||
|
*'term'* *E529* *E530* *E531*
|
||||||
|
'term' reflects the terminal type derived from |$TERM| and other environment
|
||||||
|
checks. For debugging only; not reliable during startup. >
|
||||||
|
:echo &term
|
||||||
|
< "builtin_x" means one of the |builtin-terms| was chosen, because the expected
|
||||||
|
terminfo file was not found on the system.
|
||||||
|
|
||||||
|
Nvim will use 256-colour capability on Linux virtual terminals. Vim uses
|
||||||
|
only 8 colours plus bright foreground on Linux VTs.
|
||||||
|
|
||||||
|
Vim combines what is in its |builtin-terms| with what it reads from terminfo,
|
||||||
|
and has a |ttybuiltin| setting to control how that combination works. Nvim
|
||||||
|
uses one or the other, it does not attempt to merge the two.
|
||||||
|
|
||||||
|
VimL (Vim script) compatibility:
|
||||||
|
`count` does not alias to |v:count|
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
5. Missing legacy features *nvim-features-missing*
|
5. Missing legacy features *nvim-features-missing*
|
||||||
@@ -307,7 +350,7 @@ The variable name "count" is no fallback for |v:count| anymore.
|
|||||||
Some legacy Vim features are not implemented:
|
Some legacy Vim features are not implemented:
|
||||||
|
|
||||||
- |if_py|: vim.bindeval() and vim.Function() are not supported
|
- |if_py|: vim.bindeval() and vim.Function() are not supported
|
||||||
- |if_lua|: the `vim` object is missing most legacy methods
|
- |if_lua|: the `vim` object is missing some legacy methods
|
||||||
- *if_perl*
|
- *if_perl*
|
||||||
- *if_mzscheme*
|
- *if_mzscheme*
|
||||||
- *if_tcl*
|
- *if_tcl*
|
||||||
@@ -317,65 +360,43 @@ Some legacy Vim features are not implemented:
|
|||||||
|
|
||||||
These Vim features were intentionally removed from Nvim.
|
These Vim features were intentionally removed from Nvim.
|
||||||
|
|
||||||
*'cp'* *'nocompatible'* *'nocp'* *'compatible'*
|
Aliases:
|
||||||
Nvim is always "non-compatible" with Vi.
|
ex (alias for "nvim -e")
|
||||||
":set nocompatible" is ignored
|
exim (alias for "nvim -E")
|
||||||
":set compatible" is an error
|
gex (GUI)
|
||||||
|
gview (GUI)
|
||||||
|
gvim (GUI)
|
||||||
|
gvimdiff (GUI)
|
||||||
|
rgview (GUI)
|
||||||
|
rgvim (GUI)
|
||||||
|
rview (alias for "nvim -RZ")
|
||||||
|
rvim (alias for "nvim -Z")
|
||||||
|
view (alias for "nvim -R")
|
||||||
|
vimdiff (alias for "nvim -d" |diff-mode|)
|
||||||
|
|
||||||
*'ed'* *'edcompatible'* *'noed'* *'noedcompatible'*
|
Commands:
|
||||||
Ed-compatible mode:
|
:fixdel
|
||||||
":set noedcompatible" is ignored
|
:helpfind
|
||||||
":set edcompatible" is an error
|
:mode (no longer accepts an argument)
|
||||||
|
:open
|
||||||
|
:Print
|
||||||
|
:shell
|
||||||
|
:smile
|
||||||
|
:tearoff
|
||||||
|
|
||||||
*t_xx* *:set-termcap* *termcap-options* *t_AB* *t_Sb* *t_vb* *t_SI*
|
Compile-time features:
|
||||||
Nvim does not have special `t_XX` options nor <t_XX> keycodes to configure
|
EBCDIC
|
||||||
terminal capabilities. Instead Nvim treats the terminal as any other UI. For
|
Emacs tags support
|
||||||
example, 'guicursor' sets the terminal cursor style if possible.
|
X11 integration (see |x11-selection|)
|
||||||
|
|
||||||
*'term'* *E529* *E530* *E531*
|
Options:
|
||||||
The 'term' option has a fixed value, present only for script compatibility and
|
|
||||||
intentionally not the same as any known terminal type name. It should be a
|
|
||||||
rare case in Nvim where one needs |term-dependent-settings|.
|
|
||||||
|
|
||||||
*termcap*
|
|
||||||
Nvim never uses the termcap database, only |terminfo| and |builtin-terms|.
|
|
||||||
|
|
||||||
*xterm-8bit* *xterm-8-bit*
|
|
||||||
Xterm can be run in a mode where it uses true 8-bit CSI. Supporting this
|
|
||||||
requires autodetection of whether the terminal is in UTF-8 mode or non-UTF-8
|
|
||||||
mode, as the 8-bit CSI character has to be written differently in each case.
|
|
||||||
Vim issues a "request version" sequence to the terminal at startup and looks
|
|
||||||
at how the terminal is sending CSI. Nvim does not issue such a sequence and
|
|
||||||
always uses 7-bit control sequences.
|
|
||||||
|
|
||||||
'ttyfast':
|
|
||||||
":set ttyfast" is ignored
|
|
||||||
":set nottyfast" is an error
|
|
||||||
|
|
||||||
Encryption support:
|
|
||||||
*'cryptmethod'* *'cm'*
|
|
||||||
*'key'*
|
|
||||||
|
|
||||||
MS-DOS support:
|
|
||||||
'bioskey'
|
|
||||||
'conskey'
|
|
||||||
|
|
||||||
Test functions:
|
|
||||||
test_alloc_fail()
|
|
||||||
test_autochdir()
|
|
||||||
test_disable_char_avail()
|
|
||||||
test_garbagecollect_now()
|
|
||||||
test_null_channel()
|
|
||||||
test_null_dict()
|
|
||||||
test_null_job()
|
|
||||||
test_null_list()
|
|
||||||
test_null_partial()
|
|
||||||
test_null_string()
|
|
||||||
test_settime()
|
|
||||||
|
|
||||||
Other options:
|
|
||||||
'antialias'
|
'antialias'
|
||||||
'cpoptions' (g j k H w < * - and all POSIX flags were removed)
|
'bioskey' (MS-DOS)
|
||||||
|
'conskey' (MS-DOS)
|
||||||
|
*'cp'* *'nocompatible'* *'nocp'* *'compatible'* (Nvim is always "nocompatible".)
|
||||||
|
'cpoptions' (gjkHw<*- and all POSIX flags were removed)
|
||||||
|
*'cryptmethod'* *'cm'* *'key'* (Vim encryption implementation)
|
||||||
|
*'ed'* *'edcompatible'* *'noed'* *'noedcompatible'*
|
||||||
'encoding' ("utf-8" is always used)
|
'encoding' ("utf-8" is always used)
|
||||||
'esckeys'
|
'esckeys'
|
||||||
'guioptions' "t" flag was removed
|
'guioptions' "t" flag was removed
|
||||||
@@ -385,6 +406,8 @@ Other options:
|
|||||||
*'imactivatekey'* *'imak'*
|
*'imactivatekey'* *'imak'*
|
||||||
*'imstatusfunc'* *'imsf'*
|
*'imstatusfunc'* *'imsf'*
|
||||||
*'macatsui'*
|
*'macatsui'*
|
||||||
|
'maxmem' Nvim delegates memory-management to the OS.
|
||||||
|
'maxmemtot' Nvim delegates memory-management to the OS.
|
||||||
*'restorescreen'* *'rs'* *'norestorescreen'* *'nors'*
|
*'restorescreen'* *'rs'* *'norestorescreen'* *'nors'*
|
||||||
'shelltype'
|
'shelltype'
|
||||||
*'shortname'* *'sn'* *'noshortname'* *'nosn'*
|
*'shortname'* *'sn'* *'noshortname'* *'nosn'*
|
||||||
@@ -398,38 +421,45 @@ Other options:
|
|||||||
*'ttymouse'* *'ttym'*
|
*'ttymouse'* *'ttym'*
|
||||||
*'ttyscroll'* *'tsl'*
|
*'ttyscroll'* *'tsl'*
|
||||||
*'ttytype'* *'tty'*
|
*'ttytype'* *'tty'*
|
||||||
|
'ttyfast'
|
||||||
'weirdinvert'
|
'weirdinvert'
|
||||||
|
|
||||||
Other commands:
|
Startup:
|
||||||
:Print
|
--literal (file args are always literal; to expand wildcards on Windows, use
|
||||||
:fixdel
|
|:n| e.g. `nvim +"n *"`)
|
||||||
:helpfind
|
Easy mode: eview, evim, nvim -y
|
||||||
:mode (no longer accepts an argument)
|
Vi mode: nvim -v
|
||||||
:open
|
|
||||||
:shell
|
|
||||||
:smile
|
|
||||||
:tearoff
|
|
||||||
|
|
||||||
Other compile-time features:
|
Test functions:
|
||||||
EBCDIC
|
test_alloc_fail()
|
||||||
Emacs tags support
|
test_autochdir()
|
||||||
X11 integration (see |x11-selection|)
|
test_disable_char_avail()
|
||||||
|
test_garbagecollect_now()
|
||||||
|
test_null_channel()
|
||||||
|
test_null_dict()
|
||||||
|
test_null_job()
|
||||||
|
test_null_list()
|
||||||
|
test_null_partial()
|
||||||
|
test_null_string()
|
||||||
|
test_override()
|
||||||
|
test_settime()
|
||||||
|
|
||||||
Nvim does not have a built-in GUI and hence the following aliases have been
|
TUI:
|
||||||
removed: gvim, gex, gview, rgvim, rgview
|
*t_xx* *termcap-options* *t_AB* *t_Sb* *t_vb* *t_SI*
|
||||||
|
Nvim does not have special `t_XX` options nor <t_XX> keycodes to configure
|
||||||
|
terminal capabilities. Instead Nvim treats the terminal as any other UI,
|
||||||
|
e.g. 'guicursor' sets the terminal cursor style if possible.
|
||||||
|
|
||||||
"Easy mode" (eview, evim, nvim -y)
|
*termcap*
|
||||||
"(g)vimdiff" (alias for "(g)nvim -d" |diff-mode|)
|
Nvim never uses the termcap database, only |terminfo| and |builtin-terms|.
|
||||||
"Vi mode" (nvim -v)
|
|
||||||
|
|
||||||
The ability to start nvim via the following aliases has been removed in favor
|
*xterm-8bit* *xterm-8-bit*
|
||||||
of just using their command line arguments:
|
Xterm can be run in a mode where it uses true 8-bit CSI. Supporting this
|
||||||
|
requires autodetection of whether the terminal is in UTF-8 mode or non-UTF-8
|
||||||
ex nvim -e
|
mode, as the 8-bit CSI character has to be written differently in each case.
|
||||||
exim nvim -E
|
Vim issues a "request version" sequence to the terminal at startup and looks
|
||||||
view nvim -R
|
at how the terminal is sending CSI. Nvim does not issue such a sequence and
|
||||||
rvim nvim -Z
|
always uses 7-bit control sequences.
|
||||||
rview nvim -RZ
|
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
vim:tw=78:ts=8:noet:ft=help:norl:
|
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||||
|
File diff suppressed because it is too large
Load Diff
@@ -6,7 +6,7 @@ if exists('b:did_ftplugin') || &filetype !=# 'man'
|
|||||||
endif
|
endif
|
||||||
let b:did_ftplugin = 1
|
let b:did_ftplugin = 1
|
||||||
|
|
||||||
let s:pager = !exists('b:man_sect')
|
let s:pager = get(s:, 'pager', 0) || !exists('b:man_sect')
|
||||||
|
|
||||||
if s:pager
|
if s:pager
|
||||||
call man#init_pager()
|
call man#init_pager()
|
||||||
@@ -35,7 +35,7 @@ if !exists('g:no_plugin_maps') && !exists('g:no_man_maps')
|
|||||||
nnoremap <silent> <buffer> <C-]> :Man<CR>
|
nnoremap <silent> <buffer> <C-]> :Man<CR>
|
||||||
nnoremap <silent> <buffer> K :Man<CR>
|
nnoremap <silent> <buffer> K :Man<CR>
|
||||||
nnoremap <silent> <buffer> <C-T> :call man#pop_tag()<CR>
|
nnoremap <silent> <buffer> <C-T> :call man#pop_tag()<CR>
|
||||||
if s:pager
|
if 1 == bufnr('%') || s:pager
|
||||||
nnoremap <silent> <buffer> <nowait> q :lclose<CR>:q<CR>
|
nnoremap <silent> <buffer> <nowait> q :lclose<CR>:q<CR>
|
||||||
else
|
else
|
||||||
nnoremap <silent> <buffer> <nowait> q :lclose<CR><C-W>c
|
nnoremap <silent> <buffer> <nowait> q :lclose<CR><C-W>c
|
||||||
|
168
runtime/lua/man.lua
Normal file
168
runtime/lua/man.lua
Normal file
@@ -0,0 +1,168 @@
|
|||||||
|
local buf_hls = {}
|
||||||
|
|
||||||
|
local function highlight_line(line, linenr)
|
||||||
|
local chars = {}
|
||||||
|
local prev_char = ''
|
||||||
|
local overstrike, escape = false, false
|
||||||
|
local hls = {} -- Store highlight groups as { attr, start, final }
|
||||||
|
local NONE, BOLD, UNDERLINE, ITALIC = 0, 1, 2, 3
|
||||||
|
local hl_groups = {[BOLD]="manBold", [UNDERLINE]="manUnderline", [ITALIC]="manItalic"}
|
||||||
|
local attr = NONE
|
||||||
|
local byte = 0 -- byte offset
|
||||||
|
|
||||||
|
local function end_attr_hl(attr)
|
||||||
|
for i, hl in ipairs(hls) do
|
||||||
|
if hl.attr == attr and hl.final == -1 then
|
||||||
|
hl.final = byte
|
||||||
|
hls[i] = hl
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function add_attr_hl(code)
|
||||||
|
local continue_hl = true
|
||||||
|
if code == 0 then
|
||||||
|
attr = NONE
|
||||||
|
continue_hl = false
|
||||||
|
elseif code == 1 then
|
||||||
|
attr = BOLD
|
||||||
|
elseif code == 22 then
|
||||||
|
attr = BOLD
|
||||||
|
continue_hl = false
|
||||||
|
elseif code == 3 then
|
||||||
|
attr = ITALIC
|
||||||
|
elseif code == 23 then
|
||||||
|
attr = ITALIC
|
||||||
|
continue_hl = false
|
||||||
|
elseif code == 4 then
|
||||||
|
attr = UNDERLINE
|
||||||
|
elseif code == 24 then
|
||||||
|
attr = UNDERLINE
|
||||||
|
continue_hl = false
|
||||||
|
else
|
||||||
|
attr = NONE
|
||||||
|
return
|
||||||
|
end
|
||||||
|
|
||||||
|
if continue_hl then
|
||||||
|
hls[#hls + 1] = {attr=attr, start=byte, final=-1}
|
||||||
|
else
|
||||||
|
if attr == NONE then
|
||||||
|
for a, _ in pairs(hl_groups) do
|
||||||
|
end_attr_hl(a)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
end_attr_hl(attr)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Break input into UTF8 code points. ASCII code points (from 0x00 to 0x7f)
|
||||||
|
-- can be represented in one byte. Any code point above that is represented by
|
||||||
|
-- a leading byte (0xc0 and above) and continuation bytes (0x80 to 0xbf, or
|
||||||
|
-- decimal 128 to 191).
|
||||||
|
for char in line:gmatch("[^\128-\191][\128-\191]*") do
|
||||||
|
if overstrike then
|
||||||
|
local last_hl = hls[#hls]
|
||||||
|
if char == prev_char then
|
||||||
|
if char == '_' and attr == UNDERLINE and last_hl and last_hl.final == byte then
|
||||||
|
-- This underscore is in the middle of an underlined word
|
||||||
|
attr = UNDERLINE
|
||||||
|
else
|
||||||
|
attr = BOLD
|
||||||
|
end
|
||||||
|
elseif prev_char == '_' then
|
||||||
|
-- char is underlined
|
||||||
|
attr = UNDERLINE
|
||||||
|
elseif prev_char == '+' and char == 'o' then
|
||||||
|
-- bullet (overstrike text '+^Ho')
|
||||||
|
attr = BOLD
|
||||||
|
char = '·'
|
||||||
|
elseif prev_char == '·' and char == 'o' then
|
||||||
|
-- bullet (additional handling for '+^H+^Ho^Ho')
|
||||||
|
attr = BOLD
|
||||||
|
char = '·'
|
||||||
|
else
|
||||||
|
-- use plain char
|
||||||
|
attr = NONE
|
||||||
|
end
|
||||||
|
|
||||||
|
-- Grow the previous highlight group if possible
|
||||||
|
if last_hl and last_hl.attr == attr and last_hl.final == byte then
|
||||||
|
last_hl.final = byte + #char
|
||||||
|
else
|
||||||
|
hls[#hls + 1] = {attr=attr, start=byte, final=byte + #char}
|
||||||
|
end
|
||||||
|
|
||||||
|
overstrike = false
|
||||||
|
prev_char = ''
|
||||||
|
byte = byte + #char
|
||||||
|
chars[#chars + 1] = char
|
||||||
|
elseif escape then
|
||||||
|
-- Use prev_char to store the escape sequence
|
||||||
|
prev_char = prev_char .. char
|
||||||
|
-- We only want to match against SGR sequences, which consist of ESC
|
||||||
|
-- followed by '[', then a series of parameter and intermediate bytes in
|
||||||
|
-- the range 0x20 - 0x3f, then 'm'. (See ECMA-48, sections 5.4 & 8.3.117)
|
||||||
|
local sgr = prev_char:match("^%[([\032-\063]*)m$")
|
||||||
|
if sgr then
|
||||||
|
local match = ''
|
||||||
|
while sgr and #sgr > 0 do
|
||||||
|
-- Match against SGR parameters, which may be separated by ';'
|
||||||
|
match, sgr = sgr:match("^(%d*);?(.*)")
|
||||||
|
add_attr_hl(match + 0) -- coerce to number
|
||||||
|
end
|
||||||
|
escape = false
|
||||||
|
elseif not prev_char:match("^%[[\032-\063]*$") then
|
||||||
|
-- Stop looking if this isn't a partial CSI sequence
|
||||||
|
escape = false
|
||||||
|
end
|
||||||
|
elseif char == "\027" then
|
||||||
|
escape = true
|
||||||
|
prev_char = ''
|
||||||
|
elseif char == "\b" then
|
||||||
|
overstrike = true
|
||||||
|
prev_char = chars[#chars]
|
||||||
|
byte = byte - #prev_char
|
||||||
|
chars[#chars] = nil
|
||||||
|
else
|
||||||
|
byte = byte + #char
|
||||||
|
chars[#chars + 1] = char
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
for _, hl in ipairs(hls) do
|
||||||
|
if hl.attr ~= NONE then
|
||||||
|
buf_hls[#buf_hls + 1] = {
|
||||||
|
0,
|
||||||
|
-1,
|
||||||
|
hl_groups[hl.attr],
|
||||||
|
linenr - 1,
|
||||||
|
hl.start,
|
||||||
|
hl.final
|
||||||
|
}
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
return table.concat(chars, '')
|
||||||
|
end
|
||||||
|
|
||||||
|
local function highlight_man_page()
|
||||||
|
local mod = vim.api.nvim_buf_get_option(0, "modifiable")
|
||||||
|
vim.api.nvim_buf_set_option(0, "modifiable", true)
|
||||||
|
|
||||||
|
local lines = vim.api.nvim_buf_get_lines(0, 0, -1, false)
|
||||||
|
for i, line in ipairs(lines) do
|
||||||
|
lines[i] = highlight_line(line, i)
|
||||||
|
end
|
||||||
|
vim.api.nvim_buf_set_lines(0, 0, -1, false, lines)
|
||||||
|
|
||||||
|
for _, args in ipairs(buf_hls) do
|
||||||
|
vim.api.nvim_buf_add_highlight(unpack(args))
|
||||||
|
end
|
||||||
|
buf_hls = {}
|
||||||
|
|
||||||
|
vim.api.nvim_buf_set_option(0, "modifiable", mod)
|
||||||
|
end
|
||||||
|
|
||||||
|
return { highlight_man_page = highlight_man_page }
|
@@ -1,7 +1,7 @@
|
|||||||
" Set options and add mapping such that Vim behaves a lot like MS-Windows
|
" Set options and add mapping such that Vim behaves a lot like MS-Windows
|
||||||
"
|
"
|
||||||
" Maintainer: Bram Moolenaar <Bram@vim.org>
|
" Maintainer: Bram Moolenaar <Bram@vim.org>
|
||||||
" Last change: 2012 Jul 25
|
" Last change: 2017 Oct 28
|
||||||
|
|
||||||
" bail out if this isn't wanted (mrsvim.vim uses this).
|
" bail out if this isn't wanted (mrsvim.vim uses this).
|
||||||
if exists("g:skip_loading_mswin") && g:skip_loading_mswin
|
if exists("g:skip_loading_mswin") && g:skip_loading_mswin
|
||||||
@@ -23,20 +23,22 @@ set backspace=indent,eol,start whichwrap+=<,>,[,]
|
|||||||
" backspace in Visual mode deletes selection
|
" backspace in Visual mode deletes selection
|
||||||
vnoremap <BS> d
|
vnoremap <BS> d
|
||||||
|
|
||||||
" CTRL-X and SHIFT-Del are Cut
|
if has("clipboard")
|
||||||
vnoremap <C-X> "+x
|
" CTRL-X and SHIFT-Del are Cut
|
||||||
vnoremap <S-Del> "+x
|
vnoremap <C-X> "+x
|
||||||
|
vnoremap <S-Del> "+x
|
||||||
|
|
||||||
" CTRL-C and CTRL-Insert are Copy
|
" CTRL-C and CTRL-Insert are Copy
|
||||||
vnoremap <C-C> "+y
|
vnoremap <C-C> "+y
|
||||||
vnoremap <C-Insert> "+y
|
vnoremap <C-Insert> "+y
|
||||||
|
|
||||||
" CTRL-V and SHIFT-Insert are Paste
|
" CTRL-V and SHIFT-Insert are Paste
|
||||||
map <C-V> "+gP
|
map <C-V> "+gP
|
||||||
map <S-Insert> "+gP
|
map <S-Insert> "+gP
|
||||||
|
|
||||||
cmap <C-V> <C-R>+
|
cmap <C-V> <C-R>+
|
||||||
cmap <S-Insert> <C-R>+
|
cmap <S-Insert> <C-R>+
|
||||||
|
endif
|
||||||
|
|
||||||
" Pasting blockwise and linewise selections is not possible in Insert and
|
" Pasting blockwise and linewise selections is not possible in Insert and
|
||||||
" Visual mode without the +virtualedit feature. They are pasted as if they
|
" Visual mode without the +virtualedit feature. They are pasted as if they
|
||||||
@@ -44,8 +46,10 @@ cmap <S-Insert> <C-R>+
|
|||||||
" Uses the paste.vim autoload script.
|
" Uses the paste.vim autoload script.
|
||||||
" Use CTRL-G u to have CTRL-Z only undo the paste.
|
" Use CTRL-G u to have CTRL-Z only undo the paste.
|
||||||
|
|
||||||
exe 'inoremap <script> <C-V> <C-G>u' . paste#paste_cmd['i']
|
if 1
|
||||||
exe 'vnoremap <script> <C-V> ' . paste#paste_cmd['v']
|
exe 'inoremap <script> <C-V> <C-G>u' . paste#paste_cmd['i']
|
||||||
|
exe 'vnoremap <script> <C-V> ' . paste#paste_cmd['v']
|
||||||
|
endif
|
||||||
|
|
||||||
imap <S-Insert> <C-V>
|
imap <S-Insert> <C-V>
|
||||||
vmap <S-Insert> <C-V>
|
vmap <S-Insert> <C-V>
|
||||||
@@ -99,6 +103,19 @@ inoremap <C-F4> <C-O><C-W>c
|
|||||||
cnoremap <C-F4> <C-C><C-W>c
|
cnoremap <C-F4> <C-C><C-W>c
|
||||||
onoremap <C-F4> <C-C><C-W>c
|
onoremap <C-F4> <C-C><C-W>c
|
||||||
|
|
||||||
|
if has("gui")
|
||||||
|
" CTRL-F is the search dialog
|
||||||
|
noremap <expr> <C-F> has("gui_running") ? ":promptfind\<CR>" : "/"
|
||||||
|
inoremap <expr> <C-F> has("gui_running") ? "\<C-\>\<C-O>:promptfind\<CR>" : "\<C-\>\<C-O>/"
|
||||||
|
cnoremap <expr> <C-F> has("gui_running") ? "\<C-\>\<C-C>:promptfind\<CR>" : "\<C-\>\<C-O>/"
|
||||||
|
|
||||||
|
" CTRL-H is the replace dialog,
|
||||||
|
" but in console, it might be backspace, so don't map it there
|
||||||
|
nnoremap <expr> <C-H> has("gui_running") ? ":promptrepl\<CR>" : "\<C-H>"
|
||||||
|
inoremap <expr> <C-H> has("gui_running") ? "\<C-\>\<C-O>:promptrepl\<CR>" : "\<C-H>"
|
||||||
|
cnoremap <expr> <C-H> has("gui_running") ? "\<C-\>\<C-C>:promptrepl\<CR>" : "\<C-H>"
|
||||||
|
endif
|
||||||
|
|
||||||
" restore 'cpoptions'
|
" restore 'cpoptions'
|
||||||
set cpo&
|
set cpo&
|
||||||
if 1
|
if 1
|
||||||
|
@@ -996,10 +996,6 @@ call append("$", "updatecount\tnumber of characters typed to cause a swap file u
|
|||||||
call append("$", " \tset uc=" . &uc)
|
call append("$", " \tset uc=" . &uc)
|
||||||
call append("$", "updatetime\ttime in msec after which the swap file will be updated")
|
call append("$", "updatetime\ttime in msec after which the swap file will be updated")
|
||||||
call append("$", " \tset ut=" . &ut)
|
call append("$", " \tset ut=" . &ut)
|
||||||
call append("$", "maxmem\tmaximum amount of memory in Kbyte used for one buffer")
|
|
||||||
call append("$", " \tset mm=" . &mm)
|
|
||||||
call append("$", "maxmemtot\tmaximum amount of memory in Kbyte used for all buffers")
|
|
||||||
call append("$", " \tset mmt=" . &mmt)
|
|
||||||
|
|
||||||
|
|
||||||
call <SID>Header("command line editing")
|
call <SID>Header("command line editing")
|
||||||
@@ -1087,6 +1083,9 @@ if has("quickfix")
|
|||||||
call <SID>OptionG("gp", &gp)
|
call <SID>OptionG("gp", &gp)
|
||||||
call append("$", "grepformat\tlist of formats for output of 'grepprg'")
|
call append("$", "grepformat\tlist of formats for output of 'grepprg'")
|
||||||
call <SID>OptionG("gfm", &gfm)
|
call <SID>OptionG("gfm", &gfm)
|
||||||
|
call append("$", "makeencoding\tencoding of the \":make\" and \":grep\" output")
|
||||||
|
call append("$", "\t(global or local to buffer)")
|
||||||
|
call <SID>OptionG("menc", &menc)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|
||||||
|
@@ -1,81 +0,0 @@
|
|||||||
" A Neovim plugin that implements GUI helper commands
|
|
||||||
if !has('win32') || !has('nvim') || exists('g:GuiLoaded')
|
|
||||||
finish
|
|
||||||
endif
|
|
||||||
let g:GuiLoaded = 1
|
|
||||||
|
|
||||||
" Close the GUI
|
|
||||||
function! GuiClose() abort
|
|
||||||
call rpcnotify(0, 'Gui', 'Close')
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" Notify the GUI when exiting Neovim
|
|
||||||
autocmd VimLeave * call GuiClose()
|
|
||||||
|
|
||||||
" A replacement for foreground()
|
|
||||||
function! GuiForeground() abort
|
|
||||||
call rpcnotify(0, 'Gui', 'Foreground')
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" Set maximized state for GUI window (1 is enabled, 0 disabled)
|
|
||||||
function! GuiWindowMaximized(enabled) abort
|
|
||||||
call rpcnotify(0, 'Gui', 'WindowMaximized', a:enabled)
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" Set fullscreen state for GUI window (1 is enabled, 0 disabled)
|
|
||||||
function! GuiWindowFullScreen(enabled) abort
|
|
||||||
call rpcnotify(0, 'Gui', 'WindowFullScreen', a:enabled)
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" Set GUI font
|
|
||||||
function! GuiFont(fname, ...) abort
|
|
||||||
let force = get(a:000, 0, 0)
|
|
||||||
call rpcnotify(0, 'Gui', 'Font', a:fname, force)
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" Set additional linespace
|
|
||||||
function! GuiLinespace(height) abort
|
|
||||||
call rpcnotify(0, 'Gui', 'Linespace', a:height)
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" Configure mouse hide behaviour (1 is enabled, 0 disabled)
|
|
||||||
function! GuiMousehide(enabled) abort
|
|
||||||
call rpcnotify(0, 'Gui', 'Mousehide', a:enabled)
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
" The GuiFont command. For compatibility there is also Guifont
|
|
||||||
function s:GuiFontCommand(fname, bang) abort
|
|
||||||
if a:fname ==# ''
|
|
||||||
if exists('g:GuiFont')
|
|
||||||
echo g:GuiFont
|
|
||||||
else
|
|
||||||
echo 'No GuiFont is set'
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
call GuiFont(a:fname, a:bang ==# '!')
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
command! -nargs=? -bang Guifont call s:GuiFontCommand("<args>", "<bang>")
|
|
||||||
command! -nargs=? -bang GuiFont call s:GuiFontCommand("<args>", "<bang>")
|
|
||||||
|
|
||||||
function s:GuiLinespaceCommand(height) abort
|
|
||||||
if a:height ==# ''
|
|
||||||
if exists('g:GuiLinespace')
|
|
||||||
echo g:GuiLinespace
|
|
||||||
else
|
|
||||||
echo 'No GuiLinespace is set'
|
|
||||||
endif
|
|
||||||
else
|
|
||||||
call GuiLinespace(a:height)
|
|
||||||
endif
|
|
||||||
endfunction
|
|
||||||
command! -nargs=? GuiLinespace call s:GuiLinespaceCommand("<args>")
|
|
||||||
|
|
||||||
" GuiDrop('file1', 'file2', ...) is similar to :drop file1 file2 ...
|
|
||||||
" but it calls fnameescape() over all arguments
|
|
||||||
function GuiDrop(...)
|
|
||||||
let l:fnames = deepcopy(a:000)
|
|
||||||
let l:args = map(l:fnames, 'fnameescape(v:val)')
|
|
||||||
exec 'drop '.join(l:args, ' ')
|
|
||||||
doautocmd BufEnter
|
|
||||||
endfunction
|
|
@@ -1,8 +1 @@
|
|||||||
function! s:complete(lead, _line, _pos) abort
|
autocmd CmdUndefined CheckHealth checkhealth
|
||||||
return sort(filter(map(globpath(&runtimepath, 'autoload/health/*', 1, 1),
|
|
||||||
\ 'fnamemodify(v:val, ":t:r")'),
|
|
||||||
\ 'empty(a:lead) || v:val[:strlen(a:lead)-1] ==# a:lead'))
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
command! -nargs=* -complete=customlist,s:complete CheckHealth
|
|
||||||
\ call health#check([<f-args>])
|
|
||||||
|
@@ -56,6 +56,6 @@ function! s:LoadRemotePlugins() abort
|
|||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
command! UpdateRemotePlugins call remote#host#UpdateRemotePlugins()
|
command! -bar UpdateRemotePlugins call remote#host#UpdateRemotePlugins()
|
||||||
|
|
||||||
call s:LoadRemotePlugins()
|
call s:LoadRemotePlugins()
|
||||||
|
@@ -1,11 +1,15 @@
|
|||||||
" Vim support file to detect file types in scripts
|
" Vim support file to detect file types in scripts
|
||||||
"
|
"
|
||||||
" Maintainer: Bram Moolenaar <Bram@vim.org>
|
" Maintainer: Bram Moolenaar <Bram@vim.org>
|
||||||
" Last change: 2017 Aug 27
|
" Last change: 2017 Nov 11
|
||||||
|
|
||||||
" This file is called by an autocommand for every file that has just been
|
" This file is called by an autocommand for every file that has just been
|
||||||
" loaded into a buffer. It checks if the type of file can be recognized by
|
" loaded into a buffer. It checks if the type of file can be recognized by
|
||||||
" the file contents. The autocommand is in $VIMRUNTIME/filetype.vim.
|
" the file contents. The autocommand is in $VIMRUNTIME/filetype.vim.
|
||||||
|
"
|
||||||
|
" Note that the pattern matches are done with =~# to avoid the value of the
|
||||||
|
" 'ignorecase' option making a difference. Where case is to be ignored use
|
||||||
|
" =~? instead. Do not use =~ anywhere.
|
||||||
|
|
||||||
|
|
||||||
" Only do the rest when the FileType autocommand has not been triggered yet.
|
" Only do the rest when the FileType autocommand has not been triggered yet.
|
||||||
@@ -28,12 +32,12 @@ set cpo&vim
|
|||||||
|
|
||||||
let s:line1 = getline(1)
|
let s:line1 = getline(1)
|
||||||
|
|
||||||
if s:line1 =~ "^#!"
|
if s:line1 =~# "^#!"
|
||||||
" A script that starts with "#!".
|
" A script that starts with "#!".
|
||||||
|
|
||||||
" Check for a line like "#!/usr/bin/env VAR=val bash". Turn it into
|
" Check for a line like "#!/usr/bin/env VAR=val bash". Turn it into
|
||||||
" "#!/usr/bin/bash" to make matching easier.
|
" "#!/usr/bin/bash" to make matching easier.
|
||||||
if s:line1 =~ '^#!\s*\S*\<env\s'
|
if s:line1 =~# '^#!\s*\S*\<env\s'
|
||||||
let s:line1 = substitute(s:line1, '\S\+=\S\+', '', 'g')
|
let s:line1 = substitute(s:line1, '\S\+=\S\+', '', 'g')
|
||||||
let s:line1 = substitute(s:line1, '\<env\s\+', '', '')
|
let s:line1 = substitute(s:line1, '\<env\s\+', '', '')
|
||||||
endif
|
endif
|
||||||
@@ -44,11 +48,11 @@ if s:line1 =~ "^#!"
|
|||||||
" "#!/usr/bin/env perl [path/args]"
|
" "#!/usr/bin/env perl [path/args]"
|
||||||
" If there is no path use the first word: "#!perl [path/args]".
|
" If there is no path use the first word: "#!perl [path/args]".
|
||||||
" Otherwise get the last word after a slash: "#!/usr/bin/perl [path/args]".
|
" Otherwise get the last word after a slash: "#!/usr/bin/perl [path/args]".
|
||||||
if s:line1 =~ '^#!\s*\a:[/\\]'
|
if s:line1 =~# '^#!\s*\a:[/\\]'
|
||||||
let s:name = substitute(s:line1, '^#!.*[/\\]\(\i\+\).*', '\1', '')
|
let s:name = substitute(s:line1, '^#!.*[/\\]\(\i\+\).*', '\1', '')
|
||||||
elseif s:line1 =~ '^#!.*\<env\>'
|
elseif s:line1 =~# '^#!.*\<env\>'
|
||||||
let s:name = substitute(s:line1, '^#!.*\<env\>\s\+\(\i\+\).*', '\1', '')
|
let s:name = substitute(s:line1, '^#!.*\<env\>\s\+\(\i\+\).*', '\1', '')
|
||||||
elseif s:line1 =~ '^#!\s*[^/\\ ]*\>\([^/\\]\|$\)'
|
elseif s:line1 =~# '^#!\s*[^/\\ ]*\>\([^/\\]\|$\)'
|
||||||
let s:name = substitute(s:line1, '^#!\s*\([^/\\ ]*\>\).*', '\1', '')
|
let s:name = substitute(s:line1, '^#!\s*\([^/\\ ]*\>\).*', '\1', '')
|
||||||
else
|
else
|
||||||
let s:name = substitute(s:line1, '^#!\s*\S*[/\\]\(\i\+\).*', '\1', '')
|
let s:name = substitute(s:line1, '^#!\s*\S*[/\\]\(\i\+\).*', '\1', '')
|
||||||
@@ -56,116 +60,116 @@ if s:line1 =~ "^#!"
|
|||||||
|
|
||||||
" tcl scripts may have #!/bin/sh in the first line and "exec wish" in the
|
" tcl scripts may have #!/bin/sh in the first line and "exec wish" in the
|
||||||
" third line. Suggested by Steven Atkinson.
|
" third line. Suggested by Steven Atkinson.
|
||||||
if getline(3) =~ '^exec wish'
|
if getline(3) =~# '^exec wish'
|
||||||
let s:name = 'wish'
|
let s:name = 'wish'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" Bourne-like shell scripts: bash bash2 ksh ksh93 sh
|
" Bourne-like shell scripts: bash bash2 ksh ksh93 sh
|
||||||
if s:name =~ '^\(bash\d*\|\|ksh\d*\|sh\)\>'
|
if s:name =~# '^\(bash\d*\|\|ksh\d*\|sh\)\>'
|
||||||
call SetFileTypeSH(s:line1) " defined in filetype.vim
|
call dist#ft#SetFileTypeSH(s:line1) " defined in filetype.vim
|
||||||
|
|
||||||
" csh scripts
|
" csh scripts
|
||||||
elseif s:name =~ '^csh\>'
|
elseif s:name =~# '^csh\>'
|
||||||
if exists("g:filetype_csh")
|
if exists("g:filetype_csh")
|
||||||
call SetFileTypeShell(g:filetype_csh)
|
call dist#ft#SetFileTypeShell(g:filetype_csh)
|
||||||
else
|
else
|
||||||
call SetFileTypeShell("csh")
|
call dist#ft#SetFileTypeShell("csh")
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" tcsh scripts
|
" tcsh scripts
|
||||||
elseif s:name =~ '^tcsh\>'
|
elseif s:name =~# '^tcsh\>'
|
||||||
call SetFileTypeShell("tcsh")
|
call dist#ft#SetFileTypeShell("tcsh")
|
||||||
|
|
||||||
" Z shell scripts
|
" Z shell scripts
|
||||||
elseif s:name =~ '^zsh\>'
|
elseif s:name =~# '^zsh\>'
|
||||||
set ft=zsh
|
set ft=zsh
|
||||||
|
|
||||||
" TCL scripts
|
" TCL scripts
|
||||||
elseif s:name =~ '^\(tclsh\|wish\|expectk\|itclsh\|itkwish\)\>'
|
elseif s:name =~# '^\(tclsh\|wish\|expectk\|itclsh\|itkwish\)\>'
|
||||||
set ft=tcl
|
set ft=tcl
|
||||||
|
|
||||||
" Expect scripts
|
" Expect scripts
|
||||||
elseif s:name =~ '^expect\>'
|
elseif s:name =~# '^expect\>'
|
||||||
set ft=expect
|
set ft=expect
|
||||||
|
|
||||||
" Gnuplot scripts
|
" Gnuplot scripts
|
||||||
elseif s:name =~ '^gnuplot\>'
|
elseif s:name =~# '^gnuplot\>'
|
||||||
set ft=gnuplot
|
set ft=gnuplot
|
||||||
|
|
||||||
" Makefiles
|
" Makefiles
|
||||||
elseif s:name =~ 'make\>'
|
elseif s:name =~# 'make\>'
|
||||||
set ft=make
|
set ft=make
|
||||||
|
|
||||||
" Lua
|
" Lua
|
||||||
elseif s:name =~ 'lua'
|
elseif s:name =~# 'lua'
|
||||||
set ft=lua
|
set ft=lua
|
||||||
|
|
||||||
" Perl 6
|
" Perl 6
|
||||||
elseif s:name =~ 'perl6'
|
elseif s:name =~# 'perl6'
|
||||||
set ft=perl6
|
set ft=perl6
|
||||||
|
|
||||||
" Perl
|
" Perl
|
||||||
elseif s:name =~ 'perl'
|
elseif s:name =~# 'perl'
|
||||||
set ft=perl
|
set ft=perl
|
||||||
|
|
||||||
" PHP
|
" PHP
|
||||||
elseif s:name =~ 'php'
|
elseif s:name =~# 'php'
|
||||||
set ft=php
|
set ft=php
|
||||||
|
|
||||||
" Python
|
" Python
|
||||||
elseif s:name =~ 'python'
|
elseif s:name =~# 'python'
|
||||||
set ft=python
|
set ft=python
|
||||||
|
|
||||||
" Groovy
|
" Groovy
|
||||||
elseif s:name =~ '^groovy\>'
|
elseif s:name =~# '^groovy\>'
|
||||||
set ft=groovy
|
set ft=groovy
|
||||||
|
|
||||||
" Ruby
|
" Ruby
|
||||||
elseif s:name =~ 'ruby'
|
elseif s:name =~# 'ruby'
|
||||||
set ft=ruby
|
set ft=ruby
|
||||||
|
|
||||||
" JavaScript
|
" JavaScript
|
||||||
elseif s:name =~ 'node\(js\)\=\>' || s:name =~ 'rhino\>'
|
elseif s:name =~# 'node\(js\)\=\>' || s:name =~# 'rhino\>'
|
||||||
set ft=javascript
|
set ft=javascript
|
||||||
|
|
||||||
" BC calculator
|
" BC calculator
|
||||||
elseif s:name =~ '^bc\>'
|
elseif s:name =~# '^bc\>'
|
||||||
set ft=bc
|
set ft=bc
|
||||||
|
|
||||||
" sed
|
" sed
|
||||||
elseif s:name =~ 'sed\>'
|
elseif s:name =~# 'sed\>'
|
||||||
set ft=sed
|
set ft=sed
|
||||||
|
|
||||||
" OCaml-scripts
|
" OCaml-scripts
|
||||||
elseif s:name =~ 'ocaml'
|
elseif s:name =~# 'ocaml'
|
||||||
set ft=ocaml
|
set ft=ocaml
|
||||||
|
|
||||||
" Awk scripts
|
" Awk scripts
|
||||||
elseif s:name =~ 'awk\>'
|
elseif s:name =~# 'awk\>'
|
||||||
set ft=awk
|
set ft=awk
|
||||||
|
|
||||||
" Website MetaLanguage
|
" Website MetaLanguage
|
||||||
elseif s:name =~ 'wml'
|
elseif s:name =~# 'wml'
|
||||||
set ft=wml
|
set ft=wml
|
||||||
|
|
||||||
" Scheme scripts
|
" Scheme scripts
|
||||||
elseif s:name =~ 'scheme'
|
elseif s:name =~# 'scheme'
|
||||||
set ft=scheme
|
set ft=scheme
|
||||||
|
|
||||||
" CFEngine scripts
|
" CFEngine scripts
|
||||||
elseif s:name =~ 'cfengine'
|
elseif s:name =~# 'cfengine'
|
||||||
set ft=cfengine
|
set ft=cfengine
|
||||||
|
|
||||||
" Erlang scripts
|
" Erlang scripts
|
||||||
elseif s:name =~ 'escript'
|
elseif s:name =~# 'escript'
|
||||||
set ft=erlang
|
set ft=erlang
|
||||||
|
|
||||||
" Haskell
|
" Haskell
|
||||||
elseif s:name =~ 'haskell'
|
elseif s:name =~# 'haskell'
|
||||||
set ft=haskell
|
set ft=haskell
|
||||||
|
|
||||||
" Scala
|
" Scala
|
||||||
elseif s:name =~ 'scala\>'
|
elseif s:name =~# 'scala\>'
|
||||||
set ft=scala
|
set ft=scala
|
||||||
|
|
||||||
endif
|
endif
|
||||||
@@ -180,28 +184,28 @@ else
|
|||||||
let s:line5 = getline(5)
|
let s:line5 = getline(5)
|
||||||
|
|
||||||
" Bourne-like shell scripts: sh ksh bash bash2
|
" Bourne-like shell scripts: sh ksh bash bash2
|
||||||
if s:line1 =~ '^:$'
|
if s:line1 =~# '^:$'
|
||||||
call SetFileTypeSH(s:line1) " defined in filetype.vim
|
call dist#ft#SetFileTypeSH(s:line1) " defined in filetype.vim
|
||||||
|
|
||||||
" Z shell scripts
|
" Z shell scripts
|
||||||
elseif s:line1 =~ '^#compdef\>' || s:line1 =~ '^#autoload\>' ||
|
elseif s:line1 =~# '^#compdef\>' || s:line1 =~# '^#autoload\>' ||
|
||||||
\ "\n".s:line1."\n".s:line2."\n".s:line3."\n".s:line4."\n".s:line5 =~ '\n\s*emulate\s\+\%(-[LR]\s\+\)\=[ckz]\=sh\>'
|
\ "\n".s:line1."\n".s:line2."\n".s:line3."\n".s:line4."\n".s:line5 =~# '\n\s*emulate\s\+\%(-[LR]\s\+\)\=[ckz]\=sh\>'
|
||||||
set ft=zsh
|
set ft=zsh
|
||||||
|
|
||||||
" ELM Mail files
|
" ELM Mail files
|
||||||
elseif s:line1 =~ '^From \([a-zA-Z][a-zA-Z_0-9\.=-]*\(@[^ ]*\)\=\|-\) .* \(19\|20\)\d\d$'
|
elseif s:line1 =~# '^From \([a-zA-Z][a-zA-Z_0-9\.=-]*\(@[^ ]*\)\=\|-\) .* \(19\|20\)\d\d$'
|
||||||
set ft=mail
|
set ft=mail
|
||||||
|
|
||||||
" Mason
|
" Mason
|
||||||
elseif s:line1 =~ '^<[%&].*>'
|
elseif s:line1 =~# '^<[%&].*>'
|
||||||
set ft=mason
|
set ft=mason
|
||||||
|
|
||||||
" Vim scripts (must have '" vim' as the first line to trigger this)
|
" Vim scripts (must have '" vim' as the first line to trigger this)
|
||||||
elseif s:line1 =~ '^" *[vV]im$'
|
elseif s:line1 =~# '^" *[vV]im$'
|
||||||
set ft=vim
|
set ft=vim
|
||||||
|
|
||||||
" MOO
|
" MOO
|
||||||
elseif s:line1 =~ '^\*\* LambdaMOO Database, Format Version \%([1-3]\>\)\@!\d\+ \*\*$'
|
elseif s:line1 =~# '^\*\* LambdaMOO Database, Format Version \%([1-3]\>\)\@!\d\+ \*\*$'
|
||||||
set ft=moo
|
set ft=moo
|
||||||
|
|
||||||
" Diff file:
|
" Diff file:
|
||||||
@@ -215,40 +219,45 @@ else
|
|||||||
" - "=== ", "--- ", "+++ " (bzr diff, common case)
|
" - "=== ", "--- ", "+++ " (bzr diff, common case)
|
||||||
" - "=== (removed|added|renamed|modified)" (bzr diff, alternative)
|
" - "=== (removed|added|renamed|modified)" (bzr diff, alternative)
|
||||||
" - "# HG changeset patch" in first line (Mercurial export format)
|
" - "# HG changeset patch" in first line (Mercurial export format)
|
||||||
elseif s:line1 =~ '^\(diff\>\|Only in \|\d\+\(,\d\+\)\=[cda]\d\+\>\|# It was generated by makepatch \|Index:\s\+\f\+\r\=$\|===== \f\+ \d\+\.\d\+ vs edited\|==== //\f\+#\d\+\|# HG changeset patch\)'
|
elseif s:line1 =~# '^\(diff\>\|Only in \|\d\+\(,\d\+\)\=[cda]\d\+\>\|# It was generated by makepatch \|Index:\s\+\f\+\r\=$\|===== \f\+ \d\+\.\d\+ vs edited\|==== //\f\+#\d\+\|# HG changeset patch\)'
|
||||||
\ || (s:line1 =~ '^--- ' && s:line2 =~ '^+++ ')
|
\ || (s:line1 =~# '^--- ' && s:line2 =~# '^+++ ')
|
||||||
\ || (s:line1 =~ '^\* looking for ' && s:line2 =~ '^\* comparing to ')
|
\ || (s:line1 =~# '^\* looking for ' && s:line2 =~# '^\* comparing to ')
|
||||||
\ || (s:line1 =~ '^\*\*\* ' && s:line2 =~ '^--- ')
|
\ || (s:line1 =~# '^\*\*\* ' && s:line2 =~# '^--- ')
|
||||||
\ || (s:line1 =~ '^=== ' && ((s:line2 =~ '^=\{66\}' && s:line3 =~ '^--- ' && s:line4 =~ '^+++') || (s:line2 =~ '^--- ' && s:line3 =~ '^+++ ')))
|
\ || (s:line1 =~# '^=== ' && ((s:line2 =~# '^=\{66\}' && s:line3 =~# '^--- ' && s:line4 =~# '^+++') || (s:line2 =~# '^--- ' && s:line3 =~# '^+++ ')))
|
||||||
\ || (s:line1 =~ '^=== \(removed\|added\|renamed\|modified\)')
|
\ || (s:line1 =~# '^=== \(removed\|added\|renamed\|modified\)')
|
||||||
set ft=diff
|
set ft=diff
|
||||||
|
|
||||||
" PostScript Files (must have %!PS as the first line, like a2ps output)
|
" PostScript Files (must have %!PS as the first line, like a2ps output)
|
||||||
elseif s:line1 =~ '^%![ \t]*PS'
|
elseif s:line1 =~# '^%![ \t]*PS'
|
||||||
set ft=postscr
|
set ft=postscr
|
||||||
|
|
||||||
" M4 scripts: Guess there is a line that starts with "dnl".
|
" M4 scripts: Guess there is a line that starts with "dnl".
|
||||||
elseif s:line1 =~ '^\s*dnl\>'
|
elseif s:line1 =~# '^\s*dnl\>'
|
||||||
\ || s:line2 =~ '^\s*dnl\>'
|
\ || s:line2 =~# '^\s*dnl\>'
|
||||||
\ || s:line3 =~ '^\s*dnl\>'
|
\ || s:line3 =~# '^\s*dnl\>'
|
||||||
\ || s:line4 =~ '^\s*dnl\>'
|
\ || s:line4 =~# '^\s*dnl\>'
|
||||||
\ || s:line5 =~ '^\s*dnl\>'
|
\ || s:line5 =~# '^\s*dnl\>'
|
||||||
set ft=m4
|
set ft=m4
|
||||||
|
|
||||||
|
" AmigaDos scripts
|
||||||
|
elseif $TERM == "amiga"
|
||||||
|
\ && (s:line1 =~# "^;" || s:line1 =~? '^\.bra')
|
||||||
|
set ft=amiga
|
||||||
|
|
||||||
" SiCAD scripts (must have procn or procd as the first line to trigger this)
|
" SiCAD scripts (must have procn or procd as the first line to trigger this)
|
||||||
elseif s:line1 =~? '^ *proc[nd] *$'
|
elseif s:line1 =~? '^ *proc[nd] *$'
|
||||||
set ft=sicad
|
set ft=sicad
|
||||||
|
|
||||||
" Purify log files start with "**** Purify"
|
" Purify log files start with "**** Purify"
|
||||||
elseif s:line1 =~ '^\*\*\*\* Purify'
|
elseif s:line1 =~# '^\*\*\*\* Purify'
|
||||||
set ft=purifylog
|
set ft=purifylog
|
||||||
|
|
||||||
" XML
|
" XML
|
||||||
elseif s:line1 =~ '<?\s*xml.*?>'
|
elseif s:line1 =~# '<?\s*xml.*?>'
|
||||||
set ft=xml
|
set ft=xml
|
||||||
|
|
||||||
" XHTML (e.g.: PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN")
|
" XHTML (e.g.: PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN")
|
||||||
elseif s:line1 =~ '\<DTD\s\+XHTML\s'
|
elseif s:line1 =~# '\<DTD\s\+XHTML\s'
|
||||||
set ft=xhtml
|
set ft=xhtml
|
||||||
|
|
||||||
" HTML (e.g.: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN")
|
" HTML (e.g.: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN")
|
||||||
@@ -257,43 +266,43 @@ else
|
|||||||
set ft=html
|
set ft=html
|
||||||
|
|
||||||
" PDF
|
" PDF
|
||||||
elseif s:line1 =~ '^%PDF-'
|
elseif s:line1 =~# '^%PDF-'
|
||||||
set ft=pdf
|
set ft=pdf
|
||||||
|
|
||||||
" XXD output
|
" XXD output
|
||||||
elseif s:line1 =~ '^\x\{7}: \x\{2} \=\x\{2} \=\x\{2} \=\x\{2} '
|
elseif s:line1 =~# '^\x\{7}: \x\{2} \=\x\{2} \=\x\{2} \=\x\{2} '
|
||||||
set ft=xxd
|
set ft=xxd
|
||||||
|
|
||||||
" RCS/CVS log output
|
" RCS/CVS log output
|
||||||
elseif s:line1 =~ '^RCS file:' || s:line2 =~ '^RCS file:'
|
elseif s:line1 =~# '^RCS file:' || s:line2 =~# '^RCS file:'
|
||||||
set ft=rcslog
|
set ft=rcslog
|
||||||
|
|
||||||
" CVS commit
|
" CVS commit
|
||||||
elseif s:line2 =~ '^CVS:' || getline("$") =~ '^CVS: '
|
elseif s:line2 =~# '^CVS:' || getline("$") =~# '^CVS: '
|
||||||
set ft=cvs
|
set ft=cvs
|
||||||
|
|
||||||
" Prescribe
|
" Prescribe
|
||||||
elseif s:line1 =~ '^!R!'
|
elseif s:line1 =~# '^!R!'
|
||||||
set ft=prescribe
|
set ft=prescribe
|
||||||
|
|
||||||
" Send-pr
|
" Send-pr
|
||||||
elseif s:line1 =~ '^SEND-PR:'
|
elseif s:line1 =~# '^SEND-PR:'
|
||||||
set ft=sendpr
|
set ft=sendpr
|
||||||
|
|
||||||
" SNNS files
|
" SNNS files
|
||||||
elseif s:line1 =~ '^SNNS network definition file'
|
elseif s:line1 =~# '^SNNS network definition file'
|
||||||
set ft=snnsnet
|
set ft=snnsnet
|
||||||
elseif s:line1 =~ '^SNNS pattern definition file'
|
elseif s:line1 =~# '^SNNS pattern definition file'
|
||||||
set ft=snnspat
|
set ft=snnspat
|
||||||
elseif s:line1 =~ '^SNNS result file'
|
elseif s:line1 =~# '^SNNS result file'
|
||||||
set ft=snnsres
|
set ft=snnsres
|
||||||
|
|
||||||
" Virata
|
" Virata
|
||||||
elseif s:line1 =~ '^%.\{-}[Vv]irata'
|
elseif s:line1 =~# '^%.\{-}[Vv]irata'
|
||||||
\ || s:line2 =~ '^%.\{-}[Vv]irata'
|
\ || s:line2 =~# '^%.\{-}[Vv]irata'
|
||||||
\ || s:line3 =~ '^%.\{-}[Vv]irata'
|
\ || s:line3 =~# '^%.\{-}[Vv]irata'
|
||||||
\ || s:line4 =~ '^%.\{-}[Vv]irata'
|
\ || s:line4 =~# '^%.\{-}[Vv]irata'
|
||||||
\ || s:line5 =~ '^%.\{-}[Vv]irata'
|
\ || s:line5 =~# '^%.\{-}[Vv]irata'
|
||||||
set ft=virata
|
set ft=virata
|
||||||
|
|
||||||
" Strace
|
" Strace
|
||||||
@@ -301,17 +310,17 @@ else
|
|||||||
set ft=strace
|
set ft=strace
|
||||||
|
|
||||||
" VSE JCL
|
" VSE JCL
|
||||||
elseif s:line1 =~ '^\* $$ JOB\>' || s:line1 =~ '^// *JOB\>'
|
elseif s:line1 =~# '^\* $$ JOB\>' || s:line1 =~# '^// *JOB\>'
|
||||||
set ft=vsejcl
|
set ft=vsejcl
|
||||||
|
|
||||||
" TAK and SINDA
|
" TAK and SINDA
|
||||||
elseif s:line4 =~ 'K & K Associates' || s:line2 =~ 'TAK 2000'
|
elseif s:line4 =~# 'K & K Associates' || s:line2 =~# 'TAK 2000'
|
||||||
set ft=takout
|
set ft=takout
|
||||||
elseif s:line3 =~ 'S Y S T E M S I M P R O V E D '
|
elseif s:line3 =~# 'S Y S T E M S I M P R O V E D '
|
||||||
set ft=sindaout
|
set ft=sindaout
|
||||||
elseif getline(6) =~ 'Run Date: '
|
elseif getline(6) =~# 'Run Date: '
|
||||||
set ft=takcmp
|
set ft=takcmp
|
||||||
elseif getline(9) =~ 'Node File 1'
|
elseif getline(9) =~# 'Node File 1'
|
||||||
set ft=sindacmp
|
set ft=sindacmp
|
||||||
|
|
||||||
" DNS zone files
|
" DNS zone files
|
||||||
@@ -319,34 +328,34 @@ else
|
|||||||
set ft=bindzone
|
set ft=bindzone
|
||||||
|
|
||||||
" BAAN
|
" BAAN
|
||||||
elseif s:line1 =~ '|\*\{1,80}' && s:line2 =~ 'VRC '
|
elseif s:line1 =~# '|\*\{1,80}' && s:line2 =~# 'VRC '
|
||||||
\ || s:line2 =~ '|\*\{1,80}' && s:line3 =~ 'VRC '
|
\ || s:line2 =~# '|\*\{1,80}' && s:line3 =~# 'VRC '
|
||||||
set ft=baan
|
set ft=baan
|
||||||
|
|
||||||
" Valgrind
|
" Valgrind
|
||||||
elseif s:line1 =~ '^==\d\+== valgrind' || s:line3 =~ '^==\d\+== Using valgrind'
|
elseif s:line1 =~# '^==\d\+== valgrind' || s:line3 =~# '^==\d\+== Using valgrind'
|
||||||
set ft=valgrind
|
set ft=valgrind
|
||||||
|
|
||||||
" Go docs
|
" Go docs
|
||||||
elseif s:line1 =~ '^PACKAGE DOCUMENTATION$'
|
elseif s:line1 =~# '^PACKAGE DOCUMENTATION$'
|
||||||
set ft=godoc
|
set ft=godoc
|
||||||
|
|
||||||
" Renderman Interface Bytestream
|
" Renderman Interface Bytestream
|
||||||
elseif s:line1 =~ '^##RenderMan'
|
elseif s:line1 =~# '^##RenderMan'
|
||||||
set ft=rib
|
set ft=rib
|
||||||
|
|
||||||
" Scheme scripts
|
" Scheme scripts
|
||||||
elseif s:line1 =~ 'exec\s\+\S*scheme' || s:line2 =~ 'exec\s\+\S*scheme'
|
elseif s:line1 =~# 'exec\s\+\S*scheme' || s:line2 =~# 'exec\s\+\S*scheme'
|
||||||
set ft=scheme
|
set ft=scheme
|
||||||
|
|
||||||
" Git output
|
" Git output
|
||||||
elseif s:line1 =~ '^\(commit\|tree\|object\) \x\{40\}\>\|^tag \S\+$'
|
elseif s:line1 =~# '^\(commit\|tree\|object\) \x\{40\}\>\|^tag \S\+$'
|
||||||
set ft=git
|
set ft=git
|
||||||
|
|
||||||
" Gprof (gnu profiler)
|
" Gprof (gnu profiler)
|
||||||
elseif s:line1 == 'Flat profile:'
|
elseif s:line1 == 'Flat profile:'
|
||||||
\ && s:line2 == ''
|
\ && s:line2 == ''
|
||||||
\ && s:line3 =~ '^Each sample counts as .* seconds.$'
|
\ && s:line3 =~# '^Each sample counts as .* seconds.$'
|
||||||
set ft=gprof
|
set ft=gprof
|
||||||
|
|
||||||
" Erlang terms
|
" Erlang terms
|
||||||
@@ -357,18 +366,18 @@ else
|
|||||||
" CVS diff
|
" CVS diff
|
||||||
else
|
else
|
||||||
let s:lnum = 1
|
let s:lnum = 1
|
||||||
while getline(s:lnum) =~ "^? " && s:lnum < line("$")
|
while getline(s:lnum) =~# "^? " && s:lnum < line("$")
|
||||||
let s:lnum += 1
|
let s:lnum += 1
|
||||||
endwhile
|
endwhile
|
||||||
if getline(s:lnum) =~ '^Index:\s\+\f\+$'
|
if getline(s:lnum) =~# '^Index:\s\+\f\+$'
|
||||||
set ft=diff
|
set ft=diff
|
||||||
|
|
||||||
" locale input files: Formal Definitions of Cultural Conventions
|
" locale input files: Formal Definitions of Cultural Conventions
|
||||||
" filename must be like en_US, fr_FR@euro or en_US.UTF-8
|
" filename must be like en_US, fr_FR@euro or en_US.UTF-8
|
||||||
elseif expand("%") =~ '\a\a_\a\a\($\|[.@]\)\|i18n$\|POSIX$\|translit_'
|
elseif expand("%") =~# '\a\a_\a\a\($\|[.@]\)\|i18n$\|POSIX$\|translit_'
|
||||||
let s:lnum = 1
|
let s:lnum = 1
|
||||||
while s:lnum < 100 && s:lnum < line("$")
|
while s:lnum < 100 && s:lnum < line("$")
|
||||||
if getline(s:lnum) =~ '^LC_\(IDENTIFICATION\|CTYPE\|COLLATE\|MONETARY\|NUMERIC\|TIME\|MESSAGES\|PAPER\|TELEPHONE\|MEASUREMENT\|NAME\|ADDRESS\)$'
|
if getline(s:lnum) =~# '^LC_\(IDENTIFICATION\|CTYPE\|COLLATE\|MONETARY\|NUMERIC\|TIME\|MESSAGES\|PAPER\|TELEPHONE\|MEASUREMENT\|NAME\|ADDRESS\)$'
|
||||||
setf fdcc
|
setf fdcc
|
||||||
break
|
break
|
||||||
endif
|
endif
|
||||||
|
BIN
runtime/spell/en.utf-8.spl
Normal file
BIN
runtime/spell/en.utf-8.spl
Normal file
Binary file not shown.
@@ -32,7 +32,7 @@ syntax match dircolorsEscape '\\[abefnrtv?_\\^#]'
|
|||||||
syntax match dircolorsEscape '\\[0-9]\{3}'
|
syntax match dircolorsEscape '\\[0-9]\{3}'
|
||||||
syntax match dircolorsEscape '\\x[0-9a-f]\{3}'
|
syntax match dircolorsEscape '\\x[0-9a-f]\{3}'
|
||||||
|
|
||||||
if !has('gui_running') && &t_Co == ''
|
if !(has('gui_running') || &termguicolors) && &t_Co == ''
|
||||||
syntax match dircolorsNumber '\<\d\+\>'
|
syntax match dircolorsNumber '\<\d\+\>'
|
||||||
highlight default link dircolorsNumber Number
|
highlight default link dircolorsNumber Number
|
||||||
endif
|
endif
|
||||||
@@ -84,7 +84,7 @@ endfunction
|
|||||||
|
|
||||||
function! s:get_hi_str(color, place) abort
|
function! s:get_hi_str(color, place) abort
|
||||||
if a:color >= 0 && a:color <= 255
|
if a:color >= 0 && a:color <= 255
|
||||||
if has('gui_running')
|
if has('gui_running') || &termguicolors
|
||||||
return ' gui' . a:place . '=' . s:termguicolors[a:color]
|
return ' gui' . a:place . '=' . s:termguicolors[a:color]
|
||||||
elseif a:color <= 7 || &t_Co == 256 || &t_Co == 88
|
elseif a:color <= 7 || &t_Co == 256 || &t_Co == 88
|
||||||
return ' cterm' . a:place . '=' . a:color
|
return ' cterm' . a:place . '=' . a:color
|
||||||
@@ -169,7 +169,7 @@ function! s:preview_color(linenr) abort
|
|||||||
\ ' "\_s\zs' . colordef . '\ze\_s"'
|
\ ' "\_s\zs' . colordef . '\ze\_s"'
|
||||||
let hi_attrs_str = ''
|
let hi_attrs_str = ''
|
||||||
if !empty(hi_attrs)
|
if !empty(hi_attrs)
|
||||||
if has('gui_running')
|
if has('gui_running') || &termguicolors
|
||||||
let hi_attrs_str = ' gui=' . join(hi_attrs, ',')
|
let hi_attrs_str = ' gui=' . join(hi_attrs, ',')
|
||||||
else
|
else
|
||||||
let hi_attrs_str = ' cterm=' . join(hi_attrs, ',')
|
let hi_attrs_str = ' cterm=' . join(hi_attrs, ',')
|
||||||
@@ -199,11 +199,11 @@ endfunction
|
|||||||
|
|
||||||
let b:dc_next_index = 0
|
let b:dc_next_index = 0
|
||||||
|
|
||||||
if has('gui_running')
|
if has('gui_running') || &termguicolors
|
||||||
call s:set_guicolors()
|
call s:set_guicolors()
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if has('gui_running') || &t_Co != ''
|
if has('gui_running') || &termguicolors || &t_Co != ''
|
||||||
call s:reset_colors()
|
call s:reset_colors()
|
||||||
|
|
||||||
autocmd CursorMoved,CursorMovedI <buffer> call s:preview_color('.')
|
autocmd CursorMoved,CursorMovedI <buffer> call s:preview_color('.')
|
||||||
|
@@ -18,6 +18,10 @@ highlight default link manOptionDesc Constant
|
|||||||
highlight default link manReference PreProc
|
highlight default link manReference PreProc
|
||||||
highlight default link manSubHeading Function
|
highlight default link manSubHeading Function
|
||||||
|
|
||||||
|
highlight default manUnderline cterm=underline gui=underline
|
||||||
|
highlight default manBold cterm=bold gui=bold
|
||||||
|
highlight default manItalic cterm=italic gui=italic
|
||||||
|
|
||||||
if &filetype != 'man'
|
if &filetype != 'man'
|
||||||
" May have been included by some other filetype.
|
" May have been included by some other filetype.
|
||||||
finish
|
finish
|
||||||
|
File diff suppressed because it is too large
Load Diff
@@ -1,45 +1,43 @@
|
|||||||
{
|
{
|
||||||
"expect": {
|
"expect": {
|
||||||
"24": -1,
|
"24": -1,
|
||||||
"102": "The cow jumped over the moon.",
|
"103": "The cow jumped over the moon.",
|
||||||
"122": "There is some text missing from this line.",
|
"124": "There is some text missing from this line.",
|
||||||
"123": "There is some text missing from this line.",
|
"125": "There is some text missing from this line.",
|
||||||
"141": "There is some text missing from this line.",
|
"144": "There is some text missing from this line.",
|
||||||
"142": "There is some text missing from this line.",
|
"145": "There is some text missing from this line.",
|
||||||
"143": "There is also some text missing here.",
|
"146": "There is also some text missing here.",
|
||||||
"144": "There is also some text missing here.",
|
"147": "There is also some text missing here.",
|
||||||
"215": "There are some words that don't belong in this sentence.",
|
"220": "There are some words that don't belong in this sentence.",
|
||||||
"231": "Somebody typed the end of this line twice.",
|
"236": "Somebody typed the end of this line twice.",
|
||||||
"271": -1,
|
"276": -1,
|
||||||
"290": "This line of words is cleaned up.",
|
"295": "This line of words is cleaned up.",
|
||||||
"304": -1,
|
|
||||||
"305": -1,
|
|
||||||
"306": -1,
|
|
||||||
"307": -1,
|
|
||||||
"308": -1,
|
|
||||||
"309": -1,
|
"309": -1,
|
||||||
"310": -1,
|
"310": -1,
|
||||||
"325": "Fix the errors on this line and replace them with undo.",
|
"311": -1,
|
||||||
"365": -1,
|
"312": -1,
|
||||||
"366": -1,
|
"313": -1,
|
||||||
"367": -1,
|
"314": -1,
|
||||||
"368": -1,
|
"315": -1,
|
||||||
"382": "When this line was typed in, someone pressed some wrong keys!",
|
"332": "Fix the errors on this line and replace them with undo.",
|
||||||
"383": "When this line was typed in, someone pressed some wrong keys!",
|
"372": -1,
|
||||||
"403": "This line has a few words that need changing using the change operator.",
|
"373": -1,
|
||||||
"404": "This line has a few words that need changing using the change operator.",
|
"374": -1,
|
||||||
"424": "The end of this line needs to be corrected using the c$ command.",
|
"375": -1,
|
||||||
"425": "The end of this line needs to be corrected using the c$ command.",
|
"389": "When this line was typed in, someone pressed some wrong keys!",
|
||||||
"487": -1,
|
"390": "When this line was typed in, someone pressed some wrong keys!",
|
||||||
"506": -1,
|
"411": "This line has a few words that need changing using the change operator.",
|
||||||
"531": "Usually the best time to see the flowers is in the spring.",
|
"412": "This line has a few words that need changing using the change operator.",
|
||||||
"722": -1,
|
"432": "The end of this line needs to be corrected using the c$ command.",
|
||||||
"727": -1,
|
"433": "The end of this line needs to be corrected using the c$ command.",
|
||||||
"744": "This line will allow you to practice appending text to a line.",
|
"497": -1,
|
||||||
"745": "This line will allow you to practice appending text to a line.",
|
"516": -1,
|
||||||
"765": "Adding 123 to 456 gives you 579.",
|
"541": "Usually the best time to see the flowers is in the spring.",
|
||||||
"766": "Adding 123 to 456 gives you 579.",
|
"759": "This line will allow you to practice appending text to a line.",
|
||||||
"790": "a) This is the first item.",
|
"760": "This line will allow you to practice appending text to a line.",
|
||||||
"791": " b) This is the second item."
|
"780": "Adding 123 to 456 gives you 579.",
|
||||||
|
"781": "Adding 123 to 456 gives you 579.",
|
||||||
|
"807": "a) This is the first item.",
|
||||||
|
"808": " b) This is the second item."
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -45,6 +45,8 @@ if sys.version_info[0] < 3:
|
|||||||
doc_filename = 'api.txt'
|
doc_filename = 'api.txt'
|
||||||
# String used to find the start of the generated part of the doc.
|
# String used to find the start of the generated part of the doc.
|
||||||
section_start_token = '*api-global*'
|
section_start_token = '*api-global*'
|
||||||
|
# Required prefix for API function names.
|
||||||
|
api_func_name_prefix = 'nvim_'
|
||||||
|
|
||||||
# Section name overrides.
|
# Section name overrides.
|
||||||
section_name = {
|
section_name = {
|
||||||
@@ -260,11 +262,11 @@ def parse_parblock(parent, width=62):
|
|||||||
def parse_source_xml(filename):
|
def parse_source_xml(filename):
|
||||||
"""Collects API functions.
|
"""Collects API functions.
|
||||||
|
|
||||||
This returns two strings:
|
Returns two strings:
|
||||||
1. The API functions
|
1. API functions
|
||||||
2. The deprecated API functions
|
2. Deprecated API functions
|
||||||
|
|
||||||
The caller decides what to do with the deprecated documentation.
|
Caller decides what to do with the deprecated documentation.
|
||||||
"""
|
"""
|
||||||
global xrefs
|
global xrefs
|
||||||
xrefs = set()
|
xrefs = set()
|
||||||
@@ -294,9 +296,8 @@ def parse_source_xml(filename):
|
|||||||
annotations = get_text(get_child(member, 'argsstring'))
|
annotations = get_text(get_child(member, 'argsstring'))
|
||||||
if annotations and ')' in annotations:
|
if annotations and ')' in annotations:
|
||||||
annotations = annotations.rsplit(')', 1)[-1].strip()
|
annotations = annotations.rsplit(')', 1)[-1].strip()
|
||||||
# XXX: (doxygen 1.8.11) 'argsstring' only includes FUNC_ATTR_*
|
# XXX: (doxygen 1.8.11) 'argsstring' only includes attributes of
|
||||||
# attributes if the function signature is non-void.
|
# non-void functions. Special-case void functions here.
|
||||||
# Force attributes here for such functions.
|
|
||||||
if name == 'nvim_get_mode' and len(annotations) == 0:
|
if name == 'nvim_get_mode' and len(annotations) == 0:
|
||||||
annotations += 'FUNC_API_ASYNC'
|
annotations += 'FUNC_API_ASYNC'
|
||||||
annotations = filter(None, map(lambda x: annotation_map.get(x),
|
annotations = filter(None, map(lambda x: annotation_map.get(x),
|
||||||
@@ -379,7 +380,7 @@ def parse_source_xml(filename):
|
|||||||
|
|
||||||
if 'Deprecated' in xrefs:
|
if 'Deprecated' in xrefs:
|
||||||
deprecated_functions.append(func_doc)
|
deprecated_functions.append(func_doc)
|
||||||
else:
|
elif name.startswith(api_func_name_prefix):
|
||||||
functions.append(func_doc)
|
functions.append(func_doc)
|
||||||
|
|
||||||
xrefs.clear()
|
xrefs.clear()
|
||||||
@@ -477,7 +478,7 @@ def gen_docs(config):
|
|||||||
docs += '\n\n\n'
|
docs += '\n\n\n'
|
||||||
|
|
||||||
docs = docs.rstrip() + '\n\n'
|
docs = docs.rstrip() + '\n\n'
|
||||||
docs += ' vim:tw=78:ts=8:ft=help:norl:'
|
docs += ' vim:tw=78:ts=8:ft=help:norl:\n'
|
||||||
|
|
||||||
doc_file = os.path.join(base_dir, 'runtime/doc', doc_filename)
|
doc_file = os.path.join(base_dir, 'runtime/doc', doc_filename)
|
||||||
delete_lines_below(doc_file, section_start_token)
|
delete_lines_below(doc_file, section_start_token)
|
||||||
|
@@ -11,6 +11,8 @@ if [ -z "$ARCH" ]; then
|
|||||||
export ARCH="$(arch)"
|
export ARCH="$(arch)"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
TAG=$1
|
||||||
|
|
||||||
# App name, used by generate_appimage.
|
# App name, used by generate_appimage.
|
||||||
APP=nvim
|
APP=nvim
|
||||||
|
|
||||||
@@ -35,7 +37,7 @@ VERSION=$("$ROOT_DIR"/build/bin/nvim --version | head -n 1 | grep -o 'v.*')
|
|||||||
|
|
||||||
cd "$APP_BUILD_DIR"
|
cd "$APP_BUILD_DIR"
|
||||||
|
|
||||||
curl -Lo "$APP_BUILD_DIR"/appimage_functions.sh https://github.com/probonopd/AppImages/raw/master/functions.sh
|
curl -Lo "$APP_BUILD_DIR"/appimage_functions.sh https://github.com/AppImage/AppImages/raw/master/functions.sh
|
||||||
. ./appimage_functions.sh
|
. ./appimage_functions.sh
|
||||||
|
|
||||||
# Copy desktop and icon file to AppDir for AppRun to pick them up.
|
# Copy desktop and icon file to AppDir for AppRun to pick them up.
|
||||||
@@ -53,7 +55,7 @@ move_lib
|
|||||||
|
|
||||||
# Delete stuff that should not go into the AppImage.
|
# Delete stuff that should not go into the AppImage.
|
||||||
# Delete dangerous libraries; see
|
# Delete dangerous libraries; see
|
||||||
# https://github.com/probonopd/AppImages/blob/master/excludelist
|
# https://github.com/AppImage/AppImages/blob/master/excludelist
|
||||||
delete_blacklisted
|
delete_blacklisted
|
||||||
|
|
||||||
########################################################################
|
########################################################################
|
||||||
@@ -69,14 +71,16 @@ cd "$APP_BUILD_DIR" # Get out of AppImage directory.
|
|||||||
# - Expects: $ARCH, $APP, $VERSION env vars
|
# - Expects: $ARCH, $APP, $VERSION env vars
|
||||||
# - Expects: ./$APP.AppDir/ directory
|
# - Expects: ./$APP.AppDir/ directory
|
||||||
# - Produces: ../out/$APP-$VERSION.glibc$GLIBC_NEEDED-$ARCH.AppImage
|
# - Produces: ../out/$APP-$VERSION.glibc$GLIBC_NEEDED-$ARCH.AppImage
|
||||||
generate_appimage
|
if [ -n "$TAG" ]; then
|
||||||
|
generate_type2_appimage -u "gh-releases-zsync|neovim|neovim|$TAG|nvim.appimage.zsync"
|
||||||
|
else
|
||||||
|
generate_type2_appimage
|
||||||
|
fi
|
||||||
|
|
||||||
# NOTE: There is currently a bug in the `generate_appimage` function (see
|
# Moving the final executable to a different folder so it isn't in the
|
||||||
# https://github.com/probonopd/AppImages/issues/228) that causes repeated builds
|
# way for a subsequent build.
|
||||||
# that result in the same name to fail.
|
|
||||||
# Moving the final executable to a different folder gets around this issue.
|
|
||||||
|
|
||||||
mv "$ROOT_DIR"/out/*.AppImage "$ROOT_DIR"/build/bin
|
mv "$ROOT_DIR"/out/*.AppImage* "$ROOT_DIR"/build/bin
|
||||||
# Remove the (now empty) folder the AppImage was built in
|
# Remove the (now empty) folder the AppImage was built in
|
||||||
rmdir "$ROOT_DIR"/out
|
rmdir "$ROOT_DIR"/out
|
||||||
|
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user