mirror of
https://github.com/neovim/neovim
synced 2025-07-24 15:21:53 +00:00
Compare commits
1271 Commits
Author | SHA1 | Date | |
---|---|---|---|
4dd3fc4ca9 | |||
f8eae37a36 | |||
82a92308c5 | |||
725da1feeb | |||
92806827a9 | |||
1e8d2bdc48 | |||
a10fdc70aa | |||
e83c0a267d | |||
e834660b2b | |||
4ba8266ab1 | |||
5749ecaf22 | |||
9ca836f893 | |||
31a508cf6c | |||
fa5182489a | |||
1e06c235b8 | |||
d442345729 | |||
bebbf08c8c | |||
ce4199e8b0 | |||
91f40ff284 | |||
e09fb6ee53 | |||
907ad921bc | |||
dba69a1d3b | |||
959df5d8a5 | |||
4a7f6dafe9 | |||
135991712a | |||
e85b911f02 | |||
c1015121ec | |||
4f030ec24e | |||
fad7a26bc5 | |||
6c62f7b715 | |||
6060301558 | |||
e1876c7ad1 | |||
a9b1937e5a | |||
c926ba1dc4 | |||
9ac1e2db79 | |||
357e59982d | |||
e9685d9f70 | |||
d2352b7b51 | |||
05d8a46ec4 | |||
ac53536de1 | |||
cf9a0799c9 | |||
8b41f429bb | |||
04c382b2ac | |||
15cc17521e | |||
87b40f7445 | |||
127b8569e6 | |||
221f6fffad | |||
e6d0dea42b | |||
ccb005b9e0 | |||
cb76a8a95f | |||
1ff7b83d3c | |||
4680ca29f1 | |||
ae6848cd12 | |||
7a8dadbedb | |||
314f6ea367 | |||
b48efd9ba7 | |||
cffe2d4642 | |||
3f55010cda | |||
ab7da4c531 | |||
5e8f2048b5 | |||
2aba5569a1 | |||
8fb1fce694 | |||
845973c9fe | |||
bcc9b9335c | |||
c16529afa5 | |||
aec096fc5b | |||
7ba52c0b2b | |||
1cca5da05f | |||
af368981a7 | |||
4157f4c72d | |||
0930435fc3 | |||
315769ae6d | |||
5062d8e0dd | |||
2f3a18695e | |||
5f82889be7 | |||
6c602be33a | |||
b9a441eb78 | |||
61d0dfee32 | |||
2b01c3a8a8 | |||
5fee0be915 | |||
3c42d7a10a | |||
57acfceabe | |||
5a90761e8a | |||
ca1de71a3e | |||
55c5185884 | |||
20620bae76 | |||
4e29810817 | |||
f273e43cb8 | |||
89eba72792 | |||
8f20c22e10 | |||
e104228b1c | |||
fe0114ec41 | |||
271249a48a | |||
2c92a4d0c8 | |||
b7f2c7dd1d | |||
7b6c92eac1 | |||
972ad11195 | |||
72c5a9db70 | |||
cf1ffa9166 | |||
67c5bc1ac0 | |||
857a7312d0 | |||
f1eb25f0c4 | |||
bd97577954 | |||
bc132ae123 | |||
8b9f6103bd | |||
b93670174e | |||
b4a04fd80c | |||
f177005447 | |||
4c4997e988 | |||
7697628345 | |||
77b5e9ae25 | |||
f1ce9b3be2 | |||
e509576e53 | |||
c07e48a900 | |||
d207440f1e | |||
abd32c1bb8 | |||
7e97587dae | |||
231de72539 | |||
8b42249cdd | |||
131897c16b | |||
07ad5d71ab | |||
b19403e73e | |||
109a792e25 | |||
b14b2883e9 | |||
bb94895d52 | |||
799d9c3215 | |||
715fdfee1e | |||
30940f809b | |||
0f00f31cbd | |||
feec926633 | |||
2271b10a8e | |||
471129792c | |||
5c3488c937 | |||
2479004c13 | |||
f59ba0fad0 | |||
5de5507ea6 | |||
a9e368a705 | |||
0ce880083d | |||
32a30d90b4 | |||
b0ebf61d37 | |||
bd32d8cf95 | |||
32405de7df | |||
5a752c97d5 | |||
98eaf60a98 | |||
0d1e5ec1b8 | |||
452cadb85a | |||
67305ffb5d | |||
519224f6bd | |||
30857030e8 | |||
cf631aaed0 | |||
3348eea429 | |||
3ec5351fd1 | |||
0653ed63a5 | |||
7fdb45e0f8 | |||
60f845ca55 | |||
3283db4ecb | |||
a2d03d9b1a | |||
271c5df416 | |||
b1aaa0a881 | |||
bac9f36d42 | |||
3a9fd4327a | |||
2cbac719c3 | |||
02d68fbcae | |||
fc0aeb5f88 | |||
2f6364ea4b | |||
8b39e4ec79 | |||
01dbf0951b | |||
108566e7b6 | |||
684c7d9228 | |||
5d22d100f2 | |||
bebd1f9f76 | |||
85761dd426 | |||
016ebb4185 | |||
f1a787d292 | |||
3e87f5ccf8 | |||
deb18a050e | |||
57fef7c74d | |||
443cd04d5b | |||
54a586736b | |||
3c228e8935 | |||
f1d2297c5e | |||
fdc2707b41 | |||
e71f43f8e7 | |||
a5637597a6 | |||
e53ae88e7e | |||
463d28cc80 | |||
344dd2757a | |||
180b50dddc | |||
00e3ba22fe | |||
f4b4b7c132 | |||
65a3d53cb9 | |||
eab181a74e | |||
2b7e58cb2c | |||
a9ae5bf36b | |||
0c2ca48e5f | |||
3ea14d5366 | |||
9fe472c91b | |||
25356f2802 | |||
c344f4b6ae | |||
d81b9d5ec5 | |||
3295083d5a | |||
f6ed446817 | |||
e14fa8569c | |||
f6c6567cb1 | |||
9e59fdf5f6 | |||
091ae1e63f | |||
24ce4c6233 | |||
05f9c7c2f7 | |||
4cc28673ee | |||
59ded3ef29 | |||
dec38601c5 | |||
89621464fc | |||
abd5b0c6c3 | |||
6d8ad78237 | |||
21824df3c6 | |||
8fa7b6c8af | |||
42419e5a73 | |||
e5046822c9 | |||
208cdb84a6 | |||
9f3fb66111 | |||
c936ae0f36 | |||
eb3b73d472 | |||
520ec3dbfd | |||
f8639dc99c | |||
18435a2534 | |||
16bc1e9c17 | |||
312afd8e2e | |||
d36afafc8d | |||
348adbcc7a | |||
c4c74c3883 | |||
769d164c70 | |||
f08869cff2 | |||
e0d6894a54 | |||
bd6866f90b | |||
5320eb57df | |||
1347f36494 | |||
b96730bc3b | |||
72b1ce7f30 | |||
1bbbd5f0ff | |||
2ee4ce0639 | |||
f679abef3e | |||
4de70f5b95 | |||
6729774143 | |||
6fe740c7ab | |||
10ef903648 | |||
8086db6302 | |||
2c085257fd | |||
de13113dc1 | |||
697176fc3e | |||
377694681c | |||
47473b39cb | |||
21fb9b2b08 | |||
67f80d485c | |||
a6661178aa | |||
87d67814e5 | |||
48398d61e4 | |||
a9b7debbbc | |||
44c111e49f | |||
c40f992e10 | |||
c45a859171 | |||
f1b67c3453 | |||
88f77c28e5 | |||
f5671c8614 | |||
281da0dd59 | |||
11b438eb66 | |||
f9fe903579 | |||
8480b74010 | |||
8ce3d0174e | |||
9929af47fe | |||
7ab0e8c8dd | |||
4abed17496 | |||
8e44396794 | |||
fe2e7cfdee | |||
bc5fb82c6d | |||
88974c8e66 | |||
fc5dea02b6 | |||
b24209dcf5 | |||
7d61cdc334 | |||
61fccda197 | |||
0838b00253 | |||
3159cd4503 | |||
500345aea2 | |||
18ce6c9063 | |||
17c26d0dcf | |||
7d2fbb9012 | |||
11bcd48fda | |||
2c7ed420d9 | |||
f5406dfe77 | |||
6d1827aebc | |||
228bc4c416 | |||
4f67f5ba6e | |||
07fdbba9d0 | |||
877d5c8be7 | |||
d252be36e2 | |||
de682a4f9e | |||
5a022c71e4 | |||
884ac81135 | |||
93a85bdd8a | |||
9da951ad47 | |||
633ae523f5 | |||
835161490d | |||
460a52dbbf | |||
bee8a0ae8c | |||
c05b0d8ec7 | |||
875a1bcf0a | |||
9ef01272b2 | |||
a1e822fbc6 | |||
e2fb230c3a | |||
5c4a421735 | |||
c7513368f0 | |||
fb8f822d9c | |||
17a5dde8d3 | |||
733b4ce033 | |||
1a51524ad5 | |||
8d743d02f2 | |||
dae1213e57 | |||
b9a6df58cc | |||
f29c2fc4a8 | |||
542513fd8a | |||
cf93b5e9f9 | |||
b659841570 | |||
e101cdb3d7 | |||
b920412306 | |||
f1f036740a | |||
5ec671d541 | |||
a71a180df9 | |||
43c88bb58c | |||
112a5b76e6 | |||
4d7c7f96dd | |||
d214e33e78 | |||
edbe020bcb | |||
6994cc4d1a | |||
c48c9828c3 | |||
662abd8451 | |||
c03a0f5fc8 | |||
5fbc2eeac5 | |||
6dae7776ed | |||
f20427451e | |||
e598811e76 | |||
afd1d412fa | |||
b23759b4d7 | |||
db6521a560 | |||
a7b17d4b3e | |||
57ff96be8e | |||
565bbd1485 | |||
11ae6f418d | |||
902ca26856 | |||
f97496a21c | |||
2afebc4e5f | |||
a8422818a7 | |||
e0f6f46c1b | |||
863dbbb3d4 | |||
25bc656988 | |||
bcab880bb6 | |||
f895b47d3f | |||
b227a3c8d3 | |||
bbd8f4e9a4 | |||
92f98b5bdf | |||
1cf50cbfd9 | |||
edcf640f59 | |||
3059516e8a | |||
31f63c8d55 | |||
913588466d | |||
aff64b3a52 | |||
9642903dea | |||
2d531d296f | |||
e311b019a1 | |||
090008f311 | |||
7d7691e85f | |||
6476d081be | |||
ee94eecbd4 | |||
c8810a51a3 | |||
8fd092f3ff | |||
9c2d5f1a33 | |||
e568ac7a68 | |||
e7ba325298 | |||
399864157b | |||
c9baaa9200 | |||
aa87dd2b89 | |||
78418e17e9 | |||
3d2493a3fd | |||
e39dade80b | |||
12376cc01c | |||
726baefdf7 | |||
0995f460fb | |||
d14283c7a0 | |||
717e2db274 | |||
79a11ecfd3 | |||
824f36a980 | |||
bddcbbb571 | |||
3d84cf6ff4 | |||
8bbb28b973 | |||
64b44018fa | |||
3736f14896 | |||
f4e2df4527 | |||
aeda13cfdf | |||
4c780d663f | |||
b26411bacd | |||
b5e3fec621 | |||
942f3587c3 | |||
167b72a647 | |||
15a71338e3 | |||
fb043f8ea3 | |||
e52293757a | |||
ea12efa66b | |||
ab69944978 | |||
b12c20e466 | |||
b11f5aa119 | |||
384770556b | |||
2bf1aa5628 | |||
0cd786b905 | |||
25baeb39e3 | |||
e17e21e4cf | |||
8c7c8f5962 | |||
0394cb23e9 | |||
c2e7f39528 | |||
f4b2b66661 | |||
2c680a5854 | |||
85e8fd96f4 | |||
f181efdeaf | |||
573567aef6 | |||
c64d6702e5 | |||
05cbe0da30 | |||
1892d28c60 | |||
512e0caae2 | |||
6a29a7bfb0 | |||
f25f42bf03 | |||
2c84421de2 | |||
f95e0ae926 | |||
ab3a4a4896 | |||
22804c66a5 | |||
6fe9a12268 | |||
075dc42fb2 | |||
1bf83ea8e1 | |||
cc305213d7 | |||
1e7eb20c91 | |||
2351b931dd | |||
39ad99b594 | |||
c05982cf35 | |||
c1c5c4f8e4 | |||
79b358facd | |||
94e585944d | |||
eb7b2c7912 | |||
c0d835764f | |||
07fbdf4acc | |||
65206714bc | |||
14ae394532 | |||
171c80e227 | |||
bab3b0ad45 | |||
43823acae2 | |||
b98af01260 | |||
c4006a621e | |||
8ac44984c4 | |||
e2647366c9 | |||
c2f337ce97 | |||
3bdc34d065 | |||
3999aa755e | |||
6c496db4b7 | |||
84fcba9b01 | |||
4c57169745 | |||
c6d36b97ba | |||
9dcd5bd9c5 | |||
6a680548ec | |||
33ef959814 | |||
cf7e351c24 | |||
458a6f58b6 | |||
63b1a7d0cf | |||
6e146d4132 | |||
b09f173d93 | |||
64a8a8fd22 | |||
33887206b9 | |||
ba17bcfefc | |||
a1976c7390 | |||
96a34daab7 | |||
edb26f2c65 | |||
25e6d37705 | |||
1b8939d233 | |||
fc18fad74f | |||
c6350e4150 | |||
28ac4a99f2 | |||
8240b8b596 | |||
7862c3ae3e | |||
7bff9a5de8 | |||
d59bf058ab | |||
1bd916df35 | |||
59b2e6d35d | |||
200c8b9cca | |||
8cb04c2230 | |||
50c22325df | |||
affef0aab8 | |||
044cd242e7 | |||
248478f5a0 | |||
1a1164339a | |||
535ef67ef0 | |||
f8f83579ff | |||
d3c90cbbb4 | |||
990c147de3 | |||
22c83a4de9 | |||
c3d24368a1 | |||
9183e2c67e | |||
eee93f36d8 | |||
197d907e09 | |||
bcc174e6df | |||
fe191d95a2 | |||
a52c38d790 | |||
2b06c32a23 | |||
c236e80cf3 | |||
4da5cb38d3 | |||
7f990741f7 | |||
28b5a637b5 | |||
efbc33cbbc | |||
4fa3492a6f | |||
ac4d5d9935 | |||
dc256e376d | |||
9081cad514 | |||
ecdd2df88a | |||
ad6bbe4468 | |||
01b2fa53f4 | |||
300a7a4cf4 | |||
e55ebae373 | |||
6a329b0548 | |||
5487624730 | |||
47d74bf32f | |||
8b60253ce7 | |||
d0401e827b | |||
7c00b9efca | |||
b9bcfa9bc8 | |||
a316258d2c | |||
809fff94e6 | |||
bd8d43c6fe | |||
32ad52ae04 | |||
0a4d7ce669 | |||
58559a2249 | |||
a00247e147 | |||
8de87c7b1c | |||
45f53b370b | |||
398b9fde85 | |||
a0ada7dac4 | |||
0b60372792 | |||
91352b36b7 | |||
9f1401e25c | |||
17ab6dc12b | |||
6beb5cf439 | |||
567c0e6cd7 | |||
9c98e4845a | |||
7f762a2e09 | |||
3c3c733c3c | |||
b2d7b70f4d | |||
9ed46a77e6 | |||
3bce5207cf | |||
dadcfe22ca | |||
c03e8307d2 | |||
1bc44a805a | |||
a6d4a2fb8d | |||
db90c0c9bf | |||
20354dbd75 | |||
315a8d2217 | |||
64e74dc784 | |||
a78d465927 | |||
ae8515a544 | |||
f6d5426fc8 | |||
949bcd7810 | |||
5056d40b16 | |||
d0c8dfc578 | |||
ea5337d9b5 | |||
d5702a4534 | |||
021f67df12 | |||
ba27284f07 | |||
e7a9c76ab0 | |||
656648d855 | |||
59c5c4f006 | |||
a5fe6d34a9 | |||
26b2c1fe15 | |||
7a26b9b62b | |||
9124bb755c | |||
90b7d25882 | |||
31c3d54668 | |||
931e15471c | |||
e15c34fbc2 | |||
38c52c63ac | |||
8a845ab3ef | |||
a021b30ede | |||
61df24b998 | |||
d6b3c09129 | |||
036051b218 | |||
77628d90a4 | |||
566f573378 | |||
1a43aef9ec | |||
e1fa242a6c | |||
d4e6a75a06 | |||
207cfce3de | |||
d9fcd43638 | |||
0c80fead86 | |||
39ab7cc6fb | |||
3fd9ffd368 | |||
bbbed9fc66 | |||
dd0dd4d78d | |||
d47af7f10e | |||
088ae23e4e | |||
c5790d9189 | |||
e50ff1b2e9 | |||
a8bd4de28a | |||
329cfc3303 | |||
ac13e65ae0 | |||
cbdbc4f63d | |||
49647ae973 | |||
03bcfb54db | |||
95608136d5 | |||
5f1a5d264a | |||
40e894f595 | |||
3794e83d98 | |||
a8b996160d | |||
213a66441f | |||
1790f81f56 | |||
fe81b926d3 | |||
53eb835e8f | |||
2c64f01674 | |||
9bf2741ba4 | |||
b4acf609ac | |||
50eadfe2e9 | |||
a9d83e8112 | |||
d99a268914 | |||
4eb923bfe0 | |||
2be853d486 | |||
c0d26ba4f9 | |||
cfb2828897 | |||
27d755cfd1 | |||
9e8f9dd5d4 | |||
dc15dcffad | |||
bb519fb261 | |||
5de6f97408 | |||
a9fa66b5b8 | |||
b728aad212 | |||
51d42917f0 | |||
55a721512b | |||
bfe82d4650 | |||
73849ceeb9 | |||
30b70de39e | |||
8b76034f3b | |||
608ff261ad | |||
db17d2c0fa | |||
9584674569 | |||
b6e83ba284 | |||
4d6ba4d06a | |||
f3c895569d | |||
d29b71a1de | |||
9d7dc49db1 | |||
106b308ed4 | |||
24b16ed35e | |||
5c90bbae2a | |||
d4cc4e0871 | |||
9fe8e3cb2f | |||
65e4c9afe2 | |||
f8e042f732 | |||
96b3dbcea5 | |||
3b744f1ea2 | |||
efa132da82 | |||
c87510b0e8 | |||
90519107f2 | |||
3b156664b5 | |||
9de949ea3e | |||
765515010f | |||
8fd3725cc8 | |||
7ff63fcdc0 | |||
2694fa759f | |||
6c3b0fb831 | |||
74937589d0 | |||
3e1daa84e9 | |||
6deddb26de | |||
d7432145ff | |||
bd7371f460 | |||
5c9cd009e1 | |||
f62d4865d8 | |||
064495a53a | |||
71bb4fd481 | |||
a3549286b2 | |||
1015aa6ff3 | |||
1c03a06487 | |||
e30ccd56d9 | |||
93ee31bf65 | |||
c5c3b0b8f9 | |||
17ce06d1c9 | |||
81c2cbe099 | |||
9fab77c7fb | |||
7c38f60b3b | |||
461d46d8ac | |||
a2403a0ed9 | |||
885ca3b7a6 | |||
acdede50ce | |||
2996179482 | |||
60f1acd0ef | |||
5a1c93584f | |||
87904ae3c4 | |||
3dffc842fe | |||
0a77dc7e05 | |||
643ef257b3 | |||
10e885bdfc | |||
dee0d7f4e9 | |||
3d88287e30 | |||
03978a0f29 | |||
a8b4d76a0a | |||
cbc8c0c625 | |||
cd1d9d8a7c | |||
246fa3e81d | |||
ff8e239493 | |||
fa285bde45 | |||
eb663d5367 | |||
8f058dca89 | |||
7898de5211 | |||
8a677f8a4b | |||
5c7237640f | |||
c581517f8a | |||
e85bed0830 | |||
add2a62398 | |||
2e5c299f11 | |||
ff18d3b827 | |||
16b55d2e9d | |||
13f028e416 | |||
bdffa01b52 | |||
59b53e7bc7 | |||
cba3025c43 | |||
c0157e8fe0 | |||
e7d020e08f | |||
2ab80b944b | |||
748cd91c20 | |||
42428b3f85 | |||
925c153f86 | |||
c5b5eaabad | |||
13673ea78d | |||
e89df8a54d | |||
a5d00527a1 | |||
dfbb75fdab | |||
6c8851be4e | |||
27fbffeb4f | |||
fb68c97ce8 | |||
d677ae5f64 | |||
fe57a8a4e4 | |||
012cd35bfb | |||
eaf8e57cf9 | |||
a466bd2927 | |||
54e6ef73f0 | |||
b5fc21dbf0 | |||
39777ad4b8 | |||
387c3be82a | |||
19aa8ccf85 | |||
822ae1a81c | |||
3807520001 | |||
0c9888cdbe | |||
8872fce120 | |||
150b1b7b40 | |||
ee51061b8c | |||
612f3fd57a | |||
0ff4854800 | |||
6f55aa3502 | |||
19717ca1e8 | |||
66ed6297b0 | |||
0839c44257 | |||
751c35d41b | |||
768bc68d7e | |||
c05d7153d3 | |||
96035a8343 | |||
7763c19a70 | |||
953c3fcfee | |||
f528aeff6e | |||
1d2b702008 | |||
2c0998e104 | |||
c553109932 | |||
ff1d111120 | |||
098e1f9dfd | |||
89fec12e9f | |||
98632f1cce | |||
4d10024a56 | |||
0223c81457 | |||
7482aef113 | |||
f46728c241 | |||
3d71366af1 | |||
f53c95e7a8 | |||
f5b7fd5fa3 | |||
c7db42faab | |||
4a46ab8de9 | |||
58ad7fc578 | |||
015df9c66e | |||
68cd18eb04 | |||
14b148f0ad | |||
1dcdac013e | |||
be552c8340 | |||
6531b175ad | |||
c03fc7ef3e | |||
0f9622ca25 | |||
d110c6d790 | |||
30392b6356 | |||
b10d822a77 | |||
2036d04284 | |||
2bddc4ca54 | |||
b89c08901c | |||
b5cfac0894 | |||
794e7b4359 | |||
ac2d661450 | |||
bdcd3c31c6 | |||
26506f14bc | |||
be1525d3c9 | |||
a0938e068f | |||
ee37a0c79a | |||
0bdd4e8393 | |||
8e2a892e70 | |||
1daf2cb0ea | |||
5e38ff105c | |||
84569693e1 | |||
5a0d0286ff | |||
5fad02c081 | |||
e5bcf83380 | |||
6c5f9219ef | |||
f767cee100 | |||
999d33faf4 | |||
538ace9aae | |||
bec5e4cb61 | |||
a1a5e35e9a | |||
163680a58e | |||
e346c01c31 | |||
7676fc7562 | |||
7046258a38 | |||
fa4c260100 | |||
fab555e59c | |||
ee5cc88a73 | |||
a4c957bab7 | |||
cfb2383c26 | |||
3fd2efdb26 | |||
0b38011328 | |||
7faf682525 | |||
97331cab67 | |||
ff19f08477 | |||
addd181369 | |||
1211fa09cf | |||
ae24c9b270 | |||
47f9ab4635 | |||
8ad46a25cb | |||
3d77ca39c7 | |||
d6a25f89b8 | |||
594536a1e7 | |||
90128843f6 | |||
fd334ec2a8 | |||
4f93d05d39 | |||
d624aea454 | |||
5f4a231e3f | |||
9c4f6307b7 | |||
96dc8c0d28 | |||
b3ad509905 | |||
cb708d203b | |||
5ed303c22b | |||
f7f65f5a82 | |||
dd6c1a0a8f | |||
22311457ab | |||
6aefae8c4e | |||
c30812be7b | |||
a5e3f4da34 | |||
5ee9161f81 | |||
efbf70600c | |||
2841e89cf1 | |||
092f1a3e2c | |||
ceeca24205 | |||
fcd58c59eb | |||
68411dc189 | |||
09c2184660 | |||
c6dd84e00b | |||
3c41df2691 | |||
d45efa5793 | |||
0a8be9f8ef | |||
cf9dd7a3f4 | |||
1c1722105c | |||
6853690c78 | |||
fc8965787b | |||
e36fce75fb | |||
4e963f2462 | |||
cb7bdf5f92 | |||
6ad8294d5c | |||
218fccaba4 | |||
047dfcd294 | |||
4420dc3067 | |||
a445887985 | |||
fe6cf2812b | |||
3c6eb9871a | |||
0b3555b5dd | |||
72fecad1ff | |||
0478fb3b58 | |||
c7efc6047d | |||
f7f79c60bb | |||
345789f9ef | |||
d581398779 | |||
c1187d4af0 | |||
8213109304 | |||
d6af425322 | |||
b7a417c5e6 | |||
c06613d2f6 | |||
d5e8b3f451 | |||
0e4a54a17b | |||
a2eff8f15c | |||
672449e448 | |||
80df0a8fd2 | |||
2b229b816b | |||
1468946154 | |||
5493139c9f | |||
daca22f5b2 | |||
196cc13130 | |||
f9f37193d1 | |||
c233277737 | |||
e6127a49db | |||
f807a7de04 | |||
343c226abf | |||
1b3cbb39a1 | |||
a8ff55d50e | |||
ce5d755048 | |||
62424fe6ee | |||
f53c2578e7 | |||
7f2e352700 | |||
0e57c753d6 | |||
e105e1242a | |||
11bd0b8870 | |||
a920ae89e9 | |||
593c0bd77f | |||
059986e038 | |||
d671168574 | |||
5cecd7a93a | |||
071aab5148 | |||
cd3b2e4b6b | |||
10b6afd652 | |||
1593ee7cf2 | |||
41dbb69a85 | |||
47d52e1578 | |||
b9ab363636 | |||
7692dfeecb | |||
5309ad29d4 | |||
6bff0f7b60 | |||
96f165e744 | |||
8f75debd86 | |||
4df0ea98dc | |||
3aca372ac8 | |||
4ca2cf4b47 | |||
e7e2115de5 | |||
fe6e4b3244 | |||
2b8792e303 | |||
b42c80e561 | |||
5d8a47b6e0 | |||
7a4d167a92 | |||
e861da247e | |||
a4c9447623 | |||
c51c2f5a65 | |||
766683622a | |||
6710522751 | |||
21acc7c0fa | |||
1ec5485db4 | |||
20eeb61fb2 | |||
a515401cf0 | |||
407ac8b42d | |||
3de785e7b5 | |||
2b9fc9a13f | |||
d2c1d9c466 | |||
144e85b7b9 | |||
d29c02710e | |||
d536fb018f | |||
c0dbd8df95 | |||
44cb491f6e | |||
faa9869a9e | |||
14cffc3d1d | |||
667b8cd108 | |||
3f8ba68895 | |||
971e9370ad | |||
6dfaf8e914 | |||
4fb9b42869 | |||
ba6417091c | |||
0e55d88639 | |||
deae2e8434 | |||
f35df8d697 | |||
f193b5241f | |||
9e20398908 | |||
a095a48987 | |||
e92f1bb271 | |||
c83ecee885 | |||
1c5eee3c91 | |||
8f647cf03c | |||
eafcfb2fb5 | |||
d3f609db05 | |||
3feabcacb0 | |||
3e6d3bf3bd | |||
f0ca2283b0 | |||
6b7b56dabe | |||
0c0318f8a7 | |||
5af90e2ee7 | |||
51f939e912 | |||
c18a1b9034 | |||
6646502bbb | |||
8888a6ce80 | |||
db4bddb770 | |||
2a7047b77c | |||
eb7aa76b13 | |||
095ddcb548 | |||
6f5eadcdac | |||
9b34b867dd | |||
e6993f2491 | |||
ef3cbd91cb | |||
a34066963e | |||
9229f7a05d | |||
b647ba6afb | |||
eaa2cd9f7c | |||
91b8210779 | |||
a2253744c9 | |||
befc7de26f | |||
a4494b7cbc | |||
ade88fe4cc | |||
bb33fc4f55 | |||
8951304c10 | |||
e09e9ca810 | |||
882782f0fb | |||
243d16688a | |||
9abe0bdb54 | |||
9a584773b5 | |||
85a7170f19 | |||
594859fdd6 | |||
e42688fcf3 | |||
5f15788dc3 | |||
9c0c5e8bc6 | |||
27dc42160f | |||
ea2e8f4f10 | |||
7ab27eeb53 | |||
b53b621ef6 | |||
10bb11e8d1 | |||
8ff0872cf7 | |||
40e2d6b59b | |||
ae52170a52 | |||
30bba7a10c | |||
5ed0975ea2 | |||
b0ab46056f | |||
290a9632d6 | |||
28c3679b64 | |||
ef86aad878 | |||
3258c6a2f4 | |||
4d6a1e5566 | |||
ddea519542 | |||
72ddbb675f | |||
dcac926ced | |||
d545413492 | |||
11861bc9c8 | |||
d183103b45 | |||
ed5ac84ab0 | |||
f0a702d116 | |||
7c7701af12 | |||
57c095d5fc | |||
7cf36fc67e | |||
b63f5c170d | |||
45a2c6543c | |||
1ed5abfe88 | |||
d551a49958 | |||
ddc243f32a | |||
6285b518d4 | |||
84b8612987 | |||
9fbbec76aa | |||
c8e7a447c5 | |||
2000b6a64a | |||
cdbfdcfcc4 | |||
765711e272 | |||
48c0e916a1 | |||
c9f2faf3bf | |||
03bd5a4b91 | |||
563957e3cb | |||
13d29cb9ed | |||
94841e5eae | |||
6b8cd827a9 | |||
0bdf8979a2 | |||
1adb01c120 | |||
2134396074 | |||
989b585e10 | |||
696e24f311 | |||
5ff90a100a | |||
f5d7123f6c | |||
588e86bda6 | |||
8441af37d8 | |||
2ea619c10b | |||
489d32f2b8 | |||
cd94dd6bb2 | |||
44b4f8c6e9 | |||
0615450688 | |||
1999919c31 | |||
031d21221e | |||
b99bbc680e | |||
eab17e5093 | |||
cd6e7e8cf3 | |||
dfe79b67a5 | |||
c230ef24a2 | |||
099718ae6d | |||
c180741189 | |||
dee2bf7b52 | |||
ed02278e42 | |||
4874214139 | |||
fe913d7838 | |||
392817c2da | |||
fc45c97829 | |||
eaf54132f9 | |||
175297a23a | |||
01570f1ff3 | |||
56065bbdc6 | |||
e51bffefa5 | |||
798f05876c | |||
671b244e6c | |||
07499a842b | |||
9adb6ed74a | |||
38f0ac07b5 | |||
9f8bd77d7b | |||
ba7704ab4e | |||
0fb695df8a | |||
ec6e78e77c | |||
35b269f51f | |||
a315026dc2 | |||
0ed8b12a07 | |||
627cc1b3d8 | |||
2574f299e5 | |||
d241f278d3 | |||
13bdc21faf | |||
7b2f6a7e5f | |||
44a284d71c | |||
56af2f8c5f | |||
9afed40ea6 | |||
07f82ad1be | |||
813563365c | |||
21879247e7 | |||
9836283c49 | |||
57fafcea23 | |||
378d5f0fa3 | |||
a5ed460241 | |||
0ac67853b9 | |||
b5c0031d4e | |||
37757b4f09 | |||
41ccdb1ef2 | |||
336ce02a6e | |||
2bfabd5bf8 | |||
e889640048 | |||
297dc3f997 | |||
a8071354e1 | |||
bd51a0cd04 | |||
4a83b64777 | |||
f65a751d82 | |||
b4fcf02316 | |||
60ef7889a2 | |||
ef9ef75a7b | |||
22d95e462e | |||
3e4a058b01 | |||
6ff892165a | |||
40911e435e | |||
70626e6a1e | |||
d088331ea3 | |||
85d5bf81b9 | |||
a98a1d10e3 | |||
5efab06198 | |||
12481781a0 | |||
166aaf178c | |||
b40f87cdf5 | |||
363a232cb4 | |||
9946a5ebd9 | |||
33eb5833b2 | |||
bfe029a11d | |||
da6874a7b2 | |||
cafb92487b | |||
b79523681d | |||
fee4e39ca3 | |||
b00211a551 | |||
cc0d50a2c2 | |||
1cbc830189 | |||
e475476d10 | |||
7892192751 | |||
14b3741ec5 | |||
47b26e8716 | |||
39e284772d | |||
38fb835854 | |||
83be7cec98 | |||
89cb304ea0 | |||
15bd936b96 | |||
3d688cc25d | |||
bf6048e81d | |||
ddde747644 | |||
7f7802e643 | |||
bf2460e2f9 | |||
e1c6109e62 | |||
b7514493a0 | |||
eaf2a25f12 | |||
cf659a1926 | |||
8917e0c301 | |||
10083ec4cc | |||
bf61885cb4 | |||
7ae7da8fb9 | |||
b92d6f490d | |||
52ebe34eeb | |||
8794a551bd | |||
b454d24e04 | |||
6e55c5997e | |||
6294a807d3 | |||
18710e7720 | |||
b36aba9840 | |||
f389fea8fa | |||
141df73930 | |||
14e70878c5 | |||
3cc7462a0c | |||
c1d7a28093 | |||
b479f89979 | |||
6d4d271694 | |||
74d19f685f | |||
a10938ae31 | |||
943e607442 | |||
c8af12d0fa | |||
63b5f05d47 | |||
3c24a6c317 | |||
b148213366 | |||
9500448220 | |||
9625e9da75 | |||
37675c6a87 | |||
09cd4d0a43 | |||
d44ed79ccc | |||
84970bafd4 | |||
5d8594f636 | |||
a26fd8a888 | |||
863a87d5f3 | |||
23c9e3ec1e | |||
25435a4bad | |||
33952c48bc | |||
4938ee08e8 | |||
66a39fce6c | |||
c1c14faad9 | |||
7097aba6be | |||
487cf98c0b | |||
9c2099d585 | |||
3cc3506965 | |||
8192267dea | |||
367343ae6e | |||
b006771cba | |||
a503349e20 | |||
26dc628ab3 | |||
de022d2570 | |||
0d3557ad72 | |||
440c33343d | |||
dd2e1e9445 | |||
2add88eedc | |||
33596d5d07 | |||
bbf00120f7 | |||
3ff1907593 | |||
264725c25f | |||
9a1234e57f | |||
ebc7f69d92 | |||
eeeaf04c5e | |||
4bb039e225 | |||
4c3c04d03c | |||
f4dffe7181 | |||
9ab6fe4fed | |||
1cc3b32f4c | |||
2a274cbe30 | |||
c990d65c37 | |||
c46997aa87 | |||
f39a0f5dd0 | |||
f27a665e05 | |||
5442f0b622 | |||
6c0f1903e6 | |||
a7bb63c55d | |||
3462acbbff | |||
463da84806 | |||
f4ba20d1c0 | |||
050f3975f6 | |||
d8e18c96a9 | |||
3e0188e92d | |||
315b7f8632 | |||
40a257e11f | |||
f419f914fc | |||
f52ace459a | |||
3c7ea8d619 | |||
fa2ad305e3 | |||
61890382eb |
@ -8,6 +8,7 @@ IndentCaseLabels: true
|
|||||||
BreakBeforeBraces: Linux
|
BreakBeforeBraces: Linux
|
||||||
AlignEscapedNewlinesLeft: false
|
AlignEscapedNewlinesLeft: false
|
||||||
AllowShortFunctionsOnASingleLine: false
|
AllowShortFunctionsOnASingleLine: false
|
||||||
|
AlignTrailingComments: true
|
||||||
SpacesBeforeTrailingComments: 2
|
SpacesBeforeTrailingComments: 2
|
||||||
PenaltyReturnTypeOnItsOwnLine: 200
|
PenaltyReturnTypeOnItsOwnLine: 200
|
||||||
AllowAllParametersOfDeclarationOnNextLine: false
|
AllowAllParametersOfDeclarationOnNextLine: false
|
||||||
@ -15,4 +16,5 @@ AllowShortIfStatementsOnASingleLine: false
|
|||||||
AllowShortLoopsOnASingleLine: false
|
AllowShortLoopsOnASingleLine: false
|
||||||
BinPackParameters: false
|
BinPackParameters: false
|
||||||
BreakBeforeBinaryOperators: true
|
BreakBeforeBinaryOperators: true
|
||||||
|
BreakBeforeTernaryOperators: true
|
||||||
ContinuationIndentWidth: 4
|
ContinuationIndentWidth: 4
|
@ -5,12 +5,8 @@ indent_style = space
|
|||||||
indent_size = 2
|
indent_size = 2
|
||||||
end_of_line = lf
|
end_of_line = lf
|
||||||
insert_final_newline = true
|
insert_final_newline = true
|
||||||
charset = utf_8
|
charset = utf-8
|
||||||
|
|
||||||
[runtime/doc/*.txt]
|
[{Makefile,**/Makefile,runtime/doc/*.txt}]
|
||||||
indent_style = tab
|
indent_style = tab
|
||||||
indent_size = 8
|
indent_size = 8
|
||||||
|
|
||||||
[Makefile]
|
|
||||||
indent_style = tab
|
|
||||||
tab_width = 4
|
|
||||||
|
33
.travis.yml
33
.travis.yml
@ -1,5 +1,5 @@
|
|||||||
dist: trusty
|
dist: xenial
|
||||||
sudo: false
|
|
||||||
language: c
|
language: c
|
||||||
|
|
||||||
env:
|
env:
|
||||||
@ -25,7 +25,7 @@ env:
|
|||||||
-DBUSTED_OUTPUT_TYPE=nvim
|
-DBUSTED_OUTPUT_TYPE=nvim
|
||||||
-DDEPS_PREFIX=$DEPS_BUILD_DIR/usr
|
-DDEPS_PREFIX=$DEPS_BUILD_DIR/usr
|
||||||
-DMIN_LOG_LEVEL=3"
|
-DMIN_LOG_LEVEL=3"
|
||||||
- DEPS_CMAKE_FLAGS="-DDEPS_DOWNLOAD_DIR:PATH=$DEPS_DOWNLOAD_DIR"
|
- DEPS_CMAKE_FLAGS="-DDEPS_DOWNLOAD_DIR:PATH=$DEPS_DOWNLOAD_DIR -DUSE_BUNDLED_GPERF=OFF"
|
||||||
# Additional CMake flags for 32-bit builds.
|
# Additional CMake flags for 32-bit builds.
|
||||||
- CMAKE_FLAGS_32BIT="-DCMAKE_SYSTEM_LIBRARY_PATH=/lib32:/usr/lib32:/usr/local/lib32
|
- CMAKE_FLAGS_32BIT="-DCMAKE_SYSTEM_LIBRARY_PATH=/lib32:/usr/lib32:/usr/local/lib32
|
||||||
-DCMAKE_IGNORE_PATH=/lib:/usr/lib:/usr/local/lib
|
-DCMAKE_IGNORE_PATH=/lib:/usr/lib:/usr/local/lib
|
||||||
@ -34,6 +34,7 @@ env:
|
|||||||
- ASAN_OPTIONS="detect_leaks=1:check_initialization_order=1:log_path=$LOG_DIR/asan"
|
- ASAN_OPTIONS="detect_leaks=1:check_initialization_order=1:log_path=$LOG_DIR/asan"
|
||||||
- TSAN_OPTIONS="log_path=$LOG_DIR/tsan"
|
- TSAN_OPTIONS="log_path=$LOG_DIR/tsan"
|
||||||
- UBSAN_OPTIONS="print_stacktrace=1 log_path=$LOG_DIR/ubsan"
|
- UBSAN_OPTIONS="print_stacktrace=1 log_path=$LOG_DIR/ubsan"
|
||||||
|
- ASAN_SYMBOLIZE=asan_symbolize
|
||||||
# Environment variables for Valgrind.
|
# Environment variables for Valgrind.
|
||||||
- VALGRIND_LOG="$LOG_DIR/valgrind-%p.log"
|
- VALGRIND_LOG="$LOG_DIR/valgrind-%p.log"
|
||||||
# If this file exists, the cache is valid (compile was successful).
|
# If this file exists, the cache is valid (compile was successful).
|
||||||
@ -50,12 +51,12 @@ jobs:
|
|||||||
include:
|
include:
|
||||||
- stage: normal builds
|
- stage: normal builds
|
||||||
os: linux
|
os: linux
|
||||||
compiler: clang
|
compiler: clang-4.0
|
||||||
|
# Use Lua so that ASAN can test our embedded Lua support. 8fec4d53d0f6
|
||||||
env: >
|
env: >
|
||||||
CLANG_SANITIZER=ASAN_UBSAN
|
CLANG_SANITIZER=ASAN_UBSAN
|
||||||
# Use Lua so that ASAN can test our embedded Lua support. 8fec4d53d0f6
|
|
||||||
CMAKE_FLAGS="$CMAKE_FLAGS -DPREFER_LUA=ON"
|
CMAKE_FLAGS="$CMAKE_FLAGS -DPREFER_LUA=ON"
|
||||||
sudo: true
|
ASAN_SYMBOLIZE=asan_symbolize-4.0
|
||||||
- os: linux
|
- os: linux
|
||||||
compiler: gcc
|
compiler: gcc
|
||||||
env: >
|
env: >
|
||||||
@ -69,10 +70,10 @@ jobs:
|
|||||||
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: xcode9.4 # macOS 10.13
|
||||||
- os: osx
|
- os: osx
|
||||||
compiler: gcc
|
compiler: gcc
|
||||||
osx_image: xcode7.3 # macOS 10.11
|
osx_image: xcode9.4 # macOS 10.13
|
||||||
- os: linux
|
- os: linux
|
||||||
env: CI_TARGET=lint
|
env: CI_TARGET=lint
|
||||||
- stage: Flaky builds
|
- stage: Flaky builds
|
||||||
@ -96,29 +97,35 @@ before_cache: ci/before_cache.sh
|
|||||||
addons:
|
addons:
|
||||||
apt:
|
apt:
|
||||||
packages:
|
packages:
|
||||||
|
- apport
|
||||||
- autoconf
|
- autoconf
|
||||||
- automake
|
- automake
|
||||||
- apport
|
|
||||||
- build-essential
|
- build-essential
|
||||||
- clang
|
- clang-4.0
|
||||||
- cmake
|
- cmake
|
||||||
- cscope
|
- cscope
|
||||||
- g++-multilib
|
- g++-multilib
|
||||||
- gcc-multilib
|
- gcc-multilib
|
||||||
- gdb
|
- gdb
|
||||||
|
- gperf
|
||||||
- language-pack-tr
|
- language-pack-tr
|
||||||
- libc6-dev-i386
|
- libc6-dev-i386
|
||||||
- libtool
|
- libtool-bin
|
||||||
- locales
|
- locales
|
||||||
- ninja-build
|
- ninja-build
|
||||||
- pkg-config
|
- pkg-config
|
||||||
- unzip
|
- unzip
|
||||||
- valgrind
|
- valgrind
|
||||||
- xclip
|
- xclip
|
||||||
|
homebrew:
|
||||||
|
update: true
|
||||||
|
packages:
|
||||||
|
- ccache
|
||||||
|
- ninja
|
||||||
|
|
||||||
branches:
|
branches:
|
||||||
except:
|
only:
|
||||||
- nightly
|
- master
|
||||||
|
|
||||||
cache:
|
cache:
|
||||||
apt: true
|
apt: true
|
||||||
|
146
CMakeLists.txt
146
CMakeLists.txt
@ -2,11 +2,14 @@
|
|||||||
# intro: https://codingnest.com/basic-cmake/
|
# intro: https://codingnest.com/basic-cmake/
|
||||||
# best practices (3.0+): https://gist.github.com/mbinna/c61dbb39bca0e4fb7d1f73b0d66a4fd1
|
# best practices (3.0+): https://gist.github.com/mbinna/c61dbb39bca0e4fb7d1f73b0d66a4fd1
|
||||||
|
|
||||||
cmake_minimum_required(VERSION 2.8.7)
|
cmake_minimum_required(VERSION 2.8.12)
|
||||||
project(nvim)
|
project(nvim C)
|
||||||
|
|
||||||
if(POLICY CMP0059)
|
if(POLICY CMP0059)
|
||||||
cmake_policy(SET CMP0059 OLD) # Needed until cmake 2.8.12. #4389
|
# Needed for use of DEFINITIONS variable, which is used to collect the
|
||||||
|
# compilation flags for reporting in "nvim --version"
|
||||||
|
# https://github.com/neovim/neovim/pull/8558#issuecomment-398033140
|
||||||
|
cmake_policy(SET CMP0059 OLD)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Point CMake at any custom modules we may ship
|
# Point CMake at any custom modules we may ship
|
||||||
@ -15,12 +18,41 @@ list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/cmake")
|
|||||||
# We don't support building in-tree.
|
# We don't support building in-tree.
|
||||||
include(PreventInTreeBuilds)
|
include(PreventInTreeBuilds)
|
||||||
|
|
||||||
|
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
||||||
|
|
||||||
# Prefer our bundled versions of dependencies.
|
# Prefer our bundled versions of dependencies.
|
||||||
if(DEFINED ENV{DEPS_BUILD_DIR})
|
if(DEFINED ENV{DEPS_BUILD_DIR})
|
||||||
set(DEPS_PREFIX "$ENV{DEPS_BUILD_DIR}/usr" CACHE PATH "Path prefix for finding dependencies")
|
set(DEPS_PREFIX "$ENV{DEPS_BUILD_DIR}/usr" CACHE PATH "Path prefix for finding dependencies")
|
||||||
else()
|
else()
|
||||||
set(DEPS_PREFIX "${CMAKE_CURRENT_SOURCE_DIR}/.deps/usr" CACHE PATH "Path prefix for finding dependencies")
|
set(DEPS_PREFIX "${CMAKE_CURRENT_SOURCE_DIR}/.deps/usr" CACHE PATH "Path prefix for finding dependencies")
|
||||||
|
# When running from within CLion or Visual Studio,
|
||||||
|
# build bundled dependencies automatically.
|
||||||
|
if(NOT EXISTS ${DEPS_PREFIX}
|
||||||
|
AND (DEFINED ENV{CLION_IDE}
|
||||||
|
OR DEFINED ENV{VisualStudioEdition}))
|
||||||
|
message(STATUS "Building dependencies...")
|
||||||
|
set(DEPS_BUILD_DIR ${PROJECT_BINARY_DIR}/.deps)
|
||||||
|
file(MAKE_DIRECTORY ${DEPS_BUILD_DIR})
|
||||||
|
execute_process(
|
||||||
|
COMMAND ${CMAKE_COMMAND} -G ${CMAKE_GENERATOR}
|
||||||
|
-DCMAKE_TOOLCHAIN_FILE=${CMAKE_TOOLCHAIN_FILE}
|
||||||
|
-DCMAKE_BUILD_TYPE=${CMAKE_BUILD_TYPE}
|
||||||
|
-DCMAKE_C_COMPILER=${CMAKE_C_COMPILER}
|
||||||
|
-DCMAKE_C_FLAGS=${CMAKE_C_FLAGS}
|
||||||
|
-DCMAKE_C_FLAGS_DEBUG=${CMAKE_C_FLAGS_DEBUG}
|
||||||
|
-DCMAKE_C_FLAGS_MINSIZEREL=${CMAKE_C_FLAGS_MINSIZEREL}
|
||||||
|
-DCMAKE_C_FLAGS_RELWITHDEBINFO=${CMAKE_C_FLAGS_RELWITHDEBINFO}
|
||||||
|
-DCMAKE_C_FLAGS_RELEASE=${CMAKE_C_FLAGS_RELEASE}
|
||||||
|
-DCMAKE_MAKE_PROGRAM=${CMAKE_MAKE_PROGRAM}
|
||||||
|
${PROJECT_SOURCE_DIR}/third-party
|
||||||
|
WORKING_DIRECTORY ${DEPS_BUILD_DIR})
|
||||||
|
execute_process(
|
||||||
|
COMMAND ${CMAKE_COMMAND} --build ${DEPS_BUILD_DIR}
|
||||||
|
--config ${CMAKE_BUILD_TYPE})
|
||||||
|
set(DEPS_PREFIX ${DEPS_BUILD_DIR}/usr)
|
||||||
endif()
|
endif()
|
||||||
|
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)
|
||||||
@ -47,9 +79,6 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
|||||||
if(CMAKE_COMPILER_IS_GNUCC)
|
if(CMAKE_COMPILER_IS_GNUCC)
|
||||||
set(CMAKE_INCLUDE_SYSTEM_FLAG_C "-isystem ")
|
set(CMAKE_INCLUDE_SYSTEM_FLAG_C "-isystem ")
|
||||||
endif()
|
endif()
|
||||||
if(CMAKE_COMPILER_IS_GNUCXX)
|
|
||||||
set(CMAKE_INCLUDE_SYSTEM_FLAG_CXX "-isystem ")
|
|
||||||
endif()
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(WIN32 OR CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
if(WIN32 OR CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
||||||
@ -59,11 +88,19 @@ endif()
|
|||||||
|
|
||||||
option(ENABLE_LIBINTL "enable libintl" ON)
|
option(ENABLE_LIBINTL "enable libintl" ON)
|
||||||
option(ENABLE_LIBICONV "enable libiconv" ON)
|
option(ENABLE_LIBICONV "enable libiconv" ON)
|
||||||
|
if (MINGW)
|
||||||
|
# Disable LTO by default as it may not compile
|
||||||
|
# See https://github.com/Alexpux/MINGW-packages/issues/3516
|
||||||
|
# and https://github.com/neovim/neovim/pull/8654#issuecomment-402316672
|
||||||
|
option(ENABLE_LTO "enable link time optimization" OFF)
|
||||||
|
else()
|
||||||
|
option(ENABLE_LTO "enable link time optimization" ON)
|
||||||
|
endif()
|
||||||
|
|
||||||
# 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'")
|
||||||
set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Choose the type of build." FORCE)
|
set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Choose the type of build" FORCE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Set available build types for CMake GUIs.
|
# Set available build types for CMake GUIs.
|
||||||
@ -75,11 +112,11 @@ set_property(CACHE CMAKE_BUILD_TYPE PROPERTY
|
|||||||
# 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 3)
|
set(NVIM_VERSION_MINOR 3)
|
||||||
set(NVIM_VERSION_PATCH 0)
|
set(NVIM_VERSION_PATCH 2)
|
||||||
set(NVIM_VERSION_PRERELEASE "") # for package maintainers
|
set(NVIM_VERSION_PRERELEASE "") # for package maintainers
|
||||||
|
|
||||||
# API level
|
# API level
|
||||||
set(NVIM_API_LEVEL 4) # Bump this after any API change.
|
set(NVIM_API_LEVEL 5) # 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)
|
||||||
|
|
||||||
@ -103,7 +140,7 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
|||||||
|
|
||||||
# Default to -O2 on release builds.
|
# Default to -O2 on release builds.
|
||||||
if(CMAKE_C_FLAGS_RELEASE MATCHES "-O3")
|
if(CMAKE_C_FLAGS_RELEASE MATCHES "-O3")
|
||||||
message(STATUS "Replacing -O3 in CMAKE_C_FLAGS_RELEASE with -O2.")
|
message(STATUS "Replacing -O3 in CMAKE_C_FLAGS_RELEASE with -O2")
|
||||||
string(REPLACE "-O3" "-O2" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
|
string(REPLACE "-O3" "-O2" CMAKE_C_FLAGS_RELEASE "${CMAKE_C_FLAGS_RELEASE}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@ -171,17 +208,16 @@ main(void)
|
|||||||
" HAS_ACCEPTABLE_FORTIFY)
|
" HAS_ACCEPTABLE_FORTIFY)
|
||||||
|
|
||||||
if(NOT HAS_ACCEPTABLE_FORTIFY)
|
if(NOT HAS_ACCEPTABLE_FORTIFY)
|
||||||
message(STATUS "Unsupported _FORTIFY_SOURCE found, forcing _FORTIFY_SOURCE=1.")
|
message(STATUS "Unsupported _FORTIFY_SOURCE found, forcing _FORTIFY_SOURCE=1")
|
||||||
# Extract possible prefix to _FORTIFY_SOURCE (e.g. -Wp,-D_FORTIFY_SOURCE).
|
# Extract possible prefix to _FORTIFY_SOURCE (e.g. -Wp,-D_FORTIFY_SOURCE).
|
||||||
STRING(REGEX MATCH "[^\ ]+-D_FORTIFY_SOURCE" _FORTIFY_SOURCE_PREFIX "${CMAKE_C_FLAGS}")
|
STRING(REGEX MATCH "[^\ ]+-D_FORTIFY_SOURCE" _FORTIFY_SOURCE_PREFIX "${CMAKE_C_FLAGS}")
|
||||||
STRING(REPLACE "-D_FORTIFY_SOURCE" "" _FORTIFY_SOURCE_PREFIX "${_FORTIFY_SOURCE_PREFIX}" )
|
STRING(REPLACE "-D_FORTIFY_SOURCE" "" _FORTIFY_SOURCE_PREFIX "${_FORTIFY_SOURCE_PREFIX}" )
|
||||||
if(NOT _FORTIFY_SOURCE_PREFIX STREQUAL "")
|
if(NOT _FORTIFY_SOURCE_PREFIX STREQUAL "")
|
||||||
message(STATUS "Detected _FORTIFY_SOURCE Prefix=${_FORTIFY_SOURCE_PREFIX}.")
|
message(STATUS "Detected _FORTIFY_SOURCE Prefix=${_FORTIFY_SOURCE_PREFIX}")
|
||||||
endif()
|
endif()
|
||||||
# -U in add_definitions doesn't end up in the correct spot, so we add it to
|
# -U in add_definitions doesn't end up in the correct spot, so we add it to
|
||||||
# the flags variable instead.
|
# the flags variable instead.
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_FORTIFY_SOURCE_PREFIX}-U_FORTIFY_SOURCE ${_FORTIFY_SOURCE_PREFIX}-D_FORTIFY_SOURCE=1")
|
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${_FORTIFY_SOURCE_PREFIX}-U_FORTIFY_SOURCE ${_FORTIFY_SOURCE_PREFIX}-D_FORTIFY_SOURCE=1")
|
||||||
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_FORTIFY_SOURCE_PREFIX}-U_FORTIFY_SOURCE ${_FORTIFY_SOURCE_PREFIX}-D_FORTIFY_SOURCE=1")
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
# Remove --sort-common from linker flags, as this seems to cause bugs (see #2641, #3374).
|
# Remove --sort-common from linker flags, as this seems to cause bugs (see #2641, #3374).
|
||||||
@ -189,7 +225,7 @@ endif()
|
|||||||
if(CMAKE_EXE_LINKER_FLAGS MATCHES "--sort-common" OR
|
if(CMAKE_EXE_LINKER_FLAGS MATCHES "--sort-common" OR
|
||||||
CMAKE_SHARED_LINKER_FLAGS MATCHES "--sort-common" OR
|
CMAKE_SHARED_LINKER_FLAGS MATCHES "--sort-common" OR
|
||||||
CMAKE_MODULE_LINKER_FLAGS MATCHES "--sort-common")
|
CMAKE_MODULE_LINKER_FLAGS MATCHES "--sort-common")
|
||||||
message(STATUS "Removing --sort-common from linker flags.")
|
message(STATUS "Removing --sort-common from linker flags")
|
||||||
string(REGEX REPLACE ",--sort-common(=[^,]+)?" "" CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}")
|
string(REGEX REPLACE ",--sort-common(=[^,]+)?" "" CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS}")
|
||||||
string(REGEX REPLACE ",--sort-common(=[^,]+)?" "" CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}")
|
string(REGEX REPLACE ",--sort-common(=[^,]+)?" "" CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}")
|
||||||
string(REGEX REPLACE ",--sort-common(=[^,]+)?" "" CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS}")
|
string(REGEX REPLACE ",--sort-common(=[^,]+)?" "" CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS}")
|
||||||
@ -264,7 +300,7 @@ if(HAS_DIAG_COLOR_FLAG)
|
|||||||
add_definitions(-fdiagnostics-color=auto)
|
add_definitions(-fdiagnostics-color=auto)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
if(CMAKE_C_COMPILER_ID STREQUAL "GNU")
|
||||||
# 1. Array-bounds testing is broken in some GCC versions before 4.8.5.
|
# 1. 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+:
|
# 2. But _Pragma("...ignored") is broken (unresolved) in GCC 5+:
|
||||||
@ -276,10 +312,10 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
|||||||
endif()
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
option(TRAVIS_CI_BUILD "Travis/QuickBuild CI. Extra flags will be set." OFF)
|
option(TRAVIS_CI_BUILD "Travis/QuickBuild CI, extra flags will be set" OFF)
|
||||||
|
|
||||||
if(TRAVIS_CI_BUILD)
|
if(TRAVIS_CI_BUILD)
|
||||||
message(STATUS "Travis/QuickBuild CI build enabled.")
|
message(STATUS "Travis/QuickBuild CI build enabled")
|
||||||
add_definitions(-Werror)
|
add_definitions(-Werror)
|
||||||
if(DEFINED ENV{BUILD_32BIT})
|
if(DEFINED ENV{BUILD_32BIT})
|
||||||
# Get some test coverage for unsigned char
|
# Get some test coverage for unsigned char
|
||||||
@ -297,10 +333,14 @@ option(LOG_LIST_ACTIONS "Add list actions logging" OFF)
|
|||||||
|
|
||||||
add_definitions(-DINCLUDE_GENERATED_DECLARATIONS)
|
add_definitions(-DINCLUDE_GENERATED_DECLARATIONS)
|
||||||
|
|
||||||
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
if(CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_C_COMPILER_ID STREQUAL "Clang")
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--no-undefined")
|
if(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
|
||||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined")
|
set(NO_UNDEFINED "-Wl,--no-undefined -lsocket")
|
||||||
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--no-undefined")
|
elseif(NOT CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
||||||
|
set(NO_UNDEFINED "-Wl,--no-undefined")
|
||||||
|
endif()
|
||||||
|
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} ${NO_UNDEFINED}")
|
||||||
|
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} ${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
|
||||||
@ -308,10 +348,6 @@ if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
|||||||
add_definitions(-D_GNU_SOURCE)
|
add_definitions(-D_GNU_SOURCE)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(CMAKE_COMPILER_IS_GNUCXX AND CMAKE_SYSTEM_NAME STREQUAL "SunOS")
|
|
||||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--no-undefined -lsocket")
|
|
||||||
endif()
|
|
||||||
|
|
||||||
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND CMAKE_SIZEOF_VOID_P EQUAL 8)
|
if(CMAKE_SYSTEM_NAME STREQUAL "Darwin" AND CMAKE_SIZEOF_VOID_P EQUAL 8)
|
||||||
# Required for luajit.
|
# Required for luajit.
|
||||||
set(CMAKE_EXE_LINKER_FLAGS
|
set(CMAKE_EXE_LINKER_FLAGS
|
||||||
@ -335,7 +371,7 @@ include_directories(SYSTEM ${MSGPACK_INCLUDE_DIRS})
|
|||||||
option(PREFER_LUA "Prefer Lua over LuaJIT in the nvim executable." OFF)
|
option(PREFER_LUA "Prefer Lua over LuaJIT in the nvim executable." OFF)
|
||||||
|
|
||||||
if(PREFER_LUA)
|
if(PREFER_LUA)
|
||||||
find_package(Lua REQUIRED)
|
find_package(Lua 5.1 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.
|
# Passive (not REQUIRED): if LUAJIT_FOUND is not set, nvim-test is skipped.
|
||||||
@ -356,8 +392,9 @@ main(void)
|
|||||||
return MSGPACK_OBJECT_FLOAT32;
|
return MSGPACK_OBJECT_FLOAT32;
|
||||||
}
|
}
|
||||||
" MSGPACK_HAS_FLOAT32)
|
" MSGPACK_HAS_FLOAT32)
|
||||||
|
unset(CMAKE_REQUIRED_LIBRARIES)
|
||||||
if(MSGPACK_HAS_FLOAT32)
|
if(MSGPACK_HAS_FLOAT32)
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DNVIM_MSGPACK_HAS_FLOAT32")
|
add_definitions(-DNVIM_MSGPACK_HAS_FLOAT32)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
option(FEAT_TUI "Enable the Terminal UI" ON)
|
option(FEAT_TUI "Enable the Terminal UI" ON)
|
||||||
@ -377,11 +414,13 @@ if(FEAT_TUI)
|
|||||||
return unibi_num_from_var(unibi_var_from_num(0));
|
return unibi_num_from_var(unibi_var_from_num(0));
|
||||||
}
|
}
|
||||||
" UNIBI_HAS_VAR_FROM)
|
" UNIBI_HAS_VAR_FROM)
|
||||||
|
unset(CMAKE_REQUIRED_INCLUDES)
|
||||||
|
unset(CMAKE_REQUIRED_LIBRARIES)
|
||||||
if(UNIBI_HAS_VAR_FROM)
|
if(UNIBI_HAS_VAR_FROM)
|
||||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DNVIM_UNIBI_HAS_VAR_FROM")
|
add_definitions(-DNVIM_UNIBI_HAS_VAR_FROM)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
find_package(LibTermkey REQUIRED)
|
find_package(LibTermkey 0.18 REQUIRED)
|
||||||
include_directories(SYSTEM ${LIBTERMKEY_INCLUDE_DIRS})
|
include_directories(SYSTEM ${LIBTERMKEY_INCLUDE_DIRS})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@ -389,7 +428,7 @@ find_package(LibVterm REQUIRED)
|
|||||||
include_directories(SYSTEM ${LIBVTERM_INCLUDE_DIRS})
|
include_directories(SYSTEM ${LIBVTERM_INCLUDE_DIRS})
|
||||||
|
|
||||||
if(WIN32)
|
if(WIN32)
|
||||||
find_package(Winpty REQUIRED)
|
find_package(Winpty 0.4.3 REQUIRED)
|
||||||
include_directories(SYSTEM ${WINPTY_INCLUDE_DIRS})
|
include_directories(SYSTEM ${WINPTY_INCLUDE_DIRS})
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
@ -400,11 +439,11 @@ option(CLANG_TSAN "Enable Clang thread sanitizer for nvim binary." OFF)
|
|||||||
if((CLANG_ASAN_UBSAN AND CLANG_MSAN)
|
if((CLANG_ASAN_UBSAN AND CLANG_MSAN)
|
||||||
OR (CLANG_ASAN_UBSAN AND CLANG_TSAN)
|
OR (CLANG_ASAN_UBSAN AND CLANG_TSAN)
|
||||||
OR (CLANG_MSAN AND CLANG_TSAN))
|
OR (CLANG_MSAN AND CLANG_TSAN))
|
||||||
message(FATAL_ERROR "Sanitizers cannot be enabled simultaneously.")
|
message(FATAL_ERROR "Sanitizers cannot be enabled simultaneously")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if((CLANG_ASAN_UBSAN OR CLANG_MSAN OR CLANG_TSAN) AND NOT CMAKE_C_COMPILER_ID MATCHES "Clang")
|
if((CLANG_ASAN_UBSAN OR CLANG_MSAN OR CLANG_TSAN) AND NOT CMAKE_C_COMPILER_ID MATCHES "Clang")
|
||||||
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|Windows") # see #5318
|
if(CMAKE_SYSTEM_NAME MATCHES "OpenBSD|FreeBSD|Windows") # see #5318
|
||||||
@ -416,7 +455,7 @@ 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 enabled; disabling jemalloc")
|
||||||
else()
|
else()
|
||||||
find_package(JeMalloc REQUIRED)
|
find_package(JeMalloc REQUIRED)
|
||||||
include_directories(SYSTEM ${JEMALLOC_INCLUDE_DIRS})
|
include_directories(SYSTEM ${JEMALLOC_INCLUDE_DIRS})
|
||||||
@ -472,10 +511,10 @@ else()
|
|||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(NOT LUA_PRG_WORKS)
|
if(NOT LUA_PRG_WORKS)
|
||||||
message(FATAL_ERROR "A suitable Lua interpreter was not found.")
|
message(FATAL_ERROR "Failed to find a Lua 5.1-compatible interpreter")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
message(STATUS "Using the Lua interpreter ${LUA_PRG}.")
|
message(STATUS "Using Lua interpreter: ${LUA_PRG}")
|
||||||
|
|
||||||
# Setup busted.
|
# Setup busted.
|
||||||
find_program(BUSTED_PRG NAMES busted busted.bat)
|
find_program(BUSTED_PRG NAMES busted busted.bat)
|
||||||
@ -547,6 +586,7 @@ if(BUSTED_PRG)
|
|||||||
# Useful for automated build systems, if they want to manually run the tests.
|
# Useful for automated build systems, if they want to manually run the tests.
|
||||||
add_custom_target(unittest-prereqs
|
add_custom_target(unittest-prereqs
|
||||||
DEPENDS ${UNITTEST_PREREQS})
|
DEPENDS ${UNITTEST_PREREQS})
|
||||||
|
set_target_properties(unittest-prereqs PROPERTIES FOLDER test)
|
||||||
|
|
||||||
add_custom_target(functionaltest-prereqs
|
add_custom_target(functionaltest-prereqs
|
||||||
DEPENDS ${FUNCTIONALTEST_PREREQS})
|
DEPENDS ${FUNCTIONALTEST_PREREQS})
|
||||||
@ -569,23 +609,11 @@ if(BUSTED_PRG)
|
|||||||
-P ${PROJECT_SOURCE_DIR}/cmake/RunTests.cmake
|
-P ${PROJECT_SOURCE_DIR}/cmake/RunTests.cmake
|
||||||
DEPENDS ${UNITTEST_PREREQS}
|
DEPENDS ${UNITTEST_PREREQS}
|
||||||
${TEST_TARGET_ARGS})
|
${TEST_TARGET_ARGS})
|
||||||
|
set_target_properties(unittest PROPERTIES FOLDER test)
|
||||||
else()
|
else()
|
||||||
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)
|
if(LUA_HAS_FFI)
|
||||||
set(TEST_LIBNVIM_PATH $<TARGET_FILE:nvim-test>)
|
set(TEST_LIBNVIM_PATH $<TARGET_FILE:nvim-test>)
|
||||||
else()
|
else()
|
||||||
@ -597,7 +625,6 @@ if(BUSTED_PRG)
|
|||||||
file(GENERATE
|
file(GENERATE
|
||||||
OUTPUT ${CMAKE_BINARY_DIR}/test/config/paths.lua
|
OUTPUT ${CMAKE_BINARY_DIR}/test/config/paths.lua
|
||||||
INPUT ${CMAKE_BINARY_DIR}/test/config/paths.lua.gen)
|
INPUT ${CMAKE_BINARY_DIR}/test/config/paths.lua.gen)
|
||||||
endif()
|
|
||||||
|
|
||||||
add_custom_target(functionaltest
|
add_custom_target(functionaltest
|
||||||
COMMAND ${CMAKE_COMMAND}
|
COMMAND ${CMAKE_COMMAND}
|
||||||
@ -613,6 +640,8 @@ if(BUSTED_PRG)
|
|||||||
-P ${PROJECT_SOURCE_DIR}/cmake/RunTests.cmake
|
-P ${PROJECT_SOURCE_DIR}/cmake/RunTests.cmake
|
||||||
DEPENDS ${FUNCTIONALTEST_PREREQS}
|
DEPENDS ${FUNCTIONALTEST_PREREQS}
|
||||||
${TEST_TARGET_ARGS})
|
${TEST_TARGET_ARGS})
|
||||||
|
set_target_properties(functionaltest functionaltest-prereqs
|
||||||
|
PROPERTIES FOLDER test)
|
||||||
|
|
||||||
add_custom_target(benchmark
|
add_custom_target(benchmark
|
||||||
COMMAND ${CMAKE_COMMAND}
|
COMMAND ${CMAKE_COMMAND}
|
||||||
@ -628,6 +657,7 @@ if(BUSTED_PRG)
|
|||||||
-P ${PROJECT_SOURCE_DIR}/cmake/RunTests.cmake
|
-P ${PROJECT_SOURCE_DIR}/cmake/RunTests.cmake
|
||||||
DEPENDS ${BENCHMARK_PREREQS}
|
DEPENDS ${BENCHMARK_PREREQS}
|
||||||
${TEST_TARGET_ARGS})
|
${TEST_TARGET_ARGS})
|
||||||
|
set_target_properties(benchmark benchmark-prereqs PROPERTIES FOLDER test)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(BUSTED_LUA_PRG)
|
if(BUSTED_LUA_PRG)
|
||||||
@ -645,6 +675,7 @@ if(BUSTED_LUA_PRG)
|
|||||||
-P ${PROJECT_SOURCE_DIR}/cmake/RunTests.cmake
|
-P ${PROJECT_SOURCE_DIR}/cmake/RunTests.cmake
|
||||||
DEPENDS ${FUNCTIONALTEST_PREREQS}
|
DEPENDS ${FUNCTIONALTEST_PREREQS}
|
||||||
${TEST_TARGET_ARGS})
|
${TEST_TARGET_ARGS})
|
||||||
|
set_target_properties(functionaltest-lua PROPERTIES FOLDER test)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(LUACHECK_PRG)
|
if(LUACHECK_PRG)
|
||||||
@ -657,7 +688,7 @@ if(LUACHECK_PRG)
|
|||||||
-P ${PROJECT_SOURCE_DIR}/cmake/RunLuacheck.cmake)
|
-P ${PROJECT_SOURCE_DIR}/cmake/RunLuacheck.cmake)
|
||||||
|
|
||||||
add_custom_target(
|
add_custom_target(
|
||||||
blobcodelint
|
lintbuiltinlua
|
||||||
COMMAND
|
COMMAND
|
||||||
${CMAKE_COMMAND}
|
${CMAKE_COMMAND}
|
||||||
-DLUACHECK_PRG=${LUACHECK_PRG}
|
-DLUACHECK_PRG=${LUACHECK_PRG}
|
||||||
@ -666,10 +697,21 @@ if(LUACHECK_PRG)
|
|||||||
-DREAD_GLOBALS=vim
|
-DREAD_GLOBALS=vim
|
||||||
-P ${PROJECT_SOURCE_DIR}/cmake/RunLuacheck.cmake
|
-P ${PROJECT_SOURCE_DIR}/cmake/RunLuacheck.cmake
|
||||||
)
|
)
|
||||||
|
add_custom_target(
|
||||||
|
lintruntimelua
|
||||||
|
COMMAND
|
||||||
|
${CMAKE_COMMAND}
|
||||||
|
-DLUACHECK_PRG=${LUACHECK_PRG}
|
||||||
|
-DLUAFILES_DIR=${CMAKE_CURRENT_SOURCE_DIR}/runtime/lua
|
||||||
|
-DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME}
|
||||||
|
-DREAD_GLOBALS=vim
|
||||||
|
-P ${PROJECT_SOURCE_DIR}/cmake/RunLuacheck.cmake
|
||||||
|
)
|
||||||
# TODO(ZyX-I): Run linter for all lua code in src
|
# TODO(ZyX-I): Run linter for all lua code in src
|
||||||
add_custom_target(
|
add_custom_target(
|
||||||
lualint
|
lualint
|
||||||
DEPENDS blobcodelint
|
DEPENDS lintruntimelua
|
||||||
|
DEPENDS lintbuiltinlua
|
||||||
)
|
)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
|
48
MAINTAIN.md
Normal file
48
MAINTAIN.md
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
Maintaining the Neovim project
|
||||||
|
==============================
|
||||||
|
|
||||||
|
Notes on maintaining the Neovim project.
|
||||||
|
|
||||||
|
See also: https://github.com/git/git/blob/master/Documentation/howto/maintain-git.txt
|
||||||
|
|
||||||
|
Ticket Triage
|
||||||
|
-------------
|
||||||
|
|
||||||
|
In practice we haven't found a meaningful way to forecast more precisely than
|
||||||
|
"next" and "after next". That means there are usually one or two (at most)
|
||||||
|
planned milestones:
|
||||||
|
|
||||||
|
- Next bugfix-release (1.0.x)
|
||||||
|
- Next feature-release (1.x.0)
|
||||||
|
|
||||||
|
The forecasting problem might be solved with an explicit priority system (like
|
||||||
|
Bram's todo.txt). Meanwhile the Neovim priority system is defined by:
|
||||||
|
|
||||||
|
- PRs nearing completion (RDY).
|
||||||
|
- Issue labels. E.g. the +plan label increases the ticket's priority merely for
|
||||||
|
having a plan written down: it is _closer to completion_ than tickets without
|
||||||
|
a plan.
|
||||||
|
- Comment activity or new information.
|
||||||
|
|
||||||
|
Anything that isn't in the next milestone, and doesn't have a RDY PR ... is
|
||||||
|
just not something you care very much about, by construction. Post-release you
|
||||||
|
can review open issues, but chances are your next milestone is already getting
|
||||||
|
full :)
|
||||||
|
|
||||||
|
Release Policy
|
||||||
|
--------------
|
||||||
|
|
||||||
|
The goal is "early and often".
|
||||||
|
|
||||||
|
Up to now we use only one branch, the `master` branch.
|
||||||
|
|
||||||
|
- If `master` is unstable we don't release.
|
||||||
|
- If the last release has a major bug, we:
|
||||||
|
1. Fix the bug on `master`.
|
||||||
|
2. Disable or remove any known risks present on `master`.
|
||||||
|
3. Cut a release from `master`.
|
||||||
|
|
||||||
|
This is a bit silly, but it works ok. And it keeps `master` from biting off
|
||||||
|
more feature-creep than it can chew.
|
||||||
|
|
||||||
|
See also: https://github.com/neovim/neovim/issues/862
|
18
Makefile
18
Makefile
@ -44,10 +44,11 @@ BUILD_CMD = $(BUILD_TOOL) $(VERBOSE_FLAG)
|
|||||||
# Extra CMake flags which extend the default set
|
# Extra CMake flags which extend the default set
|
||||||
CMAKE_EXTRA_FLAGS ?=
|
CMAKE_EXTRA_FLAGS ?=
|
||||||
DEPS_CMAKE_FLAGS ?=
|
DEPS_CMAKE_FLAGS ?=
|
||||||
USE_BUNDLED_DEPS ?=
|
# Back-compat: USE_BUNDLED_DEPS was the old name.
|
||||||
|
USE_BUNDLED ?= $(USE_BUNDLED_DEPS)
|
||||||
|
|
||||||
ifneq (,$(USE_BUNDLED_DEPS))
|
ifneq (,$(USE_BUNDLED))
|
||||||
BUNDLED_CMAKE_FLAG := -DUSE_BUNDLED=$(USE_BUNDLED_DEPS)
|
BUNDLED_CMAKE_FLAG := -DUSE_BUNDLED=$(USE_BUNDLED)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifneq (,$(findstring functionaltest-lua,$(MAKECMDGOALS)))
|
ifneq (,$(findstring functionaltest-lua,$(MAKECMDGOALS)))
|
||||||
@ -76,12 +77,12 @@ build/.ran-cmake: | deps
|
|||||||
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)),)
|
||||||
+$(BUILD_CMD) -C $(DEPS_BUILD_DIR)
|
+$(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)),)
|
||||||
mkdir -p $(DEPS_BUILD_DIR)
|
mkdir -p $(DEPS_BUILD_DIR)
|
||||||
cd $(DEPS_BUILD_DIR) && \
|
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) \
|
||||||
@ -102,6 +103,10 @@ endif
|
|||||||
helptags: | nvim
|
helptags: | nvim
|
||||||
+$(BUILD_CMD) -C build helptags
|
+$(BUILD_CMD) -C build helptags
|
||||||
|
|
||||||
|
# Builds help HTML _and_ checks for invalid help tags.
|
||||||
|
helphtml: | nvim helptags
|
||||||
|
+$(BUILD_CMD) -C build doc_html
|
||||||
|
|
||||||
functionaltest: | nvim
|
functionaltest: | nvim
|
||||||
+$(BUILD_CMD) -C build functionaltest
|
+$(BUILD_CMD) -C build functionaltest
|
||||||
|
|
||||||
@ -142,6 +147,9 @@ clint-full: build/.ran-cmake
|
|||||||
check-single-includes: build/.ran-cmake
|
check-single-includes: build/.ran-cmake
|
||||||
+$(BUILD_CMD) -C build check-single-includes
|
+$(BUILD_CMD) -C build check-single-includes
|
||||||
|
|
||||||
|
generated-sources: build/.ran-cmake
|
||||||
|
+$(BUILD_CMD) -C build generated-sources
|
||||||
|
|
||||||
appimage:
|
appimage:
|
||||||
bash scripts/genappimage.sh
|
bash scripts/genappimage.sh
|
||||||
|
|
||||||
|
99
README.md
99
README.md
@ -6,12 +6,12 @@
|
|||||||
[Community](https://neovim.io/community/) |
|
[Community](https://neovim.io/community/) |
|
||||||
[Gitter **Chat**](https://gitter.im/neovim/neovim)
|
[Gitter **Chat**](https://gitter.im/neovim/neovim)
|
||||||
|
|
||||||
[](https://travis-ci.org/neovim/neovim)
|
[](https://travis-ci.org/neovim/neovim)
|
||||||
[](https://ci.appveyor.com/project/neovim/neovim/branch/master)
|
[](https://ci.appveyor.com/project/neovim/neovim/branch/master)
|
||||||
[](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/PVS-studio.html.d)
|
[](https://neovim.io/doc/reports/pvs/PVS-studio.html.d)
|
||||||
|
|
||||||
[](https://repology.org/metapackage/neovim)
|
[](https://repology.org/metapackage/neovim)
|
||||||
[](https://buildd.debian.org/neovim)
|
[](https://buildd.debian.org/neovim)
|
||||||
@ -24,11 +24,35 @@ Neovim is a project that seeks to aggressively refactor Vim in order to:
|
|||||||
- Enable [advanced UIs] without modifications to the core
|
- Enable [advanced UIs] without modifications to the core
|
||||||
- Maximize [extensibility](https://github.com/neovim/neovim/wiki/Plugin-UI-architecture)
|
- Maximize [extensibility](https://github.com/neovim/neovim/wiki/Plugin-UI-architecture)
|
||||||
|
|
||||||
See [the wiki](https://github.com/neovim/neovim/wiki/Introduction) and [Roadmap]
|
See the [Introduction](https://github.com/neovim/neovim/wiki/Introduction) wiki page and [Roadmap]
|
||||||
for more information.
|
for more information.
|
||||||
|
|
||||||
[](https://waffle.io/neovim/neovim/metrics)
|
[](https://waffle.io/neovim/neovim/metrics)
|
||||||
|
|
||||||
|
Features
|
||||||
|
--------
|
||||||
|
|
||||||
|
- Modern [GUIs](https://github.com/neovim/neovim/wiki/Related-projects#gui)
|
||||||
|
- [API](https://github.com/neovim/neovim/wiki/Related-projects#api-clients)
|
||||||
|
access from any language including Clojure, Lisp, Go, Haskell, Lua,
|
||||||
|
JavaScript, Perl, Python, Ruby, and Rust
|
||||||
|
- Embedded, scriptable [terminal emulator](https://neovim.io/doc/user/nvim_terminal_emulator.html)
|
||||||
|
- Asynchronous [job control](https://github.com/neovim/neovim/pull/2247)
|
||||||
|
- [Shared data (shada)](https://github.com/neovim/neovim/pull/2506) among multiple editor instances
|
||||||
|
- [XDG base directories](https://github.com/neovim/neovim/pull/3470) support
|
||||||
|
- Compatible with most Vim plugins, including Ruby and Python plugins
|
||||||
|
|
||||||
|
See [`:help nvim-features`][nvim-features] for the full list!
|
||||||
|
|
||||||
|
Install from package
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
Pre-built packages for Windows, macOS, and Linux are found on the
|
||||||
|
[Releases](https://github.com/neovim/neovim/releases/) page.
|
||||||
|
|
||||||
|
Managed packages are in [Homebrew], [Debian], [Ubuntu], [Fedora], [Arch Linux], [Gentoo],
|
||||||
|
and [more](https://github.com/neovim/neovim/wiki/Installing-Neovim)!
|
||||||
|
|
||||||
Install from source
|
Install from source
|
||||||
-------------------
|
-------------------
|
||||||
|
|
||||||
@ -40,22 +64,40 @@ 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:
|
To skip bundled (`third-party/*`) dependencies:
|
||||||
|
|
||||||
|
1. Install the dependencies using a package manager.
|
||||||
|
```
|
||||||
|
sudo apt install gperf luajit luarocks libuv1-dev libluajit-5.1-dev libunibilium-dev libmsgpack-dev libtermkey-dev libvterm-dev libjemalloc-dev
|
||||||
|
sudo luarocks build mpack
|
||||||
|
sudo luarocks build lpeg
|
||||||
|
sudo luarocks build inspect
|
||||||
|
```
|
||||||
|
2. Build with `USE_BUNDLED=OFF`:
|
||||||
|
```
|
||||||
|
make CMAKE_BUILD_TYPE=RelWithDebInfo USE_BUNDLED=OFF
|
||||||
|
sudo make install
|
||||||
|
```
|
||||||
|
|
||||||
|
CMake features:
|
||||||
|
|
||||||
|
- List all build targets:
|
||||||
|
```
|
||||||
cmake --build build --target help
|
cmake --build build --target help
|
||||||
|
```
|
||||||
|
- Print all variable definitions:
|
||||||
|
```
|
||||||
|
cmake -LAH
|
||||||
|
```
|
||||||
|
- `build/CMakeCache.txt` contains the resolved values of all CMake variables.
|
||||||
|
- `build/compile_commands.json` shows the full compiler invocations for each translation unit.
|
||||||
|
|
||||||
To skip "bundled" dependencies define `USE_BUNDLED_DEPS=NO` (CMake option: `USE_BUNDLED=NO`).
|
See the [Building Neovim](https://github.com/neovim/neovim/wiki/Building-Neovim) wiki page for details.
|
||||||
|
|
||||||
See [the wiki](https://github.com/neovim/neovim/wiki/Building-Neovim) for details.
|
Transitioning from Vim
|
||||||
|
|
||||||
Install from package
|
|
||||||
--------------------
|
--------------------
|
||||||
|
|
||||||
Pre-built packages for Windows, macOS, and Linux are found at the
|
See [`:help nvim-from-vim`](https://neovim.io/doc/user/nvim.html#nvim-from-vim) for instructions.
|
||||||
[Releases](https://github.com/neovim/neovim/releases/) page.
|
|
||||||
|
|
||||||
Managed packages are in [Homebrew], [Debian], [Ubuntu], [Fedora], [Arch Linux], [Gentoo],
|
|
||||||
and [more](https://github.com/neovim/neovim/wiki/Installing-Neovim)!
|
|
||||||
|
|
||||||
Project layout
|
Project layout
|
||||||
--------------
|
--------------
|
||||||
@ -63,34 +105,19 @@ Project layout
|
|||||||
├─ ci/ build automation
|
├─ ci/ build automation
|
||||||
├─ cmake/ build scripts
|
├─ cmake/ build scripts
|
||||||
├─ runtime/ user plugins/docs
|
├─ runtime/ user plugins/docs
|
||||||
├─ src/ application source code (see src/nvim/README.md)
|
├─ src/nvim/ application source code (see src/nvim/README.md)
|
||||||
│ ├─ api/ API subsystem
|
│ ├─ api/ API subsystem
|
||||||
│ ├─ eval/ VimL subsystem
|
│ ├─ eval/ VimL subsystem
|
||||||
│ ├─ event/ event-loop subsystem
|
│ ├─ event/ event-loop subsystem
|
||||||
│ ├─ generators/ code generation (pre-compilation)
|
│ ├─ generators/ code generation (pre-compilation)
|
||||||
│ ├─ lib/ generic data structures
|
│ ├─ lib/ generic data structures
|
||||||
│ ├─ lua/ lua subsystem
|
│ ├─ lua/ Lua subsystem
|
||||||
│ ├─ msgpack_rpc/ RPC subsystem
|
│ ├─ msgpack_rpc/ RPC subsystem
|
||||||
│ ├─ os/ low-level platform code
|
│ ├─ os/ low-level platform code
|
||||||
│ └─ tui/ built-in UI
|
│ └─ tui/ built-in UI
|
||||||
├─ 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)
|
||||||
|
|
||||||
Features
|
|
||||||
--------
|
|
||||||
|
|
||||||
- Modern [GUIs](https://github.com/neovim/neovim/wiki/Related-projects#gui)
|
|
||||||
- [API](https://github.com/neovim/neovim/wiki/Related-projects#api-clients)
|
|
||||||
access from any language including clojure, lisp, go, haskell, lua,
|
|
||||||
javascript, perl, python, ruby, rust.
|
|
||||||
- Embedded, scriptable [terminal emulator](https://neovim.io/doc/user/nvim_terminal_emulator.html)
|
|
||||||
- Asynchronous [job control](https://github.com/neovim/neovim/pull/2247)
|
|
||||||
- [Shared data (shada)](https://github.com/neovim/neovim/pull/2506) among multiple editor instances
|
|
||||||
- [XDG base directories](https://github.com/neovim/neovim/pull/3470) support
|
|
||||||
- Compatible with most Vim plugins, including Ruby and Python plugins.
|
|
||||||
|
|
||||||
See [`:help nvim-features`][nvim-features] for the full list!
|
|
||||||
|
|
||||||
License
|
License
|
||||||
-------
|
-------
|
||||||
|
|
||||||
@ -124,7 +151,7 @@ See `LICENSE` for details.
|
|||||||
[Homebrew]: https://github.com/neovim/homebrew-neovim#installation
|
[Homebrew]: https://github.com/neovim/homebrew-neovim#installation
|
||||||
[Debian]: https://packages.debian.org/testing/neovim
|
[Debian]: https://packages.debian.org/testing/neovim
|
||||||
[Ubuntu]: http://packages.ubuntu.com/search?keywords=neovim
|
[Ubuntu]: http://packages.ubuntu.com/search?keywords=neovim
|
||||||
[Fedora]: https://admin.fedoraproject.org/pkgdb/package/rpms/neovim
|
[Fedora]: https://apps.fedoraproject.org/packages/neovim
|
||||||
[Arch Linux]: https://www.archlinux.org/packages/?q=neovim
|
[Arch Linux]: https://www.archlinux.org/packages/?q=neovim
|
||||||
[Gentoo]: https://packages.gentoo.org/packages/app-editors/neovim
|
[Gentoo]: https://packages.gentoo.org/packages/app-editors/neovim
|
||||||
|
|
||||||
|
@ -18,6 +18,7 @@ build_script:
|
|||||||
- powershell ci\build.ps1
|
- powershell ci\build.ps1
|
||||||
cache:
|
cache:
|
||||||
- C:\msys64\var\cache\pacman\pkg -> ci\build.ps1
|
- C:\msys64\var\cache\pacman\pkg -> ci\build.ps1
|
||||||
|
- .deps -> ci\build.ps1
|
||||||
- .deps -> third-party\**
|
- .deps -> third-party\**
|
||||||
artifacts:
|
artifacts:
|
||||||
- path: build/Neovim.zip
|
- path: build/Neovim.zip
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
-- TODO(jkeyes): remove this and use the upstream version as soon as it is
|
-- TODO(jkeyes): Use the upstream version when busted releases it. (But how to
|
||||||
-- available in a release of busted.
|
-- inject our call to global_helpers.read_nvim_log() ?)
|
||||||
|
|
||||||
local pretty = require 'pl.pretty'
|
local pretty = require 'pl.pretty'
|
||||||
|
local global_helpers = require('test.helpers')
|
||||||
|
|
||||||
return function(options)
|
return function(options)
|
||||||
local busted = require 'busted'
|
local busted = require 'busted'
|
||||||
@ -18,6 +19,7 @@ return function(options)
|
|||||||
end
|
end
|
||||||
|
|
||||||
handler.suiteEnd = function()
|
handler.suiteEnd = function()
|
||||||
|
io.write(global_helpers.read_nvim_log())
|
||||||
print('1..' .. counter)
|
print('1..' .. counter)
|
||||||
io.flush()
|
io.flush()
|
||||||
return nil, true
|
return nil, true
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
local s = require 'say'
|
local s = require 'say'
|
||||||
local pretty = require 'pl.pretty'
|
local pretty = require 'pl.pretty'
|
||||||
local term = require 'term'
|
local term = require 'term'
|
||||||
|
local global_helpers = require('test.helpers')
|
||||||
|
|
||||||
local colors
|
local colors
|
||||||
|
|
||||||
@ -200,6 +201,7 @@ return function(options)
|
|||||||
local tests = (testCount == 1 and 'test' or 'tests')
|
local tests = (testCount == 1 and 'test' or 'tests')
|
||||||
local files = (fileCount == 1 and 'file' or 'files')
|
local files = (fileCount == 1 and 'file' or 'files')
|
||||||
io.write(globalTeardown)
|
io.write(globalTeardown)
|
||||||
|
io.write(global_helpers.read_nvim_log())
|
||||||
io.write(suiteEndString:format(testCount, tests, fileCount, files, elapsedTime_ms))
|
io.write(suiteEndString:format(testCount, tests, fileCount, files, elapsedTime_ms))
|
||||||
io.write(getSummaryString())
|
io.write(getSummaryString())
|
||||||
io.flush()
|
io.flush()
|
||||||
|
@ -7,10 +7,6 @@ if [[ "${CI_TARGET}" == lint ]]; then
|
|||||||
exit
|
exit
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ "${TRAVIS_OS_NAME}" == osx ]]; then
|
|
||||||
brew update
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo 'python info:'
|
echo 'python info:'
|
||||||
(
|
(
|
||||||
2>&1 python --version || true
|
2>&1 python --version || true
|
||||||
@ -24,17 +20,15 @@ echo 'python info:'
|
|||||||
) | sed 's/^/ /'
|
) | sed 's/^/ /'
|
||||||
|
|
||||||
if [[ "${TRAVIS_OS_NAME}" == osx ]]; then
|
if [[ "${TRAVIS_OS_NAME}" == osx ]]; then
|
||||||
echo "Upgrade Python 3."
|
echo "Upgrade Python 3 pip"
|
||||||
brew upgrade python
|
python3 -m pip -q install --user --upgrade pip
|
||||||
echo "Upgrade Python 3 pip."
|
|
||||||
pip3 -q install --user --upgrade pip
|
|
||||||
else
|
else
|
||||||
echo "Upgrade Python 2 pip."
|
echo "Upgrade Python 2 pip"
|
||||||
pip2.7 -q install --user --upgrade pip
|
python2.7 -m pip -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
|
python3 -m pip -q install --user --upgrade pip || true
|
||||||
fi
|
fi
|
||||||
|
|
||||||
echo "Install node (LTS)"
|
echo "Install node (LTS)"
|
||||||
|
46
ci/build.ps1
46
ci/build.ps1
@ -1,4 +1,5 @@
|
|||||||
Set-PSDebug -Trace 1
|
$ErrorActionPreference = 'stop'
|
||||||
|
Set-PSDebug -Strict -Trace 1
|
||||||
|
|
||||||
$env:CONFIGURATION -match '^(?<compiler>\w+)_(?<bits>32|64)(?:-(?<option>\w+))?$'
|
$env:CONFIGURATION -match '^(?<compiler>\w+)_(?<bits>32|64)(?:-(?<option>\w+))?$'
|
||||||
$compiler = $Matches.compiler
|
$compiler = $Matches.compiler
|
||||||
@ -12,14 +13,16 @@ $nvimCmakeVars = @{
|
|||||||
CMAKE_BUILD_TYPE = $cmakeBuildType;
|
CMAKE_BUILD_TYPE = $cmakeBuildType;
|
||||||
BUSTED_OUTPUT_TYPE = 'nvim';
|
BUSTED_OUTPUT_TYPE = 'nvim';
|
||||||
}
|
}
|
||||||
|
$uploadToCodeCov = $false
|
||||||
|
|
||||||
# For pull requests, skip some build configurations to save time.
|
# 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)$') {
|
if ($env:APPVEYOR_PULL_REQUEST_HEAD_COMMIT -and $env:CONFIGURATION -match '^(MSVC_64|MINGW_32|MINGW_64-gcov)$') {
|
||||||
exit 0
|
exit 0
|
||||||
}
|
}
|
||||||
|
|
||||||
function exitIfFailed() {
|
function exitIfFailed() {
|
||||||
if ($LastExitCode -ne 0) {
|
if ($LastExitCode -ne 0) {
|
||||||
|
Set-PSDebug -Off
|
||||||
exit $LastExitCode
|
exit $LastExitCode
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -38,15 +41,21 @@ if ($compiler -eq 'MINGW') {
|
|||||||
# These are native MinGW builds, but they use the toolchain inside
|
# These are native MinGW builds, but they use the toolchain inside
|
||||||
# MSYS2, this allows using all the dependencies and tools available
|
# MSYS2, this allows using all the dependencies and tools available
|
||||||
# in MSYS2, but we cannot build inside the MSYS2 shell.
|
# in MSYS2, but we cannot build inside the MSYS2 shell.
|
||||||
$cmakeGenerator = 'MinGW Makefiles'
|
$cmakeGenerator = 'Ninja'
|
||||||
$cmakeGeneratorArgs = 'VERBOSE=1'
|
$cmakeGeneratorArgs = '-v'
|
||||||
|
$mingwPackages = @('ninja', 'cmake', 'perl', 'diffutils', 'unibilium').ForEach({
|
||||||
|
"mingw-w64-$arch-$_"
|
||||||
|
})
|
||||||
|
|
||||||
# Add MinGW to the PATH
|
# Add MinGW to the PATH
|
||||||
$env:PATH = "C:\msys64\mingw$bits\bin;$env:PATH"
|
$env:PATH = "C:\msys64\mingw$bits\bin;$env:PATH"
|
||||||
|
|
||||||
|
# Avoid pacman "warning" which causes non-zero return code. https://github.com/open62541/open62541/issues/2068
|
||||||
|
& C:\msys64\usr\bin\mkdir -p /var/cache/pacman/pkg
|
||||||
|
|
||||||
# Build third-party dependencies
|
# Build third-party dependencies
|
||||||
C:\msys64\usr\bin\bash -lc "pacman --verbose --noconfirm -Su" ; exitIfFailed
|
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
|
C:\msys64\usr\bin\bash -lc "pacman --verbose --noconfirm --needed -S $mingwPackages" ; exitIfFailed
|
||||||
}
|
}
|
||||||
elseif ($compiler -eq 'MSVC') {
|
elseif ($compiler -eq 'MSVC') {
|
||||||
$cmakeGeneratorArgs = '/verbosity:normal'
|
$cmakeGeneratorArgs = '/verbosity:normal'
|
||||||
@ -58,32 +67,31 @@ elseif ($compiler -eq 'MSVC') {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
# Remove Git Unix utilities from the PATH
|
|
||||||
$env:PATH = $env:PATH.Replace('C:\Program Files\Git\usr\bin', '')
|
|
||||||
|
|
||||||
# Setup python (use AppVeyor system python)
|
# Setup python (use AppVeyor system python)
|
||||||
C:\Python27\python.exe -m pip install neovim ; exitIfFailed
|
C:\Python27\python.exe -m pip install pynvim ; exitIfFailed
|
||||||
C:\Python35\python.exe -m pip install neovim ; exitIfFailed
|
C:\Python35\python.exe -m pip install pynvim ; exitIfFailed
|
||||||
# Disambiguate python3
|
# Disambiguate python3
|
||||||
move c:\Python35\python.exe c:\Python35\python3.exe
|
move c:\Python35\python.exe c:\Python35\python3.exe
|
||||||
$env:PATH = "C:\Python35;C:\Python27;$env:PATH"
|
$env:PATH = "C:\Python35;C:\Python27;$env:PATH"
|
||||||
# Sanity check
|
# Sanity check
|
||||||
python -c "import neovim; print(str(neovim))" ; exitIfFailed
|
python -c "import pynvim; print(str(pynvim))" ; exitIfFailed
|
||||||
python3 -c "import neovim; print(str(neovim))" ; exitIfFailed
|
python3 -c "import pynvim; print(str(pynvim))" ; exitIfFailed
|
||||||
|
|
||||||
$env:PATH = "C:\Ruby24\bin;$env:PATH"
|
$env:PATH = "C:\Ruby24\bin;$env:PATH"
|
||||||
cmd /c gem.cmd install neovim ; exitIfFailed
|
gem.cmd install neovim
|
||||||
where.exe neovim-ruby-host.bat ; exitIfFailed
|
Get-Command -CommandType Application neovim-ruby-host.bat
|
||||||
|
|
||||||
cmd /c npm.cmd install -g neovim ; exitIfFailed
|
npm.cmd install -g neovim
|
||||||
where.exe neovim-node-host.cmd ; exitIfFailed
|
Get-Command -CommandType Application neovim-node-host.cmd
|
||||||
cmd /c npm link neovim
|
npm.cmd link neovim
|
||||||
|
|
||||||
function convertToCmakeArgs($vars) {
|
function convertToCmakeArgs($vars) {
|
||||||
return $vars.GetEnumerator() | foreach { "-D$($_.Key)=$($_.Value)" }
|
return $vars.GetEnumerator() | foreach { "-D$($_.Key)=$($_.Value)" }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (-Not (Test-Path -PathType container .deps)) {
|
||||||
mkdir .deps
|
mkdir .deps
|
||||||
|
}
|
||||||
cd .deps
|
cd .deps
|
||||||
cmake -G $cmakeGenerator $(convertToCmakeArgs($depsCmakeVars)) ..\third-party\ ; exitIfFailed
|
cmake -G $cmakeGenerator $(convertToCmakeArgs($depsCmakeVars)) ..\third-party\ ; exitIfFailed
|
||||||
cmake --build . --config $cmakeBuildType -- $cmakeGeneratorArgs ; exitIfFailed
|
cmake --build . --config $cmakeBuildType -- $cmakeGeneratorArgs ; exitIfFailed
|
||||||
@ -103,11 +111,11 @@ $failed = $false
|
|||||||
Set-PSDebug -Off
|
Set-PSDebug -Off
|
||||||
cmake --build . --config $cmakeBuildType --target functionaltest -- $cmakeGeneratorArgs 2>&1 |
|
cmake --build . --config $cmakeBuildType --target functionaltest -- $cmakeGeneratorArgs 2>&1 |
|
||||||
foreach { $failed = $failed -or
|
foreach { $failed = $failed -or
|
||||||
$_ -match 'Running functional tests failed with error'; $_ }
|
$_ -match 'functional tests failed with error'; $_ }
|
||||||
Set-PSDebug -Trace 1
|
|
||||||
if ($failed) {
|
if ($failed) {
|
||||||
exit $LastExitCode
|
exit $LastExitCode
|
||||||
}
|
}
|
||||||
|
Set-PSDebug -Strict -Trace 1
|
||||||
|
|
||||||
|
|
||||||
if ($uploadToCodecov) {
|
if ($uploadToCodecov) {
|
||||||
|
@ -7,7 +7,7 @@ _stat() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
top_make() {
|
top_make() {
|
||||||
echo '================================================================================'
|
printf '%78s\n' | tr ' ' '='
|
||||||
# Travis has 1.5 virtual cores according to:
|
# Travis has 1.5 virtual cores according to:
|
||||||
# http://docs.travis-ci.com/user/speeding-up-the-build/#Paralellizing-your-build-on-one-VM
|
# http://docs.travis-ci.com/user/speeding-up-the-build/#Paralellizing-your-build-on-one-VM
|
||||||
ninja "$@"
|
ninja "$@"
|
||||||
@ -35,7 +35,7 @@ build_deps() {
|
|||||||
elif test -f "${CACHE_MARKER}" ; then
|
elif test -f "${CACHE_MARKER}" ; then
|
||||||
echo "Using third-party dependencies from Travis cache (last update: $(_stat "${CACHE_MARKER}"))."
|
echo "Using third-party dependencies from Travis cache (last update: $(_stat "${CACHE_MARKER}"))."
|
||||||
cp -r "${HOME}/.cache/nvim-deps"/. "${DEPS_BUILD_DIR}"
|
cp -r "${HOME}/.cache/nvim-deps"/. "${DEPS_BUILD_DIR}"
|
||||||
cp -r "${HOME}/.cache/nvim-deps-downloads" "${DEPS_DOWNLOAD_DIR}"
|
cp -r "${HOME}/.cache/nvim-deps-downloads"/. "${DEPS_DOWNLOAD_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
|
||||||
|
@ -39,13 +39,6 @@ enter_suite() {
|
|||||||
|
|
||||||
exit_suite() {
|
exit_suite() {
|
||||||
set +x
|
set +x
|
||||||
if test -f "$NVIM_LOG_FILE" ; then
|
|
||||||
printf "===============================================================================\n"
|
|
||||||
printf "NVIM_LOG_FILE: $NVIM_LOG_FILE\n"
|
|
||||||
cat "$NVIM_LOG_FILE" 2>/dev/null || printf '(empty)'
|
|
||||||
printf "\n"
|
|
||||||
rm -rf "$NVIM_LOG_FILE"
|
|
||||||
fi
|
|
||||||
travis_fold end "${NVIM_TEST_CURRENT_SUITE}"
|
travis_fold end "${NVIM_TEST_CURRENT_SUITE}"
|
||||||
if test $FAILED -ne 0 ; then
|
if test $FAILED -ne 0 ; then
|
||||||
echo "Suite ${NVIM_TEST_CURRENT_SUITE} failed, summary:"
|
echo "Suite ${NVIM_TEST_CURRENT_SUITE} failed, summary:"
|
||||||
|
@ -34,8 +34,10 @@ check_core_dumps() {
|
|||||||
local app="${1:-${BUILD_DIR}/bin/nvim}"
|
local app="${1:-${BUILD_DIR}/bin/nvim}"
|
||||||
if test "${TRAVIS_OS_NAME}" = osx ; then
|
if test "${TRAVIS_OS_NAME}" = osx ; then
|
||||||
local cores="$(find /cores/ -type f -print)"
|
local cores="$(find /cores/ -type f -print)"
|
||||||
|
local _sudo='sudo'
|
||||||
else
|
else
|
||||||
local cores="$(find ./ -type f -name 'core.*' -print)"
|
local cores="$(find ./ -type f -name 'core.*' -print)"
|
||||||
|
local _sudo=
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if test -z "${cores}" ; then
|
if test -z "${cores}" ; then
|
||||||
@ -45,7 +47,7 @@ check_core_dumps() {
|
|||||||
for core in $cores; do
|
for core in $cores; do
|
||||||
if test "$del" = "1" ; then
|
if test "$del" = "1" ; then
|
||||||
print_core "$app" "$core" >&2
|
print_core "$app" "$core" >&2
|
||||||
rm "$core"
|
"$_sudo" rm "$core"
|
||||||
else
|
else
|
||||||
print_core "$app" "$core"
|
print_core "$app" "$core"
|
||||||
fi
|
fi
|
||||||
@ -81,7 +83,7 @@ valgrind_check() {
|
|||||||
|
|
||||||
asan_check() {
|
asan_check() {
|
||||||
if test "${CLANG_SANITIZER}" = "ASAN_UBSAN" ; then
|
if test "${CLANG_SANITIZER}" = "ASAN_UBSAN" ; then
|
||||||
check_logs "${1}" "*san.*" | asan_symbolize
|
check_logs "${1}" "*san.*" | $ASAN_SYMBOLIZE
|
||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -8,28 +8,24 @@ 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 reinstall -s libtool
|
|
||||||
brew install ccache
|
|
||||||
export PATH="/usr/local/opt/ccache/libexec:$PATH"
|
export PATH="/usr/local/opt/ccache/libexec:$PATH"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
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 python3 -m pip -q install --user --upgrade neovim || true
|
||||||
|
|
||||||
if ! [ "${TRAVIS_OS_NAME}" = osx ] ; then
|
if ! [ "${TRAVIS_OS_NAME}" = osx ] ; then
|
||||||
# Update PATH for pip.
|
# Update PATH for pip.
|
||||||
export PATH="$(python2.7 -c 'import site; print(site.getuserbase())')/bin:$PATH"
|
export PATH="$(python2.7 -c 'import site; print(site.getuserbase())')/bin:$PATH"
|
||||||
# Use default CC to avoid compilation problems when installing Python modules.
|
# Use default CC to avoid compilation problems when installing Python modules.
|
||||||
echo "Install neovim module for Python 2."
|
echo "Install neovim module for Python 2."
|
||||||
CC=cc pip2.7 -q install --user --upgrade neovim
|
CC=cc python2.7 -m pip -q install --user --upgrade neovim
|
||||||
|
fi
|
||||||
|
|
||||||
echo "Install neovim RubyGem."
|
echo "Install neovim RubyGem."
|
||||||
gem install --no-document --version ">= 0.2.0" neovim
|
gem install --no-document --version ">= 0.8.0" neovim
|
||||||
fi
|
|
||||||
|
|
||||||
echo "Install neovim npm package"
|
echo "Install neovim npm package"
|
||||||
npm install -g neovim
|
npm install -g neovim
|
||||||
|
@ -8,7 +8,7 @@ else()
|
|||||||
HELPTAGS_WORKING_DIRECTORY)
|
HELPTAGS_WORKING_DIRECTORY)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
message(STATUS "Generating helptags in ${HELPTAGS_WORKING_DIRECTORY}.")
|
message(STATUS "Generating helptags in ${HELPTAGS_WORKING_DIRECTORY}")
|
||||||
if(EXISTS ${HELPTAGS_WORKING_DIRECTORY}/)
|
if(EXISTS ${HELPTAGS_WORKING_DIRECTORY}/)
|
||||||
message(STATUS "${HELPTAGS_WORKING_DIRECTORY} already exists")
|
message(STATUS "${HELPTAGS_WORKING_DIRECTORY} already exists")
|
||||||
# If the doc directory already exists, helptags could fail due to duplicate
|
# If the doc directory already exists, helptags could fail due to duplicate
|
||||||
|
@ -17,7 +17,7 @@ endfunction()
|
|||||||
function(check_lua_deps LUA_PRG_PATH MODULES RESULT_VAR)
|
function(check_lua_deps LUA_PRG_PATH MODULES RESULT_VAR)
|
||||||
# Check if the lua interpreter at the given path
|
# Check if the lua interpreter at the given path
|
||||||
# satisfies all Neovim dependencies
|
# satisfies all Neovim dependencies
|
||||||
message(STATUS "Checking Lua interpreter ${LUA_PRG_PATH}")
|
message(STATUS "Checking Lua interpreter: ${LUA_PRG_PATH}")
|
||||||
if(NOT EXISTS ${LUA_PRG_PATH})
|
if(NOT EXISTS ${LUA_PRG_PATH})
|
||||||
message(STATUS
|
message(STATUS
|
||||||
"[${LUA_PRG_PATH}] file not found")
|
"[${LUA_PRG_PATH}] file not found")
|
||||||
|
@ -18,5 +18,5 @@ execute_process(
|
|||||||
|
|
||||||
if(NOT res EQUAL 0)
|
if(NOT res EQUAL 0)
|
||||||
message(STATUS "Output to stderr:\n${err}")
|
message(STATUS "Output to stderr:\n${err}")
|
||||||
message(FATAL_ERROR "Linting tests failed with error: ${res}.")
|
message(FATAL_ERROR "Linting tests failed with error: ${res}")
|
||||||
endif()
|
endif()
|
||||||
|
@ -24,12 +24,12 @@ if(BUSTED_OUTPUT_TYPE STREQUAL junit)
|
|||||||
set(EXTRA_ARGS OUTPUT_FILE ${BUILD_DIR}/${TEST_TYPE}test-junit.xml)
|
set(EXTRA_ARGS OUTPUT_FILE ${BUILD_DIR}/${TEST_TYPE}test-junit.xml)
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(DEFINED ENV{TEST_TAG})
|
if(DEFINED ENV{TEST_TAG} AND NOT "$ENV{TEST_TAG}" STREQUAL "")
|
||||||
set(TEST_TAG "--tags=$ENV{TEST_TAG}")
|
set(TEST_TAG "--tags=$ENV{TEST_TAG}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(DEFINED ENV{TEST_FILTER})
|
if(DEFINED ENV{TEST_FILTER} AND NOT "$ENV{TEST_FILTER}" STREQUAL "")
|
||||||
set(TEST_TAG "--filter=$ENV{TEST_FILTER}")
|
set(TEST_FILTER "--filter=$ENV{TEST_FILTER}")
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${WORKING_DIR}/Xtest-tmpdir)
|
execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${WORKING_DIR}/Xtest-tmpdir)
|
||||||
@ -38,7 +38,10 @@ 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 --lpath=?.lua ${TEST_PATH}
|
--lpath=${BUILD_DIR}/?.lua
|
||||||
|
--lpath=${WORKING_DIR}/runtime/lua/?.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
|
||||||
@ -50,5 +53,5 @@ file(REMOVE_RECURSE ${WORKING_DIR}/Xtest-tmpdir)
|
|||||||
|
|
||||||
if(NOT res EQUAL 0)
|
if(NOT res EQUAL 0)
|
||||||
message(STATUS "Output to stderr:\n${err}")
|
message(STATUS "Output to stderr:\n${err}")
|
||||||
message(FATAL_ERROR "Running ${TEST_TYPE} tests failed with error: ${res}.")
|
message(FATAL_ERROR "${TEST_TYPE} tests failed with error: ${res}")
|
||||||
endif()
|
endif()
|
||||||
|
@ -13,7 +13,9 @@ coverage:
|
|||||||
|
|
||||||
status:
|
status:
|
||||||
project: yes
|
project: yes
|
||||||
patch: yes
|
patch:
|
||||||
|
default:
|
||||||
|
threshold: 1
|
||||||
changes: no
|
changes: no
|
||||||
|
|
||||||
parsers:
|
parsers:
|
||||||
|
18
makedeps.bat
18
makedeps.bat
@ -1,18 +0,0 @@
|
|||||||
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 ..
|
|
||||||
|
|
152
man/nvim.1
152
man/nvim.1
@ -20,41 +20,51 @@
|
|||||||
.Sh DESCRIPTION
|
.Sh DESCRIPTION
|
||||||
.Nm
|
.Nm
|
||||||
is a text editor based on Vim.
|
is a text editor based on Vim.
|
||||||
To enter commands in
|
Start
|
||||||
.Nm ,
|
.Nm
|
||||||
type a colon
|
followed by any number of options and/or files:
|
||||||
.Pq Sq \&:
|
.Pp
|
||||||
which is also used in this manual to denote commands.
|
.Dl nvim [options] [file ...]
|
||||||
For more information, consult the online help with the
|
.Pp
|
||||||
.Ic :help
|
Commands in
|
||||||
command.
|
.Nm
|
||||||
|
begin with colon
|
||||||
|
.Pq Sq \&: .
|
||||||
|
Type ":help subject" to get help on a specific subject.
|
||||||
|
Use <Tab> and CTRL-D to complete subjects (":help cmdline\-completion").
|
||||||
|
.Pp
|
||||||
|
The "quickref" help section is a condensed reference of editor features:
|
||||||
|
.Dl :help quickref
|
||||||
|
.Pp
|
||||||
|
If you are new to Vim/Nvim, start with the 30-minute tutorial:
|
||||||
|
.Dl :Tutor
|
||||||
|
.Pp
|
||||||
|
After installing/updating Nvim, it's a good idea to run the self-check:
|
||||||
|
.Dl :checkhealth
|
||||||
|
.Pp
|
||||||
.Bl -tag -width Fl
|
.Bl -tag -width Fl
|
||||||
.It Ar file ...
|
.It Ar file ...
|
||||||
File(s) to edit.
|
File(s) to edit.
|
||||||
If none are specified, open an empty buffer.
|
Opens one buffer per file.
|
||||||
If multiple files are specified, open one buffer for each file.
|
|
||||||
To switch between buffers, use the
|
To switch between buffers, use the
|
||||||
.Ic :next
|
.Ic :next
|
||||||
and
|
and
|
||||||
.Ic :previous
|
.Ic :previous
|
||||||
commands.
|
commands.
|
||||||
.It Fl
|
.It Fl
|
||||||
Read text from standard input until
|
Reads text from standard input until
|
||||||
.Dv EOF ,
|
.Dv EOF ,
|
||||||
then open a buffer with that text.
|
then opens a buffer with that text.
|
||||||
Commands are read from standard error, which should be a terminal.
|
User input is read from standard error, which should be a terminal.
|
||||||
|
.Sh OPTIONS
|
||||||
|
.Bl -tag -width Fl
|
||||||
.It Fl t Ar tag
|
.It Fl t Ar tag
|
||||||
The file to edit and the initial cursor position depends on a
|
Finds
|
||||||
tag, a sort of goto label.
|
|
||||||
.Ar tag
|
.Ar tag
|
||||||
is looked up in the tags file, the associated file becomes the current
|
in the tags file, the associated file becomes the current
|
||||||
file and the associated command is executed.
|
file and the associated command is executed.
|
||||||
If
|
Cursor is positioned at the tag location in the file.
|
||||||
.Ar tag
|
.Ic ":help tag-commands"
|
||||||
is a function name, the file containing that function is opened
|
|
||||||
with the cursor positioned at the start of the function.
|
|
||||||
See
|
|
||||||
.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
|
||||||
@ -66,31 +76,28 @@ is omitted, the value of the 'errorfile' option is used (defaults to
|
|||||||
Further errors can be jumped to with the
|
Further errors can be jumped to with the
|
||||||
.Ic :cnext
|
.Ic :cnext
|
||||||
command.
|
command.
|
||||||
See
|
.Ic ":help quickfix"
|
||||||
.Ic ":help quickfix" .
|
|
||||||
.It There are a number of other options:
|
|
||||||
.It Fl -
|
.It Fl -
|
||||||
Interpret all further arguments as files.
|
End of options.
|
||||||
Can be used to edit files starting with a hyphen
|
Remaining arguments are treated as literal file names, including filenames starting with hyphen
|
||||||
.Pq Sq - .
|
.Pq Sq - .
|
||||||
.It Fl e
|
.It Fl e
|
||||||
Ex mode. Reads stdin as Ex commands.
|
Ex mode, reading stdin as Ex commands.
|
||||||
See
|
.Ic ":help Ex-mode"
|
||||||
.Ic ":help Ex-mode" .
|
|
||||||
.It Fl E
|
.It Fl E
|
||||||
Ex mode, improved. Reads stdin as text.
|
Ex mode, reading stdin as text.
|
||||||
See
|
.Ic :help Ex-mode
|
||||||
.Ic :help gQ .
|
|
||||||
.It Fl es
|
.It Fl es
|
||||||
Silent (batch) mode. Reads stdin as Ex commands.
|
Silent/batch mode, reading stdin as Ex commands.
|
||||||
|
.Ic :help silent-mode
|
||||||
.It Fl \&Es
|
.It Fl \&Es
|
||||||
Silent (batch) mode. Reads stdin as text.
|
Silent/batch mode, reading stdin as text.
|
||||||
|
.Ic :help silent-mode
|
||||||
.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
|
.Ic ":help diff"
|
||||||
.Ic ":help diff" .
|
|
||||||
.It Fl R
|
.It Fl R
|
||||||
Read-only mode.
|
Read-only mode.
|
||||||
Sets the 'readonly' option.
|
Sets the 'readonly' option.
|
||||||
@ -100,8 +107,7 @@ 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 relevant Ex command, such as
|
To overwrite a file, add an exclamation mark to the relevant Ex command, such as
|
||||||
.Ic :w! .
|
.Ic :w! .
|
||||||
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.
|
||||||
@ -113,8 +119,7 @@ Resets the 'write' and 'modifiable' options, to disable file and buffer
|
|||||||
modifications.
|
modifications.
|
||||||
.It Fl b
|
.It Fl b
|
||||||
Binary mode.
|
Binary mode.
|
||||||
See
|
.Ic ":help edit-binary"
|
||||||
.Ic ":help edit-binary" .
|
|
||||||
.It Fl l
|
.It Fl l
|
||||||
Lisp mode.
|
Lisp mode.
|
||||||
Sets the 'lisp' and 'showmatch' options.
|
Sets the 'lisp' and 'showmatch' options.
|
||||||
@ -126,19 +131,20 @@ Hebrew mode.
|
|||||||
Sets the 'hkmap' and 'rightleft' options.
|
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
|
Prints debug messages.
|
||||||
writing a ShaDa file.
|
|
||||||
.Ar N
|
.Ar N
|
||||||
is the 'verbose' level; defaults to
|
is the 'verbose' level, defaults to
|
||||||
.Cm 10 .
|
.Cm 10 .
|
||||||
If
|
If
|
||||||
.Ar file
|
.Ar file
|
||||||
is specified, append messages to
|
is specified, append messages to
|
||||||
.Ar file
|
.Ar file
|
||||||
instead of printing them.
|
instead of printing them.
|
||||||
|
.Ic ":help 'verbose'"
|
||||||
.It Fl D
|
.It Fl D
|
||||||
Debugging mode.
|
Debug mode for VimL (Vim script).
|
||||||
Started when executing the first command from a script.
|
Started when executing the first command from a script.
|
||||||
|
:help debug-mode
|
||||||
.It Fl n
|
.It Fl n
|
||||||
Disable the use of swap files.
|
Disable the use of swap files.
|
||||||
Sets the 'updatecount' option to
|
Sets the 'updatecount' option to
|
||||||
@ -156,8 +162,7 @@ is used to recover a crashed session.
|
|||||||
The swap file has the same name as the file it's associated with, but with
|
The swap file has the same name as the file it's associated with, but with
|
||||||
.Sq .swp
|
.Sq .swp
|
||||||
appended.
|
appended.
|
||||||
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 .
|
||||||
@ -177,8 +182,7 @@ If
|
|||||||
is
|
is
|
||||||
.Cm NONE ,
|
.Cm NONE ,
|
||||||
loading plugins is also skipped.
|
loading plugins is also skipped.
|
||||||
See
|
.Ic ":help initialization"
|
||||||
.Ic ":help initialization" .
|
|
||||||
.It Fl i Ar shada
|
.It Fl i Ar shada
|
||||||
Use
|
Use
|
||||||
.Ar shada
|
.Ar shada
|
||||||
@ -189,8 +193,7 @@ If
|
|||||||
is
|
is
|
||||||
.Cm NONE ,
|
.Cm NONE ,
|
||||||
do not read or write a ShaDa file.
|
do not read or write a ShaDa file.
|
||||||
See
|
.Ic ":help shada"
|
||||||
.Ic ":help shada" .
|
|
||||||
.It Fl -noplugin
|
.It Fl -noplugin
|
||||||
Skip loading plugins.
|
Skip loading plugins.
|
||||||
Implied by
|
Implied by
|
||||||
@ -243,17 +246,12 @@ and
|
|||||||
.Ic :/foo
|
.Ic :/foo
|
||||||
inside
|
inside
|
||||||
.Nm .
|
.Nm .
|
||||||
See
|
.Ic ":help search-pattern"
|
||||||
.Ic ":help search-pattern" .
|
.It \fB\+\fR\fI\,command\/\fR , Fl c Ar command
|
||||||
.It Fl c Ar command
|
|
||||||
Execute
|
Execute
|
||||||
.Ar command
|
.Ar command
|
||||||
after reading the first file.
|
after reading the first file.
|
||||||
Up to 10 instances of
|
Up to 10 instances allowed.
|
||||||
.Fl c
|
|
||||||
or
|
|
||||||
.Cm +
|
|
||||||
can be used.
|
|
||||||
.Qq Cm +foo
|
.Qq Cm +foo
|
||||||
and
|
and
|
||||||
.Cm -c \(dqfoo\(dq
|
.Cm -c \(dqfoo\(dq
|
||||||
@ -280,8 +278,7 @@ If
|
|||||||
is omitted then
|
is omitted then
|
||||||
.Pa Session.vim
|
.Pa Session.vim
|
||||||
is used, if found.
|
is used, if found.
|
||||||
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 .
|
||||||
@ -310,10 +307,12 @@ Can be used to diagnose slow startup times.
|
|||||||
Dump API metadata serialized to msgpack and exit.
|
Dump API metadata serialized to msgpack and exit.
|
||||||
.It Fl -embed
|
.It Fl -embed
|
||||||
Use standard input and standard output as a msgpack-rpc channel.
|
Use standard input and standard output as a msgpack-rpc channel.
|
||||||
Implies
|
:help --embed
|
||||||
.Fl -headless .
|
|
||||||
.It Fl -headless
|
.It Fl -headless
|
||||||
Do not start a user interface.
|
Do not start a UI.
|
||||||
|
When supplied with --embed this implies that the embedding application does not intend to (immediately) start a UI.
|
||||||
|
Also useful for "scraping" messages in a pipe.
|
||||||
|
:help --headless
|
||||||
.It Fl -listen Ar address
|
.It Fl -listen Ar address
|
||||||
Start RPC server on this pipe or TCP socket.
|
Start RPC server on this pipe or TCP socket.
|
||||||
.It Fl h , -help
|
.It Fl h , -help
|
||||||
@ -324,11 +323,12 @@ Print version information and exit.
|
|||||||
.Sh ENVIRONMENT
|
.Sh ENVIRONMENT
|
||||||
.Bl -tag -width Fl
|
.Bl -tag -width Fl
|
||||||
.It Ev NVIM_LOG_FILE
|
.It Ev NVIM_LOG_FILE
|
||||||
Low-level log file, usually found at ~/.local/share/nvim/log. See :help
|
Low-level log file, usually found at ~/.local/share/nvim/log.
|
||||||
$NVIM_LOG_FILE.
|
:help $NVIM_LOG_FILE
|
||||||
.It Ev VIM
|
.It Ev VIM
|
||||||
Used to locate user files, such as init.vim.
|
Used to locate user files, such as init.vim.
|
||||||
System-dependent, see :help $VIM.
|
System-dependent.
|
||||||
|
:help $VIM
|
||||||
.It Ev VIMRUNTIME
|
.It Ev VIMRUNTIME
|
||||||
Used to locate runtime files (documentation, syntax highlighting, etc.).
|
Used to locate runtime files (documentation, syntax highlighting, etc.).
|
||||||
.It Ev XDG_CONFIG_HOME
|
.It Ev XDG_CONFIG_HOME
|
||||||
@ -336,7 +336,7 @@ Path to the user-local configuration directory, see
|
|||||||
.Sx FILES .
|
.Sx FILES .
|
||||||
Defaults to
|
Defaults to
|
||||||
.Pa ~/.config .
|
.Pa ~/.config .
|
||||||
See :help xdg.
|
:help xdg
|
||||||
.It Ev XDG_DATA_HOME
|
.It Ev XDG_DATA_HOME
|
||||||
Like
|
Like
|
||||||
.Ev XDG_CONFIG_HOME ,
|
.Ev XDG_CONFIG_HOME ,
|
||||||
@ -344,19 +344,10 @@ 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 .
|
||||||
See :help xdg.
|
:help xdg
|
||||||
.It Ev VIMINIT
|
.It Ev VIMINIT
|
||||||
Ex commands to be executed at startup.
|
Ex commands to be executed at startup.
|
||||||
For example, the command to quit is
|
.Ic ":help VIMINIT"
|
||||||
.Ic :q ,
|
|
||||||
so to have
|
|
||||||
.Nm
|
|
||||||
quit immediately after starting, set
|
|
||||||
.Ev VIMINIT
|
|
||||||
to
|
|
||||||
.Cm q .
|
|
||||||
See
|
|
||||||
.Ic ":help VIMINIT" .
|
|
||||||
.It Ev SHELL
|
.It Ev SHELL
|
||||||
Used to initialize the 'shell' option, which decides the default shell used by
|
Used to initialize the 'shell' option, which decides the default shell used by
|
||||||
features like
|
features like
|
||||||
@ -391,10 +382,9 @@ Nvim was started by
|
|||||||
Most of Vim was written by
|
Most of Vim was written by
|
||||||
.An -nosplit
|
.An -nosplit
|
||||||
.An Bram Moolenaar .
|
.An Bram Moolenaar .
|
||||||
See
|
|
||||||
.Ic ":help credits" .
|
|
||||||
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 ,
|
||||||
and
|
and
|
||||||
.An G.R. (Fred) Walter .
|
.An G.R. (Fred) Walter .
|
||||||
|
.Ic ":help credits"
|
||||||
|
@ -21,17 +21,13 @@ add_custom_command(OUTPUT ${GENERATED_SYN_VIM}
|
|||||||
${FUNCS_DATA}
|
${FUNCS_DATA}
|
||||||
)
|
)
|
||||||
|
|
||||||
if(POLICY CMP0054)
|
|
||||||
cmake_policy(SET CMP0054 OLD)
|
|
||||||
endif()
|
|
||||||
|
|
||||||
file(GLOB PACKAGES ${PROJECT_SOURCE_DIR}/runtime/pack/dist/opt/*)
|
file(GLOB PACKAGES ${PROJECT_SOURCE_DIR}/runtime/pack/dist/opt/*)
|
||||||
|
|
||||||
set(GENERATED_PACKAGE_TAGS)
|
set(GENERATED_PACKAGE_TAGS)
|
||||||
foreach(PACKAGE ${PACKAGES})
|
foreach(PACKAGE ${PACKAGES})
|
||||||
get_filename_component(PACKNAME ${PACKAGE} NAME)
|
get_filename_component(PACKNAME ${PACKAGE} NAME)
|
||||||
file(GLOB "${PACKNAME}_DOC_FILES" ${PACKAGE}/doc/*.txt)
|
file(GLOB "${PACKNAME}_DOC_FILES" ${PACKAGE}/doc/*.txt)
|
||||||
if("${PACKNAME}_DOC_FILES")
|
if(${PACKNAME}_DOC_FILES)
|
||||||
file(MAKE_DIRECTORY ${GENERATED_PACKAGE_DIR}/${PACKNAME})
|
file(MAKE_DIRECTORY ${GENERATED_PACKAGE_DIR}/${PACKNAME})
|
||||||
add_custom_target("${PACKNAME}-tags"
|
add_custom_target("${PACKNAME}-tags"
|
||||||
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
||||||
@ -72,9 +68,9 @@ foreach(DF ${DOCFILES})
|
|||||||
endforeach()
|
endforeach()
|
||||||
|
|
||||||
add_custom_target(helptags
|
add_custom_target(helptags
|
||||||
COMMAND ${CMAKE_COMMAND} -E remove ${GENERATED_RUNTIME_DIR}/doc/*
|
COMMAND ${CMAKE_COMMAND} -E remove 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 doc
|
||||||
COMMAND "${PROJECT_BINARY_DIR}/bin/nvim"
|
COMMAND "${PROJECT_BINARY_DIR}/bin/nvim"
|
||||||
-u NONE -i NONE -e --headless -c "helptags ++t doc" -c quit
|
-u NONE -i NONE -e --headless -c "helptags ++t doc" -c quit
|
||||||
DEPENDS
|
DEPENDS
|
||||||
@ -91,7 +87,7 @@ add_custom_command(OUTPUT ${GENERATED_HELP_TAGS}
|
|||||||
add_custom_target(doc_html
|
add_custom_target(doc_html
|
||||||
COMMAND make html
|
COMMAND make html
|
||||||
DEPENDS
|
DEPENDS
|
||||||
${GENERATED_HELP_TAGS}
|
helptags
|
||||||
WORKING_DIRECTORY "${GENERATED_RUNTIME_DIR}/doc"
|
WORKING_DIRECTORY "${GENERATED_RUNTIME_DIR}/doc"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
48
runtime/autoload/RstFold.vim
Normal file
48
runtime/autoload/RstFold.vim
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
" Author: Antony Lee <anntzer.lee@gmail.com>
|
||||||
|
" Description: Helper functions for reStructuredText syntax folding
|
||||||
|
" Last Modified: 2018-01-07
|
||||||
|
|
||||||
|
function s:CacheRstFold()
|
||||||
|
let closure = {'header_types': {}, 'max_level': 0, 'levels': {}}
|
||||||
|
function closure.Process(match) dict
|
||||||
|
let curline = getcurpos()[1]
|
||||||
|
if has_key(self.levels, curline - 1)
|
||||||
|
" For over+under-lined headers, the regex will match both at the
|
||||||
|
" overline and at the title itself; in that case, skip the second match.
|
||||||
|
return
|
||||||
|
endif
|
||||||
|
let lines = split(a:match, '\n')
|
||||||
|
let key = repeat(lines[-1][0], len(lines))
|
||||||
|
if !has_key(self.header_types, key)
|
||||||
|
let self.max_level += 1
|
||||||
|
let self.header_types[key] = self.max_level
|
||||||
|
endif
|
||||||
|
let self.levels[curline] = self.header_types[key]
|
||||||
|
endfunction
|
||||||
|
let save_cursor = getcurpos()
|
||||||
|
silent keeppatterns %s/\v^%(%(([=`:.'"~^_*+#-])\1+\n)?.{1,2}\n([=`:.'"~^_*+#-])\2+)|%(%(([=`:.''"~^_*+#-])\3{2,}\n)?.{3,}\n([=`:.''"~^_*+#-])\4{2,})$/\=closure.Process(submatch(0))/gn
|
||||||
|
call setpos('.', save_cursor)
|
||||||
|
let b:RstFoldCache = closure.levels
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function RstFold#GetRstFold()
|
||||||
|
if !has_key(b:, 'RstFoldCache')
|
||||||
|
call s:CacheRstFold()
|
||||||
|
endif
|
||||||
|
if has_key(b:RstFoldCache, v:lnum)
|
||||||
|
return '>' . b:RstFoldCache[v:lnum]
|
||||||
|
else
|
||||||
|
return '='
|
||||||
|
endif
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
function RstFold#GetRstFoldText()
|
||||||
|
if !has_key(b:, 'RstFoldCache')
|
||||||
|
call s:CacheRstFold()
|
||||||
|
endif
|
||||||
|
let indent = repeat(' ', b:RstFoldCache[v:foldstart] - 1)
|
||||||
|
let thisline = getline(v:foldstart)
|
||||||
|
" For over+under-lined headers, skip the overline.
|
||||||
|
let text = thisline =~ '^\([=`:.''"~^_*+#-]\)\1\+$' ? getline(v:foldstart + 1) : thisline
|
||||||
|
return indent . text
|
||||||
|
endfunction
|
@ -1,7 +1,7 @@
|
|||||||
" Vim completion script
|
" Vim completion script
|
||||||
" Language: C
|
" Language: C
|
||||||
" Maintainer: Bram Moolenaar <Bram@vim.org>
|
" Maintainer: Bram Moolenaar <Bram@vim.org>
|
||||||
" Last Change: 2012 Jun 20
|
" Last Change: 2018 Aug 20
|
||||||
|
|
||||||
let s:cpo_save = &cpo
|
let s:cpo_save = &cpo
|
||||||
set cpo&vim
|
set cpo&vim
|
||||||
@ -72,8 +72,10 @@ function! ccomplete#Complete(findstart, base)
|
|||||||
" Split item in words, keep empty word after "." or "->".
|
" Split item in words, keep empty word after "." or "->".
|
||||||
" "aa" -> ['aa'], "aa." -> ['aa', ''], "aa.bb" -> ['aa', 'bb'], etc.
|
" "aa" -> ['aa'], "aa." -> ['aa', ''], "aa.bb" -> ['aa', 'bb'], etc.
|
||||||
" We can't use split, because we need to skip nested [...].
|
" We can't use split, because we need to skip nested [...].
|
||||||
|
" "aa[...]" -> ['aa', '[...]'], "aa.bb[...]" -> ['aa', 'bb', '[...]'], etc.
|
||||||
let items = []
|
let items = []
|
||||||
let s = 0
|
let s = 0
|
||||||
|
let arrays = 0
|
||||||
while 1
|
while 1
|
||||||
let e = match(base, '\.\|->\|\[', s)
|
let e = match(base, '\.\|->\|\[', s)
|
||||||
if e < 0
|
if e < 0
|
||||||
@ -107,6 +109,7 @@ function! ccomplete#Complete(findstart, base)
|
|||||||
endwhile
|
endwhile
|
||||||
let e += 1
|
let e += 1
|
||||||
call add(items, strpart(base, s, e - s))
|
call add(items, strpart(base, s, e - s))
|
||||||
|
let arrays += 1
|
||||||
let s = e
|
let s = e
|
||||||
endif
|
endif
|
||||||
endwhile
|
endwhile
|
||||||
@ -161,15 +164,26 @@ function! ccomplete#Complete(findstart, base)
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
let res = [{'match': match, 'tagline' : '', 'kind' : kind, 'info' : line}]
|
let res = [{'match': match, 'tagline' : '', 'kind' : kind, 'info' : line}]
|
||||||
|
elseif len(items) == arrays + 1
|
||||||
|
" Completing one word and it's a local array variable: build tagline
|
||||||
|
" from declaration line
|
||||||
|
let match = items[0]
|
||||||
|
let kind = 'v'
|
||||||
|
let tagline = "\t/^" . line . '$/'
|
||||||
|
let res = [{'match': match, 'tagline' : tagline, 'kind' : kind, 'info' : line}]
|
||||||
else
|
else
|
||||||
" Completing "var.", "var.something", etc.
|
" Completing "var.", "var.something", etc.
|
||||||
let res = s:Nextitem(strpart(line, 0, col), items[1:], 0, 1)
|
let res = s:Nextitem(strpart(line, 0, col), items[1:], 0, 1)
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if len(items) == 1
|
if len(items) == 1 || len(items) == arrays + 1
|
||||||
" Only one part, no "." or "->": complete from tags file.
|
" Only one part, no "." or "->": complete from tags file.
|
||||||
|
if len(items) == 1
|
||||||
let tags = taglist('^' . base)
|
let tags = taglist('^' . base)
|
||||||
|
else
|
||||||
|
let tags = taglist('^' . items[0] . '$')
|
||||||
|
endif
|
||||||
|
|
||||||
" Remove members, these can't appear without something in front.
|
" Remove members, these can't appear without something in front.
|
||||||
call filter(tags, 'has_key(v:val, "kind") ? v:val["kind"] != "m" : 1')
|
call filter(tags, 'has_key(v:val, "kind") ? v:val["kind"] != "m" : 1')
|
||||||
@ -516,11 +530,24 @@ function! s:StructMembers(typename, items, all)
|
|||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
" Skip over [...] items
|
||||||
|
let idx = 0
|
||||||
|
while 1
|
||||||
|
if idx >= len(a:items)
|
||||||
|
let target = '' " No further items, matching all members
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
if a:items[idx][0] != '['
|
||||||
|
let target = a:items[idx]
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
let idx += 1
|
||||||
|
endwhile
|
||||||
" Put matching members in matches[].
|
" Put matching members in matches[].
|
||||||
let matches = []
|
let matches = []
|
||||||
for l in qflist
|
for l in qflist
|
||||||
let memb = matchstr(l['text'], '[^\t]*')
|
let memb = matchstr(l['text'], '[^\t]*')
|
||||||
if memb =~ '^' . a:items[0]
|
if memb =~ '^' . target
|
||||||
" Skip matches local to another file.
|
" Skip matches local to another file.
|
||||||
if match(l['text'], "\tfile:") < 0 || bufnr('%') == bufnr(matchstr(l['text'], '\t\zs[^\t]*'))
|
if match(l['text'], "\tfile:") < 0 || bufnr('%') == bufnr(matchstr(l['text'], '\t\zs[^\t]*'))
|
||||||
let item = {'match': memb, 'tagline': l['text']}
|
let item = {'match': memb, 'tagline': l['text']}
|
||||||
@ -540,8 +567,8 @@ function! s:StructMembers(typename, items, all)
|
|||||||
endfor
|
endfor
|
||||||
|
|
||||||
if len(matches) > 0
|
if len(matches) > 0
|
||||||
" Skip over [...] items
|
" Skip over next [...] items
|
||||||
let idx = 1
|
let idx += 1
|
||||||
while 1
|
while 1
|
||||||
if idx >= len(a:items)
|
if idx >= len(a:items)
|
||||||
return matches " No further items, return the result.
|
return matches " No further items, return the result.
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
" plus CSS Speech Module <http://www.w3.org/TR/css3-speech/>
|
" plus CSS Speech Module <http://www.w3.org/TR/css3-speech/>
|
||||||
" Maintainer: Kao, Wei-Ko(othree) ( othree AT gmail DOT com )
|
" Maintainer: Kao, Wei-Ko(othree) ( othree AT gmail DOT com )
|
||||||
" Original Author: Mikolaj Machowski ( mikmach AT wp DOT pl )
|
" Original Author: Mikolaj Machowski ( mikmach AT wp DOT pl )
|
||||||
" Last Change: 2016 Jan 11
|
" Last Change: 2018 Jul 02
|
||||||
|
|
||||||
let s:values = split("all additive-symbols align-content align-items align-self animation animation-delay animation-direction animation-duration animation-fill-mode animation-iteration-count animation-name animation-play-state animation-timing-function backface-visibility background background-attachment background-blend-mode background-clip background-color background-image background-origin background-position background-repeat background-size block-size border border-block-end border-block-end-color border-block-end-style border-block-end-width border-block-start border-block-start-color border-block-start-style border-block-start-width border-bottom border-bottom-color border-bottom-left-radius border-bottom-right-radius border-bottom-style border-bottom-width border-collapse border-color border-image border-image-outset border-image-repeat border-image-slice border-image-source border-image-width border-inline-end border-inline-end-color border-inline-end-style border-inline-end-width border-inline-start border-inline-start-color border-inline-start-style border-inline-start-width border-left border-left-color border-left-style border-left-width border-radius border-right border-right-color border-right-style border-right-width border-spacing border-style border-top border-top-color border-top-left-radius border-top-right-radius border-top-style border-top-width border-width bottom box-decoration-break box-shadow box-sizing break-after break-before break-inside caption-side clear clip clip-path color columns column-count column-fill column-gap column-rule column-rule-color column-rule-style column-rule-width column-span column-width content counter-increment counter-reset cue cue-before cue-after cursor direction display empty-cells fallback filter flex flex-basis flex-direction flex-flow flex-grow flex-shrink flex-wrap float font font-family font-feature-settings font-kerning font-language-override font-size font-size-adjust font-stretch font-style font-synthesis font-variant font-variant-alternates font-variant-caps font-variant-east-asian font-variant-ligatures font-variant-numeric font-variant-position font-weight grid grid-area grid-auto-columns grid-auto-flow grid-auto-position grid-auto-rows grid-column grid-column-start grid-column-end grid-row grid-row-start grid-row-end grid-template grid-template-areas grid-template-rows grid-template-columns height hyphens image-rendering image-resolution image-orientation ime-mode inline-size isolation justify-content left letter-spacing line-break line-height list-style list-style-image list-style-position list-style-type margin margin-block-end margin-block-start margin-bottom margin-inline-end margin-inline-start margin-left margin-right margin-top marks mask mask-type max-block-size max-height max-inline-size max-width max-zoom min-block-size min-height min-inline-size min-width min-zoom mix-blend-mode negative object-fit object-position offset-block-end offset-block-start offset-inline-end offset-inline-start opacity order orientation orphans outline outline-color outline-offset outline-style outline-width overflow overflow-wrap overflow-x overflow-y pad padding padding-block-end padding-block-start padding-bottom padding-inline-end padding-inline-start padding-left padding-right padding-top page-break-after page-break-before page-break-inside pause-before pause-after pause perspective perspective-origin pointer-events position prefix quotes range resize rest rest-before rest-after right ruby-align ruby-merge ruby-position scroll-behavior scroll-snap-coordinate scroll-snap-destination scroll-snap-points-x scroll-snap-points-y scroll-snap-type scroll-snap-type-x scroll-snap-type-y shape-image-threshold shape-margin shape-outside speak speak-as suffix symbols system table-layout tab-size text-align text-align-last text-combine-upright text-decoration text-decoration-color text-decoration-line text-emphasis text-emphasis-color text-emphasis-position text-emphasis-style text-indent text-orientation text-overflow text-rendering text-shadow text-transform text-underline-position top touch-action transform transform-box transform-origin transform-style transition transition-delay transition-duration transition-property transition-timing-function unicode-bidi unicode-range user-zoom vertical-align visibility voice-balance voice-duration voice-family voice-pitch voice-rate voice-range voice-stress voice-volume white-space widows width will-change word-break word-spacing word-wrap writing-mode z-index zoom")
|
let s:values = split("all additive-symbols align-content align-items align-self animation animation-delay animation-direction animation-duration animation-fill-mode animation-iteration-count animation-name animation-play-state animation-timing-function backface-visibility background background-attachment background-blend-mode background-clip background-color background-image background-origin background-position background-repeat background-size block-size border border-block-end border-block-end-color border-block-end-style border-block-end-width border-block-start border-block-start-color border-block-start-style border-block-start-width border-bottom border-bottom-color border-bottom-left-radius border-bottom-right-radius border-bottom-style border-bottom-width border-collapse border-color border-image border-image-outset border-image-repeat border-image-slice border-image-source border-image-width border-inline-end border-inline-end-color border-inline-end-style border-inline-end-width border-inline-start border-inline-start-color border-inline-start-style border-inline-start-width border-left border-left-color border-left-style border-left-width border-radius border-right border-right-color border-right-style border-right-width border-spacing border-style border-top border-top-color border-top-left-radius border-top-right-radius border-top-style border-top-width border-width bottom box-decoration-break box-shadow box-sizing break-after break-before break-inside caption-side clear clip clip-path color columns column-count column-fill column-gap column-rule column-rule-color column-rule-style column-rule-width column-span column-width content counter-increment counter-reset cue cue-before cue-after cursor direction display empty-cells fallback filter flex flex-basis flex-direction flex-flow flex-grow flex-shrink flex-wrap float font font-family font-feature-settings font-kerning font-language-override font-size font-size-adjust font-stretch font-style font-synthesis font-variant font-variant-alternates font-variant-caps font-variant-east-asian font-variant-ligatures font-variant-numeric font-variant-position font-weight grid grid-area grid-auto-columns grid-auto-flow grid-auto-position grid-auto-rows grid-column grid-column-start grid-column-end grid-row grid-row-start grid-row-end grid-template grid-template-areas grid-template-rows grid-template-columns height hyphens image-rendering image-resolution image-orientation ime-mode inline-size isolation justify-content left letter-spacing line-break line-height list-style list-style-image list-style-position list-style-type margin margin-block-end margin-block-start margin-bottom margin-inline-end margin-inline-start margin-left margin-right margin-top marks mask mask-type max-block-size max-height max-inline-size max-width max-zoom min-block-size min-height min-inline-size min-width min-zoom mix-blend-mode negative object-fit object-position offset-block-end offset-block-start offset-inline-end offset-inline-start opacity order orientation orphans outline outline-color outline-offset outline-style outline-width overflow overflow-wrap overflow-x overflow-y pad padding padding-block-end padding-block-start padding-bottom padding-inline-end padding-inline-start padding-left padding-right padding-top page-break-after page-break-before page-break-inside pause-before pause-after pause perspective perspective-origin pointer-events position prefix quotes range resize rest rest-before rest-after right ruby-align ruby-merge ruby-position scroll-behavior scroll-snap-coordinate scroll-snap-destination scroll-snap-points-x scroll-snap-points-y scroll-snap-type scroll-snap-type-x scroll-snap-type-y shape-image-threshold shape-margin shape-outside speak speak-as suffix symbols system table-layout tab-size text-align text-align-last text-combine-upright text-decoration text-decoration-color text-decoration-line text-emphasis text-emphasis-color text-emphasis-position text-emphasis-style text-indent text-orientation text-overflow text-rendering text-shadow text-transform text-underline-position top touch-action transform transform-box transform-origin transform-style transition transition-delay transition-duration transition-property transition-timing-function unicode-bidi unicode-range user-zoom vertical-align visibility voice-balance voice-duration voice-family voice-pitch voice-rate voice-range voice-stress voice-volume white-space widows width will-change word-break word-spacing word-wrap writing-mode z-index zoom")
|
||||||
|
|
||||||
@ -19,7 +19,6 @@ function! csscomplete#CompleteCSS(findstart, base)
|
|||||||
while start >= 0 && line[start - 1] =~ '\%(\k\|-\)'
|
while start >= 0 && line[start - 1] =~ '\%(\k\|-\)'
|
||||||
let start -= 1
|
let start -= 1
|
||||||
endwhile
|
endwhile
|
||||||
let b:after = line[compl_begin :]
|
|
||||||
let b:compl_context = line[0:compl_begin]
|
let b:compl_context = line[0:compl_begin]
|
||||||
return start
|
return start
|
||||||
endif
|
endif
|
||||||
@ -37,11 +36,14 @@ function! csscomplete#CompleteCSS(findstart, base)
|
|||||||
" 5. if @ complete at-rule
|
" 5. if @ complete at-rule
|
||||||
" 6. if ! complete important
|
" 6. if ! complete important
|
||||||
if exists("b:compl_context")
|
if exists("b:compl_context")
|
||||||
|
let line = getline('.')
|
||||||
|
let compl_begin = col('.') - 2
|
||||||
|
let after = line[compl_begin:]
|
||||||
let line = b:compl_context
|
let line = b:compl_context
|
||||||
let after = b:after
|
|
||||||
unlet! b:compl_context
|
unlet! b:compl_context
|
||||||
else
|
else
|
||||||
let line = a:base
|
let line = a:base
|
||||||
|
let after = ''
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let res = []
|
let res = []
|
||||||
|
10
runtime/autoload/dist/ft.vim
vendored
10
runtime/autoload/dist/ft.vim
vendored
@ -1,7 +1,7 @@
|
|||||||
" Vim functions for file type detection
|
" Vim functions for file type detection
|
||||||
"
|
"
|
||||||
" Maintainer: Bram Moolenaar <Bram@vim.org>
|
" Maintainer: Bram Moolenaar <Bram@vim.org>
|
||||||
" Last Change: 2017 Nov 11
|
" Last Change: 2017 Dec 05
|
||||||
|
|
||||||
" These functions are moved here from runtime/filetype.vim to make startup
|
" These functions are moved here from runtime/filetype.vim to make startup
|
||||||
" faster.
|
" faster.
|
||||||
@ -618,7 +618,11 @@ func dist#ft#FTperl()
|
|||||||
setf perl
|
setf perl
|
||||||
return 1
|
return 1
|
||||||
endif
|
endif
|
||||||
if search('^use\s\s*\k', 'nc', 30)
|
let save_cursor = getpos('.')
|
||||||
|
call cursor(1,1)
|
||||||
|
let has_use = search('^use\s\s*\k', 'c', 30)
|
||||||
|
call setpos('.', save_cursor)
|
||||||
|
if has_use
|
||||||
setf perl
|
setf perl
|
||||||
return 1
|
return 1
|
||||||
endif
|
endif
|
||||||
@ -628,7 +632,7 @@ endfunc
|
|||||||
" Choose context, plaintex, or tex (LaTeX) based on these rules:
|
" Choose context, plaintex, or tex (LaTeX) based on these rules:
|
||||||
" 1. Check the first line of the file for "%&<format>".
|
" 1. Check the first line of the file for "%&<format>".
|
||||||
" 2. Check the first 1000 non-comment lines for LaTeX or ConTeXt keywords.
|
" 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.
|
" 3. Default to "plain" or to g:tex_flavor, can be set in user's vimrc.
|
||||||
func dist#ft#FTtex()
|
func dist#ft#FTtex()
|
||||||
let firstline = getline(1)
|
let firstline = getline(1)
|
||||||
if firstline =~ '^%&\s*\a\+'
|
if firstline =~ '^%&\s*\a\+'
|
||||||
|
3382
runtime/autoload/haskellcomplete.vim
Normal file
3382
runtime/autoload/haskellcomplete.vim
Normal file
File diff suppressed because it is too large
Load Diff
@ -4,6 +4,14 @@ function! s:check_config() abort
|
|||||||
let ok = v:true
|
let ok = v:true
|
||||||
call health#report_start('Configuration')
|
call health#report_start('Configuration')
|
||||||
|
|
||||||
|
let vimrc = empty($MYVIMRC) ? stdpath('config').'/init.vim' : $MYVIMRC
|
||||||
|
if !filereadable(vimrc)
|
||||||
|
let ok = v:false
|
||||||
|
let has_vim = filereadable(expand('~/.vimrc'))
|
||||||
|
call health#report_warn('Missing user config file: '.vimrc,
|
||||||
|
\[ has_vim ? ':help nvim-from-vim' : ':help init.vim' ])
|
||||||
|
endif
|
||||||
|
|
||||||
" 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
|
||||||
|
@ -37,7 +37,12 @@ endfunction
|
|||||||
|
|
||||||
" Handler for s:system() function.
|
" Handler for s:system() function.
|
||||||
function! s:system_handler(jobid, data, event) dict abort
|
function! s:system_handler(jobid, data, event) dict abort
|
||||||
if a:event ==# 'stdout' || a:event ==# 'stderr'
|
if a:event ==# 'stderr'
|
||||||
|
let self.stderr .= join(a:data, '')
|
||||||
|
if !self.ignore_stderr
|
||||||
|
let self.output .= join(a:data, '')
|
||||||
|
endif
|
||||||
|
elseif a:event ==# 'stdout'
|
||||||
let self.output .= join(a:data, '')
|
let self.output .= join(a:data, '')
|
||||||
elseif a:event ==# 'exit'
|
elseif a:event ==# 'exit'
|
||||||
let s:shell_error = a:data
|
let s:shell_error = a:data
|
||||||
@ -57,16 +62,15 @@ endfunction
|
|||||||
" Run a system command and timeout after 30 seconds.
|
" Run a system command and timeout after 30 seconds.
|
||||||
function! s:system(cmd, ...) abort
|
function! s:system(cmd, ...) abort
|
||||||
let stdin = a:0 ? a:1 : ''
|
let stdin = a:0 ? a:1 : ''
|
||||||
let ignore_stderr = a:0 > 1 ? a:2 : 0
|
|
||||||
let ignore_error = a:0 > 2 ? a:3 : 0
|
let ignore_error = a:0 > 2 ? a:3 : 0
|
||||||
let opts = {
|
let opts = {
|
||||||
|
\ 'ignore_stderr': a:0 > 1 ? a:2 : 0,
|
||||||
\ 'output': '',
|
\ 'output': '',
|
||||||
|
\ 'stderr': '',
|
||||||
\ 'on_stdout': function('s:system_handler'),
|
\ 'on_stdout': function('s:system_handler'),
|
||||||
|
\ 'on_stderr': function('s:system_handler'),
|
||||||
\ 'on_exit': function('s:system_handler'),
|
\ 'on_exit': function('s:system_handler'),
|
||||||
\ }
|
\ }
|
||||||
if !ignore_stderr
|
|
||||||
let opts.on_stderr = function('s:system_handler')
|
|
||||||
endif
|
|
||||||
let jobid = jobstart(a:cmd, opts)
|
let jobid = jobstart(a:cmd, opts)
|
||||||
|
|
||||||
if jobid < 1
|
if jobid < 1
|
||||||
@ -85,8 +89,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` (in %s)\nOutput: %s",
|
call health#report_error(printf("Command error (job=%d, exit code %d): `%s` (in %s)\nOutput: %s\nStderr: %s",
|
||||||
\ jobid, s:shellify(a:cmd), string(getcwd()), opts.output))
|
\ jobid, s:shell_error, s:shellify(a:cmd), string(getcwd()), opts.output, opts.stderr))
|
||||||
endif
|
endif
|
||||||
|
|
||||||
return opts.output
|
return opts.output
|
||||||
@ -148,10 +152,10 @@ function! s:check_clipboard() abort
|
|||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" Get the latest Neovim Python client version from PyPI.
|
" Get the latest Neovim Python client (pynvim) version from PyPI.
|
||||||
function! s:latest_pypi_version() abort
|
function! s:latest_pypi_version() abort
|
||||||
let pypi_version = 'unable to get pypi response'
|
let pypi_version = 'unable to get pypi response'
|
||||||
let pypi_response = s:download('https://pypi.python.org/pypi/neovim/json')
|
let pypi_response = s:download('https://pypi.python.org/pypi/pynvim/json')
|
||||||
if !empty(pypi_response)
|
if !empty(pypi_response)
|
||||||
try
|
try
|
||||||
let pypi_data = json_decode(pypi_response)
|
let pypi_data = json_decode(pypi_response)
|
||||||
@ -188,9 +192,9 @@ function! s:version_info(python) abort
|
|||||||
let nvim_path = s:trim(s:system([
|
let nvim_path = s:trim(s:system([
|
||||||
\ a:python, '-c',
|
\ a:python, '-c',
|
||||||
\ 'import sys; sys.path.remove(""); ' .
|
\ 'import sys; sys.path.remove(""); ' .
|
||||||
\ 'import neovim; print(neovim.__file__)']))
|
\ 'import pynvim; print(pynvim.__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 pynvim Python module', pypi_version,
|
||||||
\ nvim_path]
|
\ nvim_path]
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@ -202,13 +206,13 @@ function! s:version_info(python) abort
|
|||||||
return a == b ? 0 : a > b ? 1 : -1
|
return a == b ? 0 : a > b ? 1 : -1
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
" Try to get neovim.VERSION (added in 0.1.11dev).
|
" Try to get pynvim.VERSION (added in 0.1.11dev).
|
||||||
let nvim_version = s:system([a:python, '-c',
|
let nvim_version = s:system([a:python, '-c',
|
||||||
\ 'from neovim import VERSION as v; '.
|
\ 'from pynvim import VERSION as v; '.
|
||||||
\ 'print("{}.{}.{}{}".format(v.major, v.minor, v.patch, v.prerelease))'],
|
\ 'print("{}.{}.{}{}".format(v.major, v.minor, v.patch, v.prerelease))'],
|
||||||
\ '', 1, 1)
|
\ '', 1, 1)
|
||||||
if empty(nvim_version)
|
if empty(nvim_version)
|
||||||
let nvim_version = 'unable to find neovim Python module version'
|
let nvim_version = 'unable to find pynvim Python module version'
|
||||||
let base = fnamemodify(nvim_path, ':h')
|
let base = fnamemodify(nvim_path, ':h')
|
||||||
let metas = glob(base.'-*/METADATA', 1, 1)
|
let metas = glob(base.'-*/METADATA', 1, 1)
|
||||||
\ + glob(base.'-*/PKG-INFO', 1, 1)
|
\ + glob(base.'-*/PKG-INFO', 1, 1)
|
||||||
@ -289,22 +293,16 @@ function! s:check_python(version) abort
|
|||||||
|
|
||||||
let [pyname, pythonx_errs] = provider#pythonx#Detect(a:version)
|
let [pyname, pythonx_errs] = provider#pythonx#Detect(a:version)
|
||||||
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 pynvim '
|
||||||
\ . 'module. Using the first available for diagnostics.')
|
\ . 'module. Using the first available for diagnostics.')
|
||||||
endif
|
elseif exists('g:'.host_prog_var)
|
||||||
|
let python_bin = pyname
|
||||||
if !empty(pyname)
|
|
||||||
if exists('g:'.host_prog_var)
|
|
||||||
let python_bin = exepath(pyname)
|
|
||||||
endif
|
|
||||||
let pyname = fnamemodify(pyname, ':t')
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if !empty(pythonx_errs)
|
if !empty(pythonx_errs)
|
||||||
call health#report_error('Python provider error', pythonx_errs)
|
call health#report_error('Python provider error', pythonx_errs)
|
||||||
endif
|
|
||||||
|
|
||||||
if !empty(pyname) && empty(python_bin) && empty(pythonx_errs)
|
elseif !empty(pyname) && empty(python_bin)
|
||||||
if !exists('g:'.host_prog_var)
|
if !exists('g:'.host_prog_var)
|
||||||
call health#report_info(printf('`g:%s` is not set. Searching for '
|
call health#report_info(printf('`g:%s` is not set. Searching for '
|
||||||
\ . '%s in the environment.', host_prog_var, pyname))
|
\ . '%s in the environment.', host_prog_var, pyname))
|
||||||
@ -354,7 +352,7 @@ function! s:check_python(version) abort
|
|||||||
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 '
|
||||||
\ . 'for Neovim using pyenv, and set `g:%s`. This will avoid '
|
\ . 'for Neovim using pyenv, and set `g:%s`. This will avoid '
|
||||||
\ . 'the need to install the Neovim Python module in each '
|
\ . 'the need to install the pynvim module in each '
|
||||||
\ . 'version/virtualenv.', host_prog_var)
|
\ . 'version/virtualenv.', host_prog_var)
|
||||||
\ ])
|
\ ])
|
||||||
elseif !empty(venv)
|
elseif !empty(venv)
|
||||||
@ -368,7 +366,7 @@ function! s:check_python(version) abort
|
|||||||
call health#report_warn('Your virtualenv is not set up optimally.', [
|
call health#report_warn('Your virtualenv is not set up optimally.', [
|
||||||
\ printf('Create a virtualenv specifically '
|
\ printf('Create a virtualenv specifically '
|
||||||
\ . 'for Neovim and use `g:%s`. This will avoid '
|
\ . 'for Neovim and use `g:%s`. This will avoid '
|
||||||
\ . 'the need to install Neovim''s Python module in each '
|
\ . 'the need to install the pynvim module in each '
|
||||||
\ . 'virtualenv.', host_prog_var)
|
\ . 'virtualenv.', host_prog_var)
|
||||||
\ ])
|
\ ])
|
||||||
endif
|
endif
|
||||||
@ -383,8 +381,10 @@ function! s:check_python(version) abort
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
" Check if $VIRTUAL_ENV is valid.
|
" Check if $VIRTUAL_ENV is valid.
|
||||||
if exists('$VIRTUAL_ENV')
|
if exists('$VIRTUAL_ENV') && !empty(python_bin)
|
||||||
if !empty(pyname) && $VIRTUAL_ENV !=# matchstr(exepath(pyname), '^\V'.$VIRTUAL_ENV)
|
if $VIRTUAL_ENV ==# matchstr(python_bin, '^\V'.$VIRTUAL_ENV)
|
||||||
|
call health#report_info('$VIRTUAL_ENV matches executable')
|
||||||
|
else
|
||||||
call health#report_warn(
|
call health#report_warn(
|
||||||
\ '$VIRTUAL_ENV exists but appears to be inactive. '
|
\ '$VIRTUAL_ENV exists but appears to be inactive. '
|
||||||
\ . 'This could lead to unexpected results.',
|
\ . 'This could lead to unexpected results.',
|
||||||
@ -400,6 +400,8 @@ function! s:check_python(version) abort
|
|||||||
endfor
|
endfor
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
let pip = 'pip' . (a:version == 2 ? '' : '3')
|
||||||
|
|
||||||
if !empty(python_bin)
|
if !empty(python_bin)
|
||||||
let [pyversion, current, latest, status] = s:version_info(python_bin)
|
let [pyversion, current, latest, status] = s:version_info(python_bin)
|
||||||
if a:version != str2nr(pyversion)
|
if a:version != str2nr(pyversion)
|
||||||
@ -410,28 +412,35 @@ function! s:check_python(version) abort
|
|||||||
call health#report_warn('Python 3.3+ is recommended.')
|
call health#report_warn('Python 3.3+ is recommended.')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
call health#report_info('Python'.a:version.' version: ' . pyversion)
|
call health#report_info('Python version: ' . pyversion)
|
||||||
if s:is_bad_response(status)
|
if s:is_bad_response(status)
|
||||||
call health#report_info(printf('%s-neovim version: %s (%s)', pyname, current, status))
|
call health#report_info(printf('pynvim version: %s (%s)', current, status))
|
||||||
else
|
else
|
||||||
call health#report_info(printf('%s-neovim version: %s', pyname, current))
|
call health#report_info(printf('pynvim version: %s', current))
|
||||||
|
let [module_found, _msg] = provider#pythonx#CheckForModule(python_bin,
|
||||||
|
\ 'neovim', a:version)
|
||||||
|
if !module_found
|
||||||
|
call health#report_error('Importing "neovim" failed.',
|
||||||
|
\ "Reinstall \"pynvim\" and optionally \"neovim\" packages.\n" .
|
||||||
|
\ pip ." uninstall pynvim neovim\n" .
|
||||||
|
\ pip ." install pynvim\n" .
|
||||||
|
\ pip ." install neovim # only if needed by third-party software")
|
||||||
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if s:is_bad_response(current)
|
if s:is_bad_response(current)
|
||||||
call health#report_error(
|
call health#report_error(
|
||||||
\ "Neovim Python client is not installed.\nError: ".current,
|
\ "pynvim is not installed.\nError: ".current,
|
||||||
\ ['Run in shell: pip' . a:version . ' install neovim'])
|
\ ['Run in shell: '. pip .' install pynvim'])
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if s:is_bad_response(latest)
|
if s:is_bad_response(latest)
|
||||||
call health#report_warn('Could not contact PyPI to get latest version.')
|
call health#report_warn('Could not contact PyPI to get latest version.')
|
||||||
call health#report_error('HTTP request failed: '.latest)
|
call health#report_error('HTTP request failed: '.latest)
|
||||||
elseif s:is_bad_response(status)
|
elseif s:is_bad_response(status)
|
||||||
call health#report_warn(printf('Latest %s-neovim is NOT installed: %s',
|
call health#report_warn(printf('Latest pynvim is NOT installed: %s', latest))
|
||||||
\ pyname, latest))
|
|
||||||
elseif !s:is_bad_response(current)
|
elseif !s:is_bad_response(current)
|
||||||
call health#report_ok(printf('Latest %s-neovim is installed: %s',
|
call health#report_ok(printf('Latest pynvim is installed.'))
|
||||||
\ pyname, latest))
|
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
@ -502,10 +511,10 @@ function! s:check_node() abort
|
|||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if !executable('node') || !executable('npm')
|
if !executable('node') || (!executable('npm') && !executable('yarn'))
|
||||||
call health#report_warn(
|
call health#report_warn(
|
||||||
\ '`node` and `npm` must be in $PATH.',
|
\ '`node` and `npm` (or `yarn`) must be in $PATH.',
|
||||||
\ ['Install Node.js and verify that `node` and `npm` commands work.'])
|
\ ['Install Node.js and verify that `node` and `npm` (or `yarn`) commands work.'])
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
let node_v = get(split(s:system('node -v'), "\n"), 0, '')
|
let node_v = get(split(s:system('node -v'), "\n"), 0, '')
|
||||||
@ -521,9 +530,9 @@ function! s:check_node() abort
|
|||||||
|
|
||||||
let host = provider#node#Detect()
|
let host = provider#node#Detect()
|
||||||
if empty(host)
|
if empty(host)
|
||||||
call health#report_warn('Missing "neovim" npm package.',
|
call health#report_warn('Missing "neovim" npm (or yarn) package.',
|
||||||
\ ['Run in shell: npm install -g neovim',
|
\ ['Run in shell: npm install -g neovim',
|
||||||
\ 'Is the npm bin directory in $PATH?'])
|
\ 'Run in shell (if you use yarn): yarn global add neovim'])
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
call health#report_info('Neovim node.js host: '. host)
|
call health#report_info('Neovim node.js host: '. host)
|
||||||
@ -559,7 +568,7 @@ function! s:check_node() abort
|
|||||||
\ current_npm, latest_npm),
|
\ current_npm, latest_npm),
|
||||||
\ ['Run in shell: npm install -g neovim'])
|
\ ['Run in shell: npm install -g neovim'])
|
||||||
else
|
else
|
||||||
call health#report_ok('Latest "neovim" npm package is installed: '. current_npm)
|
call health#report_ok('Latest "neovim" npm/yarn package is installed: '. current_npm)
|
||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
@ -1,5 +1,10 @@
|
|||||||
" Maintainer: Anmol Sethi <anmol@aubble.com>
|
" Maintainer: Anmol Sethi <anmol@aubble.com>
|
||||||
|
|
||||||
|
if exists('s:loaded_man')
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let s:loaded_man = 1
|
||||||
|
|
||||||
let s:find_arg = '-w'
|
let s:find_arg = '-w'
|
||||||
let s:localfile_arg = v:true " Always use -l if possible. #6683
|
let s:localfile_arg = v:true " Always use -l if possible. #6683
|
||||||
let s:section_arg = '-s'
|
let s:section_arg = '-s'
|
||||||
@ -144,8 +149,9 @@ function! s:system(cmd, ...) abort
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:get_page(path) abort
|
function! s:get_page(path) abort
|
||||||
" Respect $MANWIDTH or default to window width.
|
" Disable hard-wrap by using a big $MANWIDTH (max 1000 on some systems #9065).
|
||||||
let manwidth = empty($MANWIDTH) ? winwidth(0) : $MANWIDTH
|
" We use soft wrap: ftplugin/man.vim sets wrap/breakindent/….
|
||||||
|
let manwidth = 999
|
||||||
" 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
|
||||||
" Set MAN_KEEP_FORMATTING so Debian man doesn't discard backspaces.
|
" Set MAN_KEEP_FORMATTING so Debian man doesn't discard backspaces.
|
||||||
@ -161,6 +167,11 @@ function! s:put_page(page) abort
|
|||||||
while getline(1) =~# '^\s*$'
|
while getline(1) =~# '^\s*$'
|
||||||
silent keepjumps 1delete _
|
silent keepjumps 1delete _
|
||||||
endwhile
|
endwhile
|
||||||
|
" XXX: nroff justifies text by filling it with whitespace. That interacts
|
||||||
|
" badly with our use of $MANWIDTH=999. Hack around this by using a fixed
|
||||||
|
" size for those whitespace regions.
|
||||||
|
silent! keeppatterns keepjumps %s/\s\{199,}/\=repeat(' ', 10)/g
|
||||||
|
1
|
||||||
lua require("man").highlight_man_page()
|
lua require("man").highlight_man_page()
|
||||||
setlocal filetype=man
|
setlocal filetype=man
|
||||||
endfunction
|
endfunction
|
||||||
@ -212,9 +223,9 @@ function! man#extract_sect_and_name_ref(ref) abort
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:get_path(sect, name) abort
|
function! s:get_path(sect, name) abort
|
||||||
if empty(a:sect)
|
|
||||||
" Some man implementations (OpenBSD) return all available paths from the
|
" Some man implementations (OpenBSD) return all available paths from the
|
||||||
" search command, so we get() the first one. #8341
|
" search command, so we get() the first one. #8341
|
||||||
|
if empty(a:sect)
|
||||||
return substitute(get(split(s:system(['man', s:find_arg, a:name])), 0, ''), '\n\+$', '', '')
|
return substitute(get(split(s:system(['man', s:find_arg, a:name])), 0, ''), '\n\+$', '', '')
|
||||||
endif
|
endif
|
||||||
" '-s' flag handles:
|
" '-s' flag handles:
|
||||||
@ -222,7 +233,7 @@ function! s:get_path(sect, name) abort
|
|||||||
" - 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 substitute(s:system(['man', s:find_arg, s:section_arg, a:sect, a:name]), '\n\+$', '', '')
|
return substitute(get(split(s:system(['man', s:find_arg, s:section_arg, a:sect, a:name])), 0, ''), '\n\+$', '', '')
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:verify_exists(sect, name) abort
|
function! s:verify_exists(sect, name) abort
|
||||||
@ -381,15 +392,17 @@ function! man#init_pager() abort
|
|||||||
keepjumps 1
|
keepjumps 1
|
||||||
endif
|
endif
|
||||||
lua require("man").highlight_man_page()
|
lua require("man").highlight_man_page()
|
||||||
" This is not perfect. See `man glDrawArraysInstanced`. Since the title is
|
" Guess the ref from the heading (which is usually uppercase, so we cannot
|
||||||
" all caps it is impossible to tell what the original capitilization was.
|
" know the correct casing, cf. `man glDrawArraysInstanced`).
|
||||||
let ref = substitute(matchstr(getline(1), '^[^)]\+)'), ' ', '_', 'g')
|
let ref = substitute(matchstr(getline(1), '^[^)]\+)'), ' ', '_', 'g')
|
||||||
try
|
try
|
||||||
let b:man_sect = man#extract_sect_and_name_ref(ref)[0]
|
let b:man_sect = man#extract_sect_and_name_ref(ref)[0]
|
||||||
catch
|
catch
|
||||||
let b:man_sect = ''
|
let b:man_sect = ''
|
||||||
endtry
|
endtry
|
||||||
execute 'silent file man://'.fnameescape(ref)
|
if -1 == match(bufname('%'), 'man:\/\/') " Avoid duplicate buffers, E95.
|
||||||
|
execute 'silent file man://'.tolower(fnameescape(ref))
|
||||||
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
call s:init()
|
call s:init()
|
||||||
|
@ -605,13 +605,10 @@ function msgpack#eval(s, special_objs) abort
|
|||||||
call add(expr, dec)
|
call add(expr, dec)
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
elseif s =~# '-\?\%(inf\|nan\)'
|
elseif s =~# '\v^\-%(inf|nan)'
|
||||||
if s[0] is# '-'
|
|
||||||
call add(expr, '-')
|
call add(expr, '-')
|
||||||
let s = s[1:]
|
call add(expr, s:MSGPACK_SPECIAL_OBJECTS[s[1:3]])
|
||||||
endif
|
let s = s[4:]
|
||||||
call add(expr, s:MSGPACK_SPECIAL_OBJECTS[s[0:2]])
|
|
||||||
let s = s[3:]
|
|
||||||
elseif stridx('="+', s[0]) != -1
|
elseif stridx('="+', s[0]) != -1
|
||||||
let match = matchlist(s, '\v\C^(\=|\+\((\-?\d+)\)|)(\"%(\\.|[^\\"]+)*\")')
|
let match = matchlist(s, '\v\C^(\=|\+\((\-?\d+)\)|)(\"%(\\.|[^\\"]+)*\")')
|
||||||
if empty(match)
|
if empty(match)
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
" Maintainer: Dávid Szabó ( complex857 AT gmail DOT com )
|
" Maintainer: Dávid Szabó ( complex857 AT gmail DOT com )
|
||||||
" Previous Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl )
|
" Previous Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl )
|
||||||
" URL: https://github.com/shawncplus/phpcomplete.vim
|
" URL: https://github.com/shawncplus/phpcomplete.vim
|
||||||
" Last Change: 2016 Oct 10
|
" Last Change: 2018 Oct 10
|
||||||
"
|
"
|
||||||
" OPTIONS:
|
" OPTIONS:
|
||||||
"
|
"
|
||||||
@ -146,6 +146,8 @@ function! phpcomplete#CompletePHP(findstart, base) " {{{
|
|||||||
end
|
end
|
||||||
|
|
||||||
try
|
try
|
||||||
|
let eventignore = &eventignore
|
||||||
|
let &eventignore = 'all'
|
||||||
let winheight = winheight(0)
|
let winheight = winheight(0)
|
||||||
let winnr = winnr()
|
let winnr = winnr()
|
||||||
|
|
||||||
@ -216,6 +218,7 @@ function! phpcomplete#CompletePHP(findstart, base) " {{{
|
|||||||
endif
|
endif
|
||||||
finally
|
finally
|
||||||
silent! exec winnr.'resize '.winheight
|
silent! exec winnr.'resize '.winheight
|
||||||
|
let &eventignore = eventignore
|
||||||
endtry
|
endtry
|
||||||
endfunction
|
endfunction
|
||||||
" }}}
|
" }}}
|
||||||
@ -1393,13 +1396,15 @@ function! phpcomplete#GetCallChainReturnType(classname_candidate, class_candidat
|
|||||||
for classstructure in classcontents
|
for classstructure in classcontents
|
||||||
let docblock_target_pattern = 'function\s\+&\?'.method.'\>\|\(public\|private\|protected\|var\).\+\$'.method.'\>\|@property.\+\$'.method.'\>'
|
let docblock_target_pattern = 'function\s\+&\?'.method.'\>\|\(public\|private\|protected\|var\).\+\$'.method.'\>\|@property.\+\$'.method.'\>'
|
||||||
let doc_str = phpcomplete#GetDocBlock(split(classstructure.content, '\n'), docblock_target_pattern)
|
let doc_str = phpcomplete#GetDocBlock(split(classstructure.content, '\n'), docblock_target_pattern)
|
||||||
if doc_str != ''
|
let return_type_hint = phpcomplete#GetFunctionReturnTypeHint(split(classstructure.content, '\n'), 'function\s\+&\?'.method.'\>')
|
||||||
|
if doc_str != '' || return_type_hint != ''
|
||||||
break
|
break
|
||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
if doc_str != ''
|
if doc_str != '' || return_type_hint != ''
|
||||||
let docblock = phpcomplete#ParseDocBlock(doc_str)
|
let docblock = phpcomplete#ParseDocBlock(doc_str)
|
||||||
if has_key(docblock.return, 'type') || has_key(docblock.var, 'type') || len(docblock.properties) > 0
|
if has_key(docblock.return, 'type') || has_key(docblock.var, 'type') || len(docblock.properties) > 0 || return_type_hint != ''
|
||||||
|
if return_type_hint == ''
|
||||||
let type = has_key(docblock.return, 'type') ? docblock.return.type : has_key(docblock.var, 'type') ? docblock.var.type : ''
|
let type = has_key(docblock.return, 'type') ? docblock.return.type : has_key(docblock.var, 'type') ? docblock.var.type : ''
|
||||||
|
|
||||||
if type == ''
|
if type == ''
|
||||||
@ -1410,6 +1415,9 @@ function! phpcomplete#GetCallChainReturnType(classname_candidate, class_candidat
|
|||||||
endif
|
endif
|
||||||
endfor
|
endfor
|
||||||
endif
|
endif
|
||||||
|
else
|
||||||
|
let type = return_type_hint
|
||||||
|
end
|
||||||
|
|
||||||
" there's a namespace in the type, threat the type as FQCN
|
" there's a namespace in the type, threat the type as FQCN
|
||||||
if type =~ '\\'
|
if type =~ '\\'
|
||||||
@ -1483,7 +1491,7 @@ function! phpcomplete#GetMethodStack(line) " {{{
|
|||||||
continue
|
continue
|
||||||
endif
|
endif
|
||||||
|
|
||||||
" if it's looks like a string
|
" if it looks like a string
|
||||||
if current_char == "'" || current_char == '"'
|
if current_char == "'" || current_char == '"'
|
||||||
" and it is not escaped
|
" and it is not escaped
|
||||||
if prev_char != '\' || (prev_char == '\' && prev_prev_char == '\')
|
if prev_char != '\' || (prev_char == '\' && prev_prev_char == '\')
|
||||||
@ -1587,9 +1595,11 @@ function! phpcomplete#GetClassName(start_line, context, current_namespace, impor
|
|||||||
elseif function_file != '' && filereadable(function_file)
|
elseif function_file != '' && filereadable(function_file)
|
||||||
let file_lines = readfile(function_file)
|
let file_lines = readfile(function_file)
|
||||||
let docblock_str = phpcomplete#GetDocBlock(file_lines, 'function\s*&\?\<'.function_name.'\>')
|
let docblock_str = phpcomplete#GetDocBlock(file_lines, 'function\s*&\?\<'.function_name.'\>')
|
||||||
|
let return_type_hint = phpcomplete#GetFunctionReturnTypeHint(file_lines, 'function\s*&\?'.function_name.'\>')
|
||||||
let docblock = phpcomplete#ParseDocBlock(docblock_str)
|
let docblock = phpcomplete#ParseDocBlock(docblock_str)
|
||||||
if has_key(docblock.return, 'type')
|
let type = has_key(docblock.return, 'type') ? docblock.return.type : return_type_hint
|
||||||
let classname_candidate = docblock.return.type
|
if type != ''
|
||||||
|
let classname_candidate = type
|
||||||
let [class_candidate_namespace, function_imports] = phpcomplete#GetCurrentNameSpace(file_lines)
|
let [class_candidate_namespace, function_imports] = phpcomplete#GetCurrentNameSpace(file_lines)
|
||||||
" try to expand the classname of the returned type with the context got from the function's source file
|
" try to expand the classname of the returned type with the context got from the function's source file
|
||||||
|
|
||||||
@ -1821,9 +1831,11 @@ function! phpcomplete#GetClassName(start_line, context, current_namespace, impor
|
|||||||
elseif function_file != '' && filereadable(function_file)
|
elseif function_file != '' && filereadable(function_file)
|
||||||
let file_lines = readfile(function_file)
|
let file_lines = readfile(function_file)
|
||||||
let docblock_str = phpcomplete#GetDocBlock(file_lines, 'function\s*&\?\<'.function_name.'\>')
|
let docblock_str = phpcomplete#GetDocBlock(file_lines, 'function\s*&\?\<'.function_name.'\>')
|
||||||
|
let return_type_hint = phpcomplete#GetFunctionReturnTypeHint(file_lines, 'function\s*&\?'.function_name.'\>')
|
||||||
let docblock = phpcomplete#ParseDocBlock(docblock_str)
|
let docblock = phpcomplete#ParseDocBlock(docblock_str)
|
||||||
if has_key(docblock.return, 'type')
|
let type = has_key(docblock.return, 'type') ? docblock.return.type : return_type_hint
|
||||||
let classname_candidate = docblock.return.type
|
if type != ''
|
||||||
|
let classname_candidate = type
|
||||||
let [class_candidate_namespace, function_imports] = phpcomplete#GetCurrentNameSpace(file_lines)
|
let [class_candidate_namespace, function_imports] = phpcomplete#GetCurrentNameSpace(file_lines)
|
||||||
" try to expand the classname of the returned type with the context got from the function's source file
|
" try to expand the classname of the returned type with the context got from the function's source file
|
||||||
let [classname_candidate, class_candidate_namespace] = phpcomplete#ExpandClassName(classname_candidate, class_candidate_namespace, function_imports)
|
let [classname_candidate, class_candidate_namespace] = phpcomplete#ExpandClassName(classname_candidate, class_candidate_namespace, function_imports)
|
||||||
@ -2413,6 +2425,44 @@ function! phpcomplete#ParseDocBlock(docblock) " {{{
|
|||||||
endfunction
|
endfunction
|
||||||
" }}}
|
" }}}
|
||||||
|
|
||||||
|
function! phpcomplete#GetFunctionReturnTypeHint(sccontent, search)
|
||||||
|
let i = 0
|
||||||
|
let l = 0
|
||||||
|
let function_line_start = -1
|
||||||
|
let function_line_end = -1
|
||||||
|
let sccontent_len = len(a:sccontent)
|
||||||
|
let return_type = ''
|
||||||
|
|
||||||
|
while (i < sccontent_len)
|
||||||
|
let line = a:sccontent[i]
|
||||||
|
" search for a function declaration
|
||||||
|
if line =~? a:search
|
||||||
|
let l = i
|
||||||
|
let function_line_start = i
|
||||||
|
" now search for the first { where the function body starts
|
||||||
|
while l < sccontent_len
|
||||||
|
let line = a:sccontent[l]
|
||||||
|
if line =~? '\V{'
|
||||||
|
let function_line_end = l
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
let l += 1
|
||||||
|
endwhile
|
||||||
|
break
|
||||||
|
endif
|
||||||
|
let i += 1
|
||||||
|
endwhile
|
||||||
|
|
||||||
|
" now grab the lines that holds the function declaration line
|
||||||
|
if function_line_start != -1 && function_line_end != -1
|
||||||
|
let function_line = join(a:sccontent[function_line_start :function_line_end], " ")
|
||||||
|
let class_name_pattern = '[a-zA-Z_\x7f-\xff\\][a-zA-Z_0-9\x7f-\xff\\]*'
|
||||||
|
let return_type = matchstr(function_line, '\c\s*:\s*\zs'.class_name_pattern.'\ze\s*{')
|
||||||
|
endif
|
||||||
|
return return_type
|
||||||
|
|
||||||
|
endfunction
|
||||||
|
|
||||||
function! phpcomplete#GetTypeFromDocBlockParam(docblock_type) " {{{
|
function! phpcomplete#GetTypeFromDocBlockParam(docblock_type) " {{{
|
||||||
if a:docblock_type !~ '|'
|
if a:docblock_type !~ '|'
|
||||||
return a:docblock_type
|
return a:docblock_type
|
||||||
@ -2572,7 +2622,7 @@ function! phpcomplete#GetCurrentNameSpace(file_lines) " {{{
|
|||||||
" find kind flags from tags or built in methods for the objects we extracted
|
" find kind flags from tags or built in methods for the objects we extracted
|
||||||
" they can be either classes, interfaces or namespaces, no other thing is importable in php
|
" they can be either classes, interfaces or namespaces, no other thing is importable in php
|
||||||
for [key, import] in items(imports)
|
for [key, import] in items(imports)
|
||||||
" if theres a \ in the name we have it's definetly not a built in thing, look for tags
|
" if theres a \ in the name we have it's definitely not a built in thing, look for tags
|
||||||
if import.name =~ '\\'
|
if import.name =~ '\\'
|
||||||
let patched_ctags_detected = 0
|
let patched_ctags_detected = 0
|
||||||
let [classname, namespace_for_classes] = phpcomplete#ExpandClassName(import.name, '\', {})
|
let [classname, namespace_for_classes] = phpcomplete#ExpandClassName(import.name, '\', {})
|
||||||
|
@ -60,6 +60,7 @@ function! provider#clipboard#Executable() abort
|
|||||||
let s:err = 'clipboard: invalid g:clipboard'
|
let s:err = 'clipboard: invalid g:clipboard'
|
||||||
return ''
|
return ''
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let s:copy = get(g:clipboard, 'copy', { '+': v:null, '*': v:null })
|
let s:copy = get(g:clipboard, 'copy', { '+': v:null, '*': v:null })
|
||||||
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)
|
||||||
@ -71,18 +72,24 @@ function! provider#clipboard#Executable() abort
|
|||||||
let s:paste['*'] = s:paste['+']
|
let s:paste['*'] = s:paste['+']
|
||||||
let s:cache_enabled = 0
|
let s:cache_enabled = 0
|
||||||
return 'pbcopy'
|
return 'pbcopy'
|
||||||
elseif exists('$DISPLAY') && executable('xsel') && s:cmd_ok('xsel -o -b')
|
elseif exists('$WAYLAND_DISPLAY') && executable('wl-copy') && executable('wl-paste')
|
||||||
let s:copy['+'] = 'xsel --nodetach -i -b'
|
let s:copy['+'] = 'wl-copy --foreground'
|
||||||
let s:paste['+'] = 'xsel -o -b'
|
let s:paste['+'] = 'wl-paste --no-newline'
|
||||||
let s:copy['*'] = 'xsel --nodetach -i -p'
|
let s:copy['*'] = 'wl-copy --foreground --primary'
|
||||||
let s:paste['*'] = 'xsel -o -p'
|
let s:paste['*'] = 'wl-paste --no-newline --primary'
|
||||||
return 'xsel'
|
return 'wl-copy'
|
||||||
elseif exists('$DISPLAY') && executable('xclip')
|
elseif exists('$DISPLAY') && executable('xclip')
|
||||||
let s:copy['+'] = 'xclip -quiet -i -selection clipboard'
|
let s:copy['+'] = 'xclip -quiet -i -selection clipboard'
|
||||||
let s:paste['+'] = 'xclip -o -selection clipboard'
|
let s:paste['+'] = 'xclip -o -selection clipboard'
|
||||||
let s:copy['*'] = 'xclip -quiet -i -selection primary'
|
let s:copy['*'] = 'xclip -quiet -i -selection primary'
|
||||||
let s:paste['*'] = 'xclip -o -selection primary'
|
let s:paste['*'] = 'xclip -o -selection primary'
|
||||||
return 'xclip'
|
return 'xclip'
|
||||||
|
elseif exists('$DISPLAY') && executable('xsel') && s:cmd_ok('xsel -o -b')
|
||||||
|
let s:copy['+'] = 'xsel --nodetach -i -b'
|
||||||
|
let s:paste['+'] = 'xsel -o -b'
|
||||||
|
let s:copy['*'] = 'xsel --nodetach -i -p'
|
||||||
|
let s:paste['*'] = 'xsel -o -p'
|
||||||
|
return 'xsel'
|
||||||
elseif executable('lemonade')
|
elseif executable('lemonade')
|
||||||
let s:copy['+'] = 'lemonade copy'
|
let s:copy['+'] = 'lemonade copy'
|
||||||
let s:paste['+'] = 'lemonade paste'
|
let s:paste['+'] = 'lemonade paste'
|
||||||
@ -95,9 +102,9 @@ function! provider#clipboard#Executable() abort
|
|||||||
let s:copy['*'] = s:copy['+']
|
let s:copy['*'] = s:copy['+']
|
||||||
let s:paste['*'] = s:paste['+']
|
let s:paste['*'] = s:paste['+']
|
||||||
return 'doitclient'
|
return 'doitclient'
|
||||||
elseif executable('win32yank')
|
elseif executable('win32yank.exe')
|
||||||
let s:copy['+'] = 'win32yank -i --crlf'
|
let s:copy['+'] = 'win32yank.exe -i --crlf'
|
||||||
let s:paste['+'] = 'win32yank -o --lf'
|
let s:paste['+'] = 'win32yank.exe -o --lf'
|
||||||
let s:copy['*'] = s:copy['+']
|
let s:copy['*'] = s:copy['+']
|
||||||
let s:paste['*'] = s:paste['+']
|
let s:paste['*'] = s:paste['+']
|
||||||
return 'win32yank'
|
return 'win32yank'
|
||||||
@ -121,7 +128,9 @@ if empty(provider#clipboard#Executable())
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
function! s:clipboard.get(reg) abort
|
function! s:clipboard.get(reg) abort
|
||||||
if s:selections[a:reg].owner > 0
|
if type(s:paste[a:reg]) == v:t_func
|
||||||
|
return s:paste[a:reg]()
|
||||||
|
elseif s:selections[a:reg].owner > 0
|
||||||
return s:selections[a:reg].data
|
return s:selections[a:reg].data
|
||||||
end
|
end
|
||||||
return s:try_cmd(s:paste[a:reg])
|
return s:try_cmd(s:paste[a:reg])
|
||||||
@ -135,6 +144,12 @@ function! s:clipboard.set(lines, regtype, reg) abort
|
|||||||
end
|
end
|
||||||
return 0
|
return 0
|
||||||
end
|
end
|
||||||
|
|
||||||
|
if type(s:copy[a:reg]) == v:t_func
|
||||||
|
call s:copy[a:reg](a:lines, a:regtype)
|
||||||
|
return 0
|
||||||
|
end
|
||||||
|
|
||||||
if s:cache_enabled == 0
|
if s:cache_enabled == 0
|
||||||
call s:try_cmd(s:copy[a:reg], a:lines)
|
call s:try_cmd(s:copy[a:reg], a:lines)
|
||||||
return 0
|
return 0
|
||||||
|
@ -22,6 +22,16 @@ function! s:is_minimum_version(version, min_major, min_minor) abort
|
|||||||
\ && str2nr(v_list[1]) >= str2nr(a:min_minor)))
|
\ && str2nr(v_list[1]) >= str2nr(a:min_minor)))
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
let s:NodeHandler = {
|
||||||
|
\ 'stdout_buffered': v:true,
|
||||||
|
\ 'result': ''
|
||||||
|
\ }
|
||||||
|
function! s:NodeHandler.on_exit(job_id, data, event) abort
|
||||||
|
let bin_dir = join(get(self, 'stdout', []), '')
|
||||||
|
let entry_point = bin_dir . self.entry_point
|
||||||
|
let self.result = filereadable(entry_point) ? entry_point : ''
|
||||||
|
endfunction
|
||||||
|
|
||||||
" Support for --inspect-brk requires node 6.12+ or 7.6+ or 8+
|
" Support for --inspect-brk requires node 6.12+ or 7.6+ or 8+
|
||||||
" Return 1 if it is supported
|
" Return 1 if it is supported
|
||||||
" Return 0 otherwise
|
" Return 0 otherwise
|
||||||
@ -39,20 +49,51 @@ endfunction
|
|||||||
|
|
||||||
function! provider#node#Detect() abort
|
function! provider#node#Detect() abort
|
||||||
if exists('g:node_host_prog')
|
if exists('g:node_host_prog')
|
||||||
return g:node_host_prog
|
return expand(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
|
endif
|
||||||
if !s:is_minimum_version(v:null, 6, 0)
|
if !s:is_minimum_version(v:null, 6, 0)
|
||||||
return ''
|
return ''
|
||||||
endif
|
endif
|
||||||
let entry_point = glob(global_modules . '/neovim/bin/cli.js')
|
|
||||||
if !filereadable(entry_point)
|
let npm_opts = {}
|
||||||
return ''
|
if executable('npm')
|
||||||
|
let npm_opts = deepcopy(s:NodeHandler)
|
||||||
|
let npm_opts.entry_point = '/neovim/bin/cli.js'
|
||||||
|
let npm_opts.job_id = jobstart('npm --loglevel silent root -g', npm_opts)
|
||||||
endif
|
endif
|
||||||
return entry_point
|
|
||||||
|
let yarn_opts = {}
|
||||||
|
if executable('yarn')
|
||||||
|
let yarn_opts = deepcopy(s:NodeHandler)
|
||||||
|
let yarn_opts.entry_point = '/node_modules/neovim/bin/cli.js'
|
||||||
|
" `yarn global dir` is slow (> 250ms), try the default path first
|
||||||
|
" XXX: The following code is not portable
|
||||||
|
" https://github.com/yarnpkg/yarn/issues/2049#issuecomment-263183768
|
||||||
|
if has('unix')
|
||||||
|
let yarn_default_path = $HOME . '/.config/yarn/global/' . yarn_opts.entry_point
|
||||||
|
if filereadable(yarn_default_path)
|
||||||
|
return yarn_default_path
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
let yarn_opts.job_id = jobstart('yarn global dir', yarn_opts)
|
||||||
|
endif
|
||||||
|
|
||||||
|
" npm returns the directory faster, so let's check that first
|
||||||
|
if !empty(npm_opts)
|
||||||
|
let result = jobwait([npm_opts.job_id])
|
||||||
|
if result[0] == 0 && npm_opts.result != ''
|
||||||
|
return npm_opts.result
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
if !empty(yarn_opts)
|
||||||
|
let result = jobwait([yarn_opts.job_id])
|
||||||
|
if result[0] == 0 && yarn_opts.result != ''
|
||||||
|
return yarn_opts.result
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
return ''
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! provider#node#Prog() abort
|
function! provider#node#Prog() abort
|
||||||
|
@ -10,7 +10,7 @@ function! provider#pythonx#Require(host) abort
|
|||||||
|
|
||||||
" Python host arguments
|
" Python host arguments
|
||||||
let prog = (ver == '2' ? provider#python#Prog() : provider#python3#Prog())
|
let prog = (ver == '2' ? provider#python#Prog() : provider#python3#Prog())
|
||||||
let args = [prog, '-c', 'import sys; sys.path.remove(""); import neovim; neovim.start_host()']
|
let args = [prog, '-c', 'import sys; sys.path.remove(""); import pynvim; pynvim.start_host()']
|
||||||
|
|
||||||
" Collect registered Python plugins into args
|
" Collect registered Python plugins into args
|
||||||
let python_plugins = remote#host#PluginsForHost(a:host.name)
|
let python_plugins = remote#host#PluginsForHost(a:host.name)
|
||||||
@ -24,13 +24,13 @@ endfunction
|
|||||||
function! provider#pythonx#Detect(major_ver) abort
|
function! provider#pythonx#Detect(major_ver) abort
|
||||||
if a:major_ver == 2
|
if a:major_ver == 2
|
||||||
if exists('g:python_host_prog')
|
if exists('g:python_host_prog')
|
||||||
return [g:python_host_prog, '']
|
return [expand(g:python_host_prog), '']
|
||||||
else
|
else
|
||||||
let progs = ['python2', 'python2.7', 'python2.6', 'python']
|
let progs = ['python2', 'python2.7', 'python2.6', 'python']
|
||||||
endif
|
endif
|
||||||
else
|
else
|
||||||
if exists('g:python3_host_prog')
|
if exists('g:python3_host_prog')
|
||||||
return [g:python3_host_prog, '']
|
return [expand(g:python3_host_prog), '']
|
||||||
else
|
else
|
||||||
let progs = ['python3', 'python3.7', 'python3.6', 'python3.5',
|
let progs = ['python3', 'python3.7', 'python3.6', 'python3.5',
|
||||||
\ 'python3.4', 'python3.3', 'python']
|
\ 'python3.4', 'python3.3', 'python']
|
||||||
@ -40,7 +40,7 @@ function! provider#pythonx#Detect(major_ver) abort
|
|||||||
let errors = []
|
let errors = []
|
||||||
|
|
||||||
for prog in progs
|
for prog in progs
|
||||||
let [result, err] = s:check_interpreter(prog, a:major_ver)
|
let [result, err] = provider#pythonx#CheckForModule(prog, 'pynvim', a:major_ver)
|
||||||
if result
|
if result
|
||||||
return [prog, err]
|
return [prog, err]
|
||||||
endif
|
endif
|
||||||
@ -54,46 +54,53 @@ function! provider#pythonx#Detect(major_ver) abort
|
|||||||
\ . ":\n" . join(errors, "\n")]
|
\ . ":\n" . join(errors, "\n")]
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! s:check_interpreter(prog, major_ver) abort
|
" Returns array: [prog_exitcode, prog_version]
|
||||||
|
function! s:import_module(prog, module) abort
|
||||||
|
let prog_version = system([a:prog, '-c' , printf(
|
||||||
|
\ 'import sys; ' .
|
||||||
|
\ 'sys.path.remove(""); ' .
|
||||||
|
\ 'sys.stdout.write(str(sys.version_info[0]) + "." + str(sys.version_info[1])); ' .
|
||||||
|
\ 'import pkgutil; ' .
|
||||||
|
\ 'exit(2*int(pkgutil.get_loader("%s") is None))',
|
||||||
|
\ a:module)])
|
||||||
|
return [v:shell_error, prog_version]
|
||||||
|
endfunction
|
||||||
|
|
||||||
|
" Returns array: [was_success, error_message]
|
||||||
|
function! provider#pythonx#CheckForModule(prog, module, major_version) abort
|
||||||
let prog_path = exepath(a:prog)
|
let prog_path = exepath(a:prog)
|
||||||
if prog_path ==# ''
|
if prog_path ==# ''
|
||||||
return [0, a:prog . ' not found in search path or not executable.']
|
return [0, a:prog . ' not found in search path or not executable.']
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let min_version = (a:major_ver == 2) ? '2.6' : '3.3'
|
let min_version = (a:major_version == 2) ? '2.6' : '3.3'
|
||||||
|
|
||||||
" Try to load neovim module, and output Python version.
|
" Try to load pynvim module, and output Python version.
|
||||||
" Return codes:
|
" Exit codes:
|
||||||
" 0 Neovim module can be loaded.
|
" 0 pynvim module can be loaded.
|
||||||
" 2 Neovim module cannot be loaded.
|
" 2 pynvim module cannot be loaded.
|
||||||
" Otherwise something else went wrong (e.g. 1 or 127).
|
" Otherwise something else went wrong (e.g. 1 or 127).
|
||||||
let prog_ver = system([ a:prog , '-c' ,
|
let [prog_exitcode, prog_version] = s:import_module(a:prog, 'pynvim')
|
||||||
\ 'import sys; ' .
|
|
||||||
\ 'sys.path.remove(""); ' .
|
|
||||||
\ 'sys.stdout.write(str(sys.version_info[0]) + "." + str(sys.version_info[1])); ' .
|
|
||||||
\ 'import pkgutil; ' .
|
|
||||||
\ 'exit(2*int(pkgutil.get_loader("neovim") is None))'
|
|
||||||
\ ])
|
|
||||||
|
|
||||||
if v:shell_error == 2 || v:shell_error == 0
|
if prog_exitcode == 2 || prog_exitcode == 0
|
||||||
" Check version only for expected return codes.
|
" Check version only for expected return codes.
|
||||||
if prog_ver !~ '^' . a:major_ver
|
if prog_version !~ '^' . a:major_version
|
||||||
return [0, prog_path . ' is Python ' . prog_ver . ' and cannot provide Python '
|
return [0, prog_path . ' is Python ' . prog_version . ' and cannot provide Python '
|
||||||
\ . a:major_ver . '.']
|
\ . a:major_version . '.']
|
||||||
elseif prog_ver =~ '^' . a:major_ver && prog_ver < min_version
|
elseif prog_version =~ '^' . a:major_version && prog_version < min_version
|
||||||
return [0, prog_path . ' is Python ' . prog_ver . ' and cannot provide Python >= '
|
return [0, prog_path . ' is Python ' . prog_version . ' and cannot provide Python >= '
|
||||||
\ . min_version . '.']
|
\ . min_version . '.']
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if v:shell_error == 2
|
if prog_exitcode == 2
|
||||||
return [0, prog_path.' does not have the "neovim" module. :help provider-python']
|
return [0, prog_path.' does not have the "pynvim" module. :help provider-python']
|
||||||
elseif v:shell_error == 127
|
elseif prog_exitcode == 127
|
||||||
" This can happen with pyenv's shims.
|
" This can happen with pyenv's shims.
|
||||||
return [0, prog_path . ' does not exist: ' . prog_ver]
|
return [0, prog_path . ' does not exist: ' . prog_version]
|
||||||
elseif v:shell_error
|
elseif prog_exitcode
|
||||||
return [0, 'Checking ' . prog_path . ' caused an unknown error. '
|
return [0, 'Checking ' . prog_path . ' caused an unknown error. '
|
||||||
\ . '(' . v:shell_error . ', output: ' . prog_ver . ')'
|
\ . '(' . prog_exitcode . ', output: ' . prog_version . ')'
|
||||||
\ . ' Report this at https://github.com/neovim/neovim']
|
\ . ' Report this at https://github.com/neovim/neovim']
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -5,11 +5,7 @@ endif
|
|||||||
let g:loaded_ruby_provider = 1
|
let g:loaded_ruby_provider = 1
|
||||||
|
|
||||||
function! provider#ruby#Detect() abort
|
function! provider#ruby#Detect() abort
|
||||||
if exists("g:ruby_host_prog")
|
return s:prog
|
||||||
return g:ruby_host_prog
|
|
||||||
else
|
|
||||||
return has('win32') ? exepath('neovim-ruby-host.bat') : exepath('neovim-ruby-host')
|
|
||||||
end
|
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! provider#ruby#Prog() abort
|
function! provider#ruby#Prog() abort
|
||||||
@ -47,8 +43,24 @@ function! provider#ruby#Call(method, args) abort
|
|||||||
return call('rpcrequest', insert(insert(a:args, 'ruby_'.a:method), s:host))
|
return call('rpcrequest', insert(insert(a:args, 'ruby_'.a:method), s:host))
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
|
function! s:detect()
|
||||||
|
if exists("g:ruby_host_prog")
|
||||||
|
return expand(g:ruby_host_prog)
|
||||||
|
elseif has('win32')
|
||||||
|
return exepath('neovim-ruby-host.bat')
|
||||||
|
else
|
||||||
|
let p = exepath('neovim-ruby-host')
|
||||||
|
if empty(p)
|
||||||
|
return ''
|
||||||
|
endif
|
||||||
|
" neovim-ruby-host could be an rbenv shim for another Ruby version.
|
||||||
|
call system(p)
|
||||||
|
return v:shell_error ? '' : p
|
||||||
|
end
|
||||||
|
endfunction
|
||||||
|
|
||||||
let s:err = ''
|
let s:err = ''
|
||||||
let s:prog = provider#ruby#Detect()
|
let s:prog = s:detect()
|
||||||
let s:plugin_path = expand('<sfile>:p:h') . '/script_host.rb'
|
let s:plugin_path = expand('<sfile>:p:h') . '/script_host.rb'
|
||||||
|
|
||||||
if empty(s:prog)
|
if empty(s:prog)
|
||||||
|
@ -114,7 +114,7 @@ function! s:RegistrationCommands(host) abort
|
|||||||
let host_id = a:host.'-registration-clone'
|
let host_id = a:host.'-registration-clone'
|
||||||
call remote#host#RegisterClone(host_id, a:host)
|
call remote#host#RegisterClone(host_id, a:host)
|
||||||
let pattern = s:plugin_patterns[a:host]
|
let pattern = s:plugin_patterns[a:host]
|
||||||
let paths = globpath(&rtp, 'rplugin/'.a:host.'/'.pattern, 0, 1)
|
let paths = globpath(&rtp, 'rplugin/'.a:host.'/'.pattern, 1, 1)
|
||||||
let paths = map(paths, 'tr(resolve(v:val),"\\","/")') " Normalize slashes #4795
|
let paths = map(paths, 'tr(resolve(v:val),"\\","/")') " Normalize slashes #4795
|
||||||
let paths = uniq(sort(paths))
|
let paths = uniq(sort(paths))
|
||||||
if empty(paths)
|
if empty(paths)
|
||||||
|
@ -20,6 +20,7 @@ function! spellfile#LoadFile(lang)
|
|||||||
endif
|
endif
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
|
let lang = tolower(a:lang)
|
||||||
|
|
||||||
" If the URL changes we try all files again.
|
" If the URL changes we try all files again.
|
||||||
if s:spellfile_URL != g:spellfile_URL
|
if s:spellfile_URL != g:spellfile_URL
|
||||||
@ -28,13 +29,13 @@ function! spellfile#LoadFile(lang)
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
" I will say this only once!
|
" I will say this only once!
|
||||||
if has_key(s:donedict, a:lang . &enc)
|
if has_key(s:donedict, lang . &enc)
|
||||||
if &verbose
|
if &verbose
|
||||||
echomsg 'spellfile#LoadFile(): Tried this language/encoding before.'
|
echomsg 'spellfile#LoadFile(): Tried this language/encoding before.'
|
||||||
endif
|
endif
|
||||||
return
|
return
|
||||||
endif
|
endif
|
||||||
let s:donedict[a:lang . &enc] = 1
|
let s:donedict[lang . &enc] = 1
|
||||||
|
|
||||||
" Find spell directories we can write in.
|
" Find spell directories we can write in.
|
||||||
let [dirlist, dirchoices] = spellfile#GetDirChoices()
|
let [dirlist, dirchoices] = spellfile#GetDirChoices()
|
||||||
@ -94,7 +95,7 @@ function! spellfile#LoadFile(lang)
|
|||||||
let newbufnr = winbufnr(0)
|
let newbufnr = winbufnr(0)
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let fname = a:lang . '.ascii.spl'
|
let fname = lang . '.ascii.spl'
|
||||||
echo 'Could not find it, trying ' . fname . '...'
|
echo 'Could not find it, trying ' . fname . '...'
|
||||||
call spellfile#Nread(fname)
|
call spellfile#Nread(fname)
|
||||||
if getline(2) !~ 'VIMspell'
|
if getline(2) !~ 'VIMspell'
|
||||||
|
@ -152,10 +152,12 @@ fun! tar#Browse(tarfile)
|
|||||||
" assuming cygwin
|
" assuming cygwin
|
||||||
let tarfile=substitute(system("cygpath -u ".shellescape(tarfile,0)),'\n$','','e')
|
let tarfile=substitute(system("cygpath -u ".shellescape(tarfile,0)),'\n$','','e')
|
||||||
endif
|
endif
|
||||||
|
|
||||||
let curlast= line("$")
|
let curlast= line("$")
|
||||||
if tarfile =~# '\.\(gz\|tgz\)$'
|
if tarfile =~# '\.\(gz\|tgz\)$'
|
||||||
|
let gzip_command = s:get_gzip_command(tarfile)
|
||||||
" call Decho("1: exe silent r! gzip -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - ")
|
" call Decho("1: exe silent r! gzip -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - ")
|
||||||
exe "sil! r! gzip -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
|
exe "sil! r! " . gzip_command . " -d -c -- ".shellescape(tarfile,1)." | ".g:tar_cmd." -".g:tar_browseoptions." - "
|
||||||
elseif tarfile =~# '\.lrp'
|
elseif tarfile =~# '\.lrp'
|
||||||
" call Decho("2: exe silent r! cat -- ".shellescape(tarfile,1)."|gzip -d -c -|".g:tar_cmd." -".g:tar_browseoptions." - ")
|
" call Decho("2: exe silent r! cat -- ".shellescape(tarfile,1)."|gzip -d -c -|".g:tar_cmd." -".g:tar_browseoptions." - ")
|
||||||
exe "sil! r! cat -- ".shellescape(tarfile,1)."|gzip -d -c -|".g:tar_cmd." -".g:tar_browseoptions." - "
|
exe "sil! r! cat -- ".shellescape(tarfile,1)."|gzip -d -c -|".g:tar_cmd." -".g:tar_browseoptions." - "
|
||||||
@ -287,12 +289,14 @@ fun! tar#Read(fname,mode)
|
|||||||
else
|
else
|
||||||
let tar_secure= " "
|
let tar_secure= " "
|
||||||
endif
|
endif
|
||||||
|
|
||||||
if tarfile =~# '\.bz2$'
|
if tarfile =~# '\.bz2$'
|
||||||
" call Decho("7: exe silent r! bzip2 -d -c ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp)
|
" call Decho("7: exe silent r! bzip2 -d -c ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp)
|
||||||
exe "sil! r! bzip2 -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
|
exe "sil! r! bzip2 -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
|
||||||
elseif tarfile =~# '\.\(gz\|tgz\)$'
|
elseif tarfile =~# '\.\(gz\|tgz\)$'
|
||||||
|
let gzip_command = s:get_gzip_command(tarfile)
|
||||||
" call Decho("5: exe silent r! gzip -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd.' -'.g:tar_readoptions.' - '.tar_secure.shellescape(fname,1))
|
" call Decho("5: exe silent r! gzip -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd.' -'.g:tar_readoptions.' - '.tar_secure.shellescape(fname,1))
|
||||||
exe "sil! r! gzip -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
|
exe "sil! r! " . gzip_command . " -d -c -- ".shellescape(tarfile,1)."| ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
|
||||||
elseif tarfile =~# '\.lrp$'
|
elseif tarfile =~# '\.lrp$'
|
||||||
" call Decho("6: exe silent r! cat ".shellescape(tarfile,1)." | gzip -d -c - | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp)
|
" call Decho("6: exe silent r! cat ".shellescape(tarfile,1)." | gzip -d -c - | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp)
|
||||||
exe "sil! r! cat -- ".shellescape(tarfile,1)." | gzip -d -c - | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
|
exe "sil! r! cat -- ".shellescape(tarfile,1)." | gzip -d -c - | ".g:tar_cmd." -".g:tar_readoptions." - ".tar_secure.shellescape(fname,1).decmp
|
||||||
@ -389,6 +393,8 @@ fun! tar#Write(fname)
|
|||||||
let tarfile = substitute(b:tarfile,'tarfile:\(.\{-}\)::.*$','\1','')
|
let tarfile = substitute(b:tarfile,'tarfile:\(.\{-}\)::.*$','\1','')
|
||||||
let fname = substitute(b:tarfile,'tarfile:.\{-}::\(.*\)$','\1','')
|
let fname = substitute(b:tarfile,'tarfile:.\{-}::\(.*\)$','\1','')
|
||||||
|
|
||||||
|
let gzip_command = s:get_gzip_command(tarfile)
|
||||||
|
|
||||||
" handle compressed archives
|
" handle compressed archives
|
||||||
if tarfile =~# '\.bz2'
|
if tarfile =~# '\.bz2'
|
||||||
call system("bzip2 -d -- ".shellescape(tarfile,0))
|
call system("bzip2 -d -- ".shellescape(tarfile,0))
|
||||||
@ -396,12 +402,12 @@ fun! tar#Write(fname)
|
|||||||
let compress= "bzip2 -- ".shellescape(tarfile,0)
|
let compress= "bzip2 -- ".shellescape(tarfile,0)
|
||||||
" call Decho("compress<".compress.">")
|
" call Decho("compress<".compress.">")
|
||||||
elseif tarfile =~# '\.gz'
|
elseif tarfile =~# '\.gz'
|
||||||
call system("gzip -d -- ".shellescape(tarfile,0))
|
call system(gzip_command . " -d -- ".shellescape(tarfile,0))
|
||||||
let tarfile = substitute(tarfile,'\.gz','','e')
|
let tarfile = substitute(tarfile,'\.gz','','e')
|
||||||
let compress= "gzip -- ".shellescape(tarfile,0)
|
let compress= "gzip -- ".shellescape(tarfile,0)
|
||||||
" call Decho("compress<".compress.">")
|
" call Decho("compress<".compress.">")
|
||||||
elseif tarfile =~# '\.tgz'
|
elseif tarfile =~# '\.tgz'
|
||||||
call system("gzip -d -- ".shellescape(tarfile,0))
|
call system(gzip_command . " -d -- ".shellescape(tarfile,0))
|
||||||
let tarfile = substitute(tarfile,'\.tgz','.tar','e')
|
let tarfile = substitute(tarfile,'\.tgz','.tar','e')
|
||||||
let compress= "gzip -- ".shellescape(tarfile,0)
|
let compress= "gzip -- ".shellescape(tarfile,0)
|
||||||
let tgz = 1
|
let tgz = 1
|
||||||
@ -581,7 +587,10 @@ fun! tar#Vimuntar(...)
|
|||||||
|
|
||||||
" if necessary, decompress the tarball; then, extract it
|
" if necessary, decompress the tarball; then, extract it
|
||||||
if tartail =~ '\.tgz'
|
if tartail =~ '\.tgz'
|
||||||
if executable("gunzip")
|
let gzip_command = s:get_gzip_command(tarfile)
|
||||||
|
if executable(gzip_command)
|
||||||
|
silent exe "!" . gzip_command . " -d ".shellescape(tartail)
|
||||||
|
elseif executable("gunzip")
|
||||||
silent exe "!gunzip ".shellescape(tartail)
|
silent exe "!gunzip ".shellescape(tartail)
|
||||||
elseif executable("gzip")
|
elseif executable("gzip")
|
||||||
silent exe "!gzip -d ".shellescape(tartail)
|
silent exe "!gzip -d ".shellescape(tartail)
|
||||||
@ -619,6 +628,28 @@ fun! tar#Vimuntar(...)
|
|||||||
" call Dret("tar#Vimuntar")
|
" call Dret("tar#Vimuntar")
|
||||||
endfun
|
endfun
|
||||||
|
|
||||||
|
func s:get_gzip_command(file)
|
||||||
|
" Try using the "file" command to get the actual compression type, since
|
||||||
|
" there is no standard way for the naming: ".tgz", ".tbz", ".txz", etc.
|
||||||
|
" If the "file" command doesn't work fall back to just using the file name.
|
||||||
|
if a:file =~# 'z$'
|
||||||
|
let filetype = system('file ' . a:file)
|
||||||
|
if filetype =~ 'bzip2 compressed' && executable('bzip2')
|
||||||
|
return 'bzip2'
|
||||||
|
endif
|
||||||
|
if filetype =~ 'XZ compressed' && executable('xz')
|
||||||
|
return 'xz'
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
if a:file =~# 'bz2$'
|
||||||
|
return 'bzip2'
|
||||||
|
endif
|
||||||
|
if a:file =~# 'xz$'
|
||||||
|
return 'xz'
|
||||||
|
endif
|
||||||
|
return 'gzip'
|
||||||
|
endfunc
|
||||||
|
|
||||||
" =====================================================================
|
" =====================================================================
|
||||||
" Modelines And Restoration: {{{1
|
" Modelines And Restoration: {{{1
|
||||||
let &cpo= s:keepcpo
|
let &cpo= s:keepcpo
|
||||||
|
@ -77,15 +77,6 @@ function! tutor#TutorFolds()
|
|||||||
endif
|
endif
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
function! tutor#InfoText()
|
|
||||||
let l:info_parts = []
|
|
||||||
if exists('b:tutor_infofunc')
|
|
||||||
call add(l:info_parts, eval(b:tutor_infofunc.'()'))
|
|
||||||
endif
|
|
||||||
return join(l:info_parts, " ")
|
|
||||||
endfunction
|
|
||||||
|
|
||||||
|
|
||||||
" Marks: {{{1
|
" Marks: {{{1
|
||||||
|
|
||||||
function! tutor#ApplyMarks()
|
function! tutor#ApplyMarks()
|
||||||
|
111
runtime/autoload/xmlformat.vim
Normal file
111
runtime/autoload/xmlformat.vim
Normal file
@ -0,0 +1,111 @@
|
|||||||
|
" Vim plugin for formatting XML
|
||||||
|
" Last Change: Thu, 22 May 2018 21:26:55 +0100
|
||||||
|
" Version: 0.1
|
||||||
|
" Author: Christian Brabandt <cb@256bit.org>
|
||||||
|
" Repository: https://github.com/chrisbra/vim-xml-ftplugin
|
||||||
|
" License: VIM License
|
||||||
|
" Documentation: see :h xmlformat.txt (TODO!)
|
||||||
|
" ---------------------------------------------------------------------
|
||||||
|
" Load Once: {{{1
|
||||||
|
if exists("g:loaded_xmlformat") || &cp
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let g:loaded_xmlformat = 1
|
||||||
|
let s:keepcpo = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
" Main function: Format the input {{{1
|
||||||
|
func! xmlformat#Format()
|
||||||
|
" only allow reformatting through the gq command
|
||||||
|
" (e.g. Vim is in normal mode)
|
||||||
|
if mode() != 'n'
|
||||||
|
" do not fall back to internal formatting
|
||||||
|
return 0
|
||||||
|
endif
|
||||||
|
let sw = shiftwidth()
|
||||||
|
let prev = prevnonblank(v:lnum-1)
|
||||||
|
let s:indent = indent(prev)/sw
|
||||||
|
let result = []
|
||||||
|
let lastitem = prev ? getline(prev) : ''
|
||||||
|
let is_xml_decl = 0
|
||||||
|
" split on `<`, but don't split on very first opening <
|
||||||
|
for item in split(join(getline(v:lnum, (v:lnum + v:count - 1))), '.\@<=[>]\zs')
|
||||||
|
if s:EndTag(item)
|
||||||
|
let s:indent = s:DecreaseIndent()
|
||||||
|
call add(result, s:Indent(item))
|
||||||
|
elseif s:EmptyTag(lastitem)
|
||||||
|
call add(result, s:Indent(item))
|
||||||
|
elseif s:StartTag(lastitem) && s:IsTag(item)
|
||||||
|
let s:indent += 1
|
||||||
|
call add(result, s:Indent(item))
|
||||||
|
else
|
||||||
|
if !s:IsTag(item)
|
||||||
|
" Simply split on '<'
|
||||||
|
let t=split(item, '.<\@=\zs')
|
||||||
|
let s:indent+=1
|
||||||
|
call add(result, s:Indent(t[0]))
|
||||||
|
let s:indent = s:DecreaseIndent()
|
||||||
|
call add(result, s:Indent(t[1]))
|
||||||
|
else
|
||||||
|
call add(result, s:Indent(item))
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
let lastitem = item
|
||||||
|
endfor
|
||||||
|
|
||||||
|
if !empty(result)
|
||||||
|
exe v:lnum. ",". (v:lnum + v:count - 1). 'd'
|
||||||
|
call append(v:lnum - 1, result)
|
||||||
|
" Might need to remove the last line, if it became empty because of the
|
||||||
|
" append() call
|
||||||
|
let last = v:lnum + len(result)
|
||||||
|
if getline(last) is ''
|
||||||
|
exe last. 'd'
|
||||||
|
endif
|
||||||
|
endif
|
||||||
|
|
||||||
|
" do not run internal formatter!
|
||||||
|
return 0
|
||||||
|
endfunc
|
||||||
|
" Check if given tag is XML Declaration header {{{1
|
||||||
|
func! s:IsXMLDecl(tag)
|
||||||
|
return a:tag =~? '^\s*<?xml\s\?\%(version="[^"]*"\)\?\s\?\%(encoding="[^"]*"\)\? ?>\s*$'
|
||||||
|
endfunc
|
||||||
|
" Return tag indented by current level {{{1
|
||||||
|
func! s:Indent(item)
|
||||||
|
return repeat(' ', shiftwidth()*s:indent). s:Trim(a:item)
|
||||||
|
endfu
|
||||||
|
" Return item trimmed from leading whitespace {{{1
|
||||||
|
func! s:Trim(item)
|
||||||
|
if exists('*trim')
|
||||||
|
return trim(a:item)
|
||||||
|
else
|
||||||
|
return matchstr(a:item, '\S\+.*')
|
||||||
|
endif
|
||||||
|
endfunc
|
||||||
|
" Check if tag is a new opening tag <tag> {{{1
|
||||||
|
func! s:StartTag(tag)
|
||||||
|
return a:tag =~? '^\s*<[^/?]'
|
||||||
|
endfunc
|
||||||
|
" Remove one level of indentation {{{1
|
||||||
|
func! s:DecreaseIndent()
|
||||||
|
return (s:indent > 0 ? s:indent - 1 : 0)
|
||||||
|
endfunc
|
||||||
|
" Check if tag is a closing tag </tag> {{{1
|
||||||
|
func! s:EndTag(tag)
|
||||||
|
return a:tag =~? '^\s*</'
|
||||||
|
endfunc
|
||||||
|
" Check that the tag is actually a tag and not {{{1
|
||||||
|
" something like "foobar</foobar>"
|
||||||
|
func! s:IsTag(tag)
|
||||||
|
return s:Trim(a:tag)[0] == '<'
|
||||||
|
endfunc
|
||||||
|
" Check if tag is empty <tag/> {{{1
|
||||||
|
func! s:EmptyTag(tag)
|
||||||
|
return a:tag =~ '/>\s*$'
|
||||||
|
endfunc
|
||||||
|
" Restoration And Modelines: {{{1
|
||||||
|
let &cpo= s:keepcpo
|
||||||
|
unlet s:keepcpo
|
||||||
|
" Modeline {{{1
|
||||||
|
" vim: fdm=marker fdl=0 ts=2 et sw=0 sts=-1
|
@ -42,7 +42,16 @@ this autocmd might be useful:
|
|||||||
Replace "blue_sky" with the name of the colorscheme.
|
Replace "blue_sky" with the name of the colorscheme.
|
||||||
|
|
||||||
In case you want to tweak a colorscheme after it was loaded, check out the
|
In case you want to tweak a colorscheme after it was loaded, check out the
|
||||||
ColorScheme autocmd event.
|
ColorScheme autocommand event.
|
||||||
|
|
||||||
|
To clean up just before loading another colorscheme, use the ColorSchemePre
|
||||||
|
autocommand event. For example:
|
||||||
|
let g:term_ansi_colors = ...
|
||||||
|
augroup MyColorscheme
|
||||||
|
au!
|
||||||
|
au ColorSchemePre * unlet g:term_ansi_colors
|
||||||
|
au ColorSchemePre * au! MyColorscheme
|
||||||
|
augroup END
|
||||||
|
|
||||||
To customize a colorscheme use another name, e.g. "~/.vim/colors/mine.vim",
|
To customize a colorscheme use another name, e.g. "~/.vim/colors/mine.vim",
|
||||||
and use `:runtime` to load the original colorscheme:
|
and use `:runtime` to load the original colorscheme:
|
||||||
@ -64,6 +73,7 @@ Search for "highlight_init".
|
|||||||
If you think you have a color scheme that is good enough to be used by others,
|
If you think you have a color scheme that is good enough to be used by others,
|
||||||
please check the following items:
|
please check the following items:
|
||||||
|
|
||||||
|
- Source the $VIMRUNTIME/tools/check_colors.vim script to check for common mistakes.
|
||||||
- Does it work in a color terminal as well as in the GUI?
|
- Does it work in a color terminal as well as in the GUI?
|
||||||
- Is "g:colors_name" set to a meaningful value? In case of doubt you can do
|
- Is "g:colors_name" set to a meaningful value? In case of doubt you can do
|
||||||
it this way:
|
it this way:
|
||||||
|
37
runtime/compiler/stack.vim
Normal file
37
runtime/compiler/stack.vim
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
" Vim compiler file
|
||||||
|
" Compiler: Haskell Stack
|
||||||
|
" Maintainer: Daniel Campoverde <alx@sillybytes.net>
|
||||||
|
" Latest Revision: 2018-08-27
|
||||||
|
|
||||||
|
if exists("current_compiler")
|
||||||
|
finish
|
||||||
|
endif
|
||||||
|
let current_compiler = "stack"
|
||||||
|
|
||||||
|
let s:cpo_save = &cpo
|
||||||
|
set cpo&vim
|
||||||
|
|
||||||
|
|
||||||
|
CompilerSet errorformat=
|
||||||
|
\%-G%.%#:\ build\ %.%#,
|
||||||
|
\%-G%.%#:\ configure\ %.%#,
|
||||||
|
\%-G[%.%#]%.%#,
|
||||||
|
\%-G%.%#preprocessing\ %.%#,
|
||||||
|
\%-G%.%#configuring\ %.%#,
|
||||||
|
\%-G%.%#building\ %.%#,
|
||||||
|
\%-G%.%#linking\ %.%#,
|
||||||
|
\%-G%.%#installing\ %.%#,
|
||||||
|
\%-G%.%#registering\ %.%#,
|
||||||
|
\%-G%.%#:\ copy/register%.%#,
|
||||||
|
\%-G%.%#process\ exited\ %.%#,
|
||||||
|
\%-G%.%#--builddir=%.%#,
|
||||||
|
\%-G--%.%#,
|
||||||
|
\%-G%.%#\|%.%#,
|
||||||
|
\%E%f:%l:%c:\ error:,%+Z\ \ \ \ %m,
|
||||||
|
\%E%f:%l:%c:\ error:\ %m,%-Z,
|
||||||
|
\%W%f:%l:%c:\ warning:,%+Z\ \ \ \ %m,
|
||||||
|
\%W%f:%l:%c:\ warning:\ %m,%-Z,
|
||||||
|
|
||||||
|
|
||||||
|
let &cpo = s:cpo_save
|
||||||
|
unlet s:cpo_save
|
@ -13,7 +13,7 @@ HTMLS = $(DOCS:.txt=.html)
|
|||||||
.SUFFIXES: .c .o .txt .html
|
.SUFFIXES: .c .o .txt .html
|
||||||
|
|
||||||
# Awk version of .txt to .html conversion.
|
# Awk version of .txt to .html conversion.
|
||||||
html: noerrors $(HTMLS)
|
html: noerrors vimindex.html $(HTMLS)
|
||||||
@if test -f errors.log; then cat errors.log; fi
|
@if test -f errors.log; then cat errors.log; fi
|
||||||
|
|
||||||
noerrors:
|
noerrors:
|
||||||
|
@ -79,13 +79,26 @@ As Nvim evolves the API may change in compliance with this 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
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
Global events *api-global-events*
|
||||||
|
|
||||||
|
When a client invokes an API request as an async notification, it is not
|
||||||
|
possible for Nvim to send an error response. Instead, in case of error, the
|
||||||
|
following notification will be sent to the client:
|
||||||
|
|
||||||
|
*nvim_error_event*
|
||||||
|
nvim_error_event[{type}, {message}]
|
||||||
|
|
||||||
|
{type} is a numeric id as defined by `api_info().error_types`, and {message} is
|
||||||
|
a string with the error message.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
Buffer update events *api-buffer-updates*
|
Buffer update events *api-buffer-updates*
|
||||||
|
|
||||||
API clients can "attach" to Nvim buffers to subscribe to buffer update events.
|
API clients can "attach" to Nvim buffers to subscribe to buffer update events.
|
||||||
This is similar to |TextChanged| but more powerful and granular.
|
This is similar to |TextChanged| but more powerful and granular.
|
||||||
|
|
||||||
Call |nvim_buf_attach| to receive these events on the channel:
|
Call |nvim_buf_attach()| to receive these events on the channel:
|
||||||
|
|
||||||
*nvim_buf_lines_event*
|
*nvim_buf_lines_event*
|
||||||
nvim_buf_lines_event[{buf}, {changedtick}, {firstline}, {lastline}, {linedata}, {more}]
|
nvim_buf_lines_event[{buf}, {changedtick}, {firstline}, {lastline}, {linedata}, {more}]
|
||||||
@ -97,7 +110,7 @@ nvim_buf_lines_event[{buf}, {changedtick}, {firstline}, {lastline}, {linedata},
|
|||||||
|
|
||||||
When {changedtick} is |v:null| this means the screen lines (display) changed
|
When {changedtick} is |v:null| this means the screen lines (display) changed
|
||||||
but not the buffer contents. {linedata} contains the changed screen lines.
|
but not the buffer contents. {linedata} contains the changed screen lines.
|
||||||
This happens when |inccommand| shows a buffer preview.
|
This happens when 'inccommand' shows a buffer preview.
|
||||||
|
|
||||||
Properties:~
|
Properties:~
|
||||||
{buf} API buffer handle (buffer number)
|
{buf} API buffer handle (buffer number)
|
||||||
@ -138,7 +151,7 @@ nvim_buf_changedtick_event[{buf}, {changedtick}] *nvim_buf_changedtick_event*
|
|||||||
nvim_buf_detach_event[{buf}] *nvim_buf_detach_event*
|
nvim_buf_detach_event[{buf}] *nvim_buf_detach_event*
|
||||||
|
|
||||||
When buffer is detached (i.e. updates are disabled). Triggered explicitly by
|
When buffer is detached (i.e. updates are disabled). Triggered explicitly by
|
||||||
|nvim_buf_detach| or implicitly in these cases:
|
|nvim_buf_detach()| or implicitly in these cases:
|
||||||
- Buffer was |abandon|ed and 'hidden' is not set.
|
- Buffer was |abandon|ed and 'hidden' is not set.
|
||||||
- Buffer was reloaded, e.g. with |:edit| or an external change triggered
|
- Buffer was reloaded, e.g. with |:edit| or an external change triggered
|
||||||
|:checktime| or 'autoread'.
|
|:checktime| or 'autoread'.
|
||||||
@ -150,7 +163,7 @@ nvim_buf_detach_event[{buf}] *nvim_buf_detach_event*
|
|||||||
|
|
||||||
EXAMPLE ~
|
EXAMPLE ~
|
||||||
|
|
||||||
Calling |nvim_buf_attach| with send_buffer=true on an empty buffer, emits: >
|
Calling |nvim_buf_attach()| with send_buffer=true on an empty buffer, emits: >
|
||||||
nvim_buf_lines_event[{buf}, {changedtick}, 0, 0, [""], v:false]
|
nvim_buf_lines_event[{buf}, {changedtick}, 0, 0, [""], v:false]
|
||||||
|
|
||||||
User adds two lines to the buffer, emits: >
|
User adds two lines to the buffer, emits: >
|
||||||
@ -189,12 +202,11 @@ Another use case are plugins that show output in an append-only buffer, and
|
|||||||
want to add highlights to the outputs. Highlight data cannot be preserved
|
want to add highlights to the outputs. Highlight data cannot be preserved
|
||||||
on writing and loading a buffer to file, nor in undo/redo cycles.
|
on writing and loading a buffer to file, nor in undo/redo cycles.
|
||||||
|
|
||||||
Highlights are registered using the |nvim_buf_add_highlight| function, see the
|
Highlights are registered using the |nvim_buf_add_highlight()| function. If an
|
||||||
generated API documentation for details. If an external highlighter plugin is
|
external highlighter plugin wants to add many highlights in a batch,
|
||||||
adding a large number of highlights in a batch, performance can be improved by
|
performance can be improved by calling |nvim_buf_add_highlight()| as an
|
||||||
calling |nvim_buf_add_highlight| as an asynchronous notification, after first
|
asynchronous notification, after first (synchronously) reqesting a source id.
|
||||||
(synchronously) reqesting a source id. Here is an example using wrapper
|
Example using the Nvim python-client:
|
||||||
functions in the python client:
|
|
||||||
>
|
>
|
||||||
src = vim.new_highlight_source()
|
src = vim.new_highlight_source()
|
||||||
|
|
||||||
@ -207,10 +219,10 @@ functions in the python client:
|
|||||||
buf.clear_highlight(src)
|
buf.clear_highlight(src)
|
||||||
<
|
<
|
||||||
If the highlights don't need to be deleted or updated, just pass -1 as
|
If the highlights don't need to be deleted or updated, just pass -1 as
|
||||||
src_id (this is the default in python). |nvim_buf_clear_highlight| can be used
|
src_id (this is the default in python). Use |nvim_buf_clear_namespace()| to
|
||||||
to clear highlights from a specific source, in a specific line range or the
|
clear highlights from a specific source, in a specific line range or the
|
||||||
entire buffer by passing in the line range 0, -1 (the latter is the default
|
entire buffer by passing in the line range 0, -1 (the latter is the default in
|
||||||
in python as used above).
|
python as used above).
|
||||||
|
|
||||||
An example of calling the api from vimscript: >
|
An example of calling the api from vimscript: >
|
||||||
|
|
||||||
@ -219,7 +231,7 @@ An example of calling the api from vimscript: >
|
|||||||
call nvim_buf_add_highlight(0, src, "Identifier", 0, 5, -1)
|
call nvim_buf_add_highlight(0, src, "Identifier", 0, 5, -1)
|
||||||
|
|
||||||
" later
|
" later
|
||||||
call nvim_buf_clear_highlight(0, src, 0, -1)
|
call nvim_buf_clear_namespace(0, src, 0, -1)
|
||||||
>
|
>
|
||||||
==============================================================================
|
==============================================================================
|
||||||
Global Functions *api-global*
|
Global Functions *api-global*
|
||||||
@ -479,6 +491,9 @@ nvim_err_writeln({str}) *nvim_err_writeln()*
|
|||||||
nvim_list_bufs() *nvim_list_bufs()*
|
nvim_list_bufs() *nvim_list_bufs()*
|
||||||
Gets the current list of buffer handles
|
Gets the current list of buffer handles
|
||||||
|
|
||||||
|
Includes unlisted (unloaded/deleted) buffers, like `:ls!`. Use
|
||||||
|
|nvim_buf_is_loaded()| to check if a buffer is loaded.
|
||||||
|
|
||||||
Return: ~
|
Return: ~
|
||||||
List of buffer handles
|
List of buffer handles
|
||||||
|
|
||||||
@ -530,6 +545,29 @@ nvim_set_current_tabpage({tabpage}) *nvim_set_current_tabpage()*
|
|||||||
Parameters: ~
|
Parameters: ~
|
||||||
{tabpage} Tabpage handle
|
{tabpage} Tabpage handle
|
||||||
|
|
||||||
|
nvim_create_namespace({name}) *nvim_create_namespace()*
|
||||||
|
Creates a new namespace, or gets an existing one
|
||||||
|
|
||||||
|
Namespaces are used for buffer highlights and virtual text,
|
||||||
|
see |nvim_buf_add_highlight()| and
|
||||||
|
|nvim_buf_set_virtual_text()|.
|
||||||
|
|
||||||
|
Namespaces can be named or anonymous. If `name` matches an
|
||||||
|
existing namespace, the associated id is returned. If `name`
|
||||||
|
is an empty string a new, anonymous namespace is created.
|
||||||
|
|
||||||
|
Parameters: ~
|
||||||
|
{name} Namespace name or empty string
|
||||||
|
|
||||||
|
Return: ~
|
||||||
|
Namespace id
|
||||||
|
|
||||||
|
nvim_get_namespaces() *nvim_get_namespaces()*
|
||||||
|
Gets existing, non-anonymous namespaces
|
||||||
|
|
||||||
|
Return: ~
|
||||||
|
dict that maps from names to namespace ids.
|
||||||
|
|
||||||
nvim_subscribe({event}) *nvim_subscribe()*
|
nvim_subscribe({event}) *nvim_subscribe()*
|
||||||
Subscribes to event broadcasts
|
Subscribes to event broadcasts
|
||||||
|
|
||||||
@ -639,7 +677,7 @@ nvim_set_client_info({name}, {version}, {type}, {methods},
|
|||||||
Clients might define their own keys, but the
|
Clients might define their own keys, but the
|
||||||
following are suggested: "website" Website
|
following are suggested: "website" Website
|
||||||
of client (for instance github repository)
|
of client (for instance github repository)
|
||||||
"license" Informal descripton of the
|
"license" Informal description of the
|
||||||
license, such as "Apache 2", "GPLv3" or
|
license, such as "Apache 2", "GPLv3" or
|
||||||
"MIT" "logo" URI or path to image,
|
"MIT" "logo" URI or path to image,
|
||||||
preferably small logo or icon. .png or .svg
|
preferably small logo or icon. .png or .svg
|
||||||
@ -655,14 +693,14 @@ nvim_get_chan_info({chan}) *nvim_get_chan_info()*
|
|||||||
stderr of this Nvim instance "socket" TCP/IP socket or
|
stderr of this Nvim instance "socket" TCP/IP socket or
|
||||||
named pipe "job" job with communication over its stdio
|
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)
|
"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()*
|
nvim_list_chans() *nvim_list_chans()*
|
||||||
Get information about all open channels.
|
Get information about all open channels.
|
||||||
|
|
||||||
Return: ~
|
Return: ~
|
||||||
Array of Dictionaries, each describing a channel with the
|
Array of Dictionaries, each describing a channel with the
|
||||||
format specified at |nvim_get_chan_info|.
|
format specified at |nvim_get_chan_info()|.
|
||||||
|
|
||||||
nvim_call_atomic({calls}) *nvim_call_atomic()*
|
nvim_call_atomic({calls}) *nvim_call_atomic()*
|
||||||
Calls many API methods atomically.
|
Calls many API methods atomically.
|
||||||
@ -836,10 +874,26 @@ nvim_get_proc({pid}) *nvim_get_proc()*
|
|||||||
Return: ~
|
Return: ~
|
||||||
Map of process properties, or NIL if process not found.
|
Map of process properties, or NIL if process not found.
|
||||||
|
|
||||||
|
nvim__inspect_cell({row}, {col}) *nvim__inspect_cell()*
|
||||||
|
TODO: Documentation
|
||||||
|
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
Buffer Functions *api-buffer*
|
Buffer Functions *api-buffer*
|
||||||
|
|
||||||
|
Unloaded Buffers:~
|
||||||
|
|
||||||
|
Buffers may be unloaded by the |:bunload| command or the
|
||||||
|
buffer's |'bufhidden'| option. When a buffer is unloaded its
|
||||||
|
file contents are freed from memory and vim cannot operate on
|
||||||
|
the buffer lines until it is reloaded (usually by opening the
|
||||||
|
buffer again in a new window). API methods such as
|
||||||
|
|nvim_buf_get_lines()| and |nvim_buf_line_count()| will be
|
||||||
|
affected.
|
||||||
|
|
||||||
|
You can use |nvim_buf_is_loaded()| or |nvim_buf_line_count()|
|
||||||
|
to check whether a buffer is loaded.
|
||||||
|
|
||||||
nvim_buf_line_count({buffer}) *nvim_buf_line_count()*
|
nvim_buf_line_count({buffer}) *nvim_buf_line_count()*
|
||||||
Gets the buffer line count
|
Gets the buffer line count
|
||||||
|
|
||||||
@ -847,7 +901,7 @@ nvim_buf_line_count({buffer}) *nvim_buf_line_count()*
|
|||||||
{buffer} Buffer handle
|
{buffer} Buffer handle
|
||||||
|
|
||||||
Return: ~
|
Return: ~
|
||||||
Line count
|
Line count, or 0 for unloaded buffer. |api-buffer|
|
||||||
|
|
||||||
nvim_buf_attach({buffer}, {send_buffer}, {opts}) *nvim_buf_attach()*
|
nvim_buf_attach({buffer}, {send_buffer}, {opts}) *nvim_buf_attach()*
|
||||||
Activate updates from this buffer to the current channel.
|
Activate updates from this buffer to the current channel.
|
||||||
@ -879,11 +933,11 @@ nvim_buf_detach({buffer}) *nvim_buf_detach()*
|
|||||||
|
|
||||||
*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
|
Gets a line-range from the buffer.
|
||||||
|
|
||||||
Indexing is zero-based, end-exclusive. Negative indices are
|
Indexing is zero-based, end-exclusive. Negative indices are
|
||||||
interpreted as length+1+index, i e -1 refers to the index past
|
interpreted as length+1+index: -1 refers to the index past the
|
||||||
the end. So to get the last element set start=-2 and end=-1.
|
end. So to get the last element use start=-2 and end=-1.
|
||||||
|
|
||||||
Out-of-bounds indices are clamped to the nearest valid value,
|
Out-of-bounds indices are clamped to the nearest valid value,
|
||||||
unless `strict_indexing` is set.
|
unless `strict_indexing` is set.
|
||||||
@ -896,20 +950,20 @@ nvim_buf_get_lines({buffer}, {start}, {end}, {strict_indexing})
|
|||||||
error.
|
error.
|
||||||
|
|
||||||
Return: ~
|
Return: ~
|
||||||
Array of lines
|
Array of lines, or empty array for unloaded buffer.
|
||||||
|
|
||||||
*nvim_buf_set_lines()*
|
*nvim_buf_set_lines()*
|
||||||
nvim_buf_set_lines({buffer}, {start}, {end}, {strict_indexing},
|
nvim_buf_set_lines({buffer}, {start}, {end}, {strict_indexing},
|
||||||
{replacement})
|
{replacement})
|
||||||
Replaces line range on the buffer
|
Sets (replaces) a line-range in the buffer.
|
||||||
|
|
||||||
Indexing is zero-based, end-exclusive. Negative indices are
|
Indexing is zero-based, end-exclusive. Negative indices are
|
||||||
interpreted as length+1+index, i e -1 refers to the index past
|
interpreted as length+1+index: -1 refers to the index past the
|
||||||
the end. So to change or delete the last element set start=-2
|
end. So to change or delete the last element use start=-2 and
|
||||||
and end=-1.
|
end=-1.
|
||||||
|
|
||||||
To insert lines at a given index, set both start and end to
|
To insert lines at a given index, set `start` and `end` to the
|
||||||
the same index. To delete a range of lines, set replacement to
|
same index. To delete a range of lines, set `replacement` to
|
||||||
an empty array.
|
an empty array.
|
||||||
|
|
||||||
Out-of-bounds indices are clamped to the nearest valid value,
|
Out-of-bounds indices are clamped to the nearest valid value,
|
||||||
@ -923,6 +977,25 @@ nvim_buf_set_lines({buffer}, {start}, {end}, {strict_indexing},
|
|||||||
error.
|
error.
|
||||||
{replacement} Array of lines to use as replacement
|
{replacement} Array of lines to use as replacement
|
||||||
|
|
||||||
|
nvim_buf_get_offset({buffer}, {index}) *nvim_buf_get_offset()*
|
||||||
|
Returns the byte offset for a line.
|
||||||
|
|
||||||
|
Line 1 (index=0) has offset 0. UTF-8 bytes are counted. EOL is
|
||||||
|
one byte. 'fileformat' and 'fileencoding' are ignored. The
|
||||||
|
line index just after the last line gives the total byte-count
|
||||||
|
of the buffer. A final EOL byte is counted if it would be
|
||||||
|
written, see 'eol'.
|
||||||
|
|
||||||
|
Unlike |line2byte()|, throws error for out-of-bounds indexing.
|
||||||
|
Returns -1 for unloaded buffer.
|
||||||
|
|
||||||
|
Parameters: ~
|
||||||
|
{buffer} Buffer handle
|
||||||
|
{index} Line index
|
||||||
|
|
||||||
|
Return: ~
|
||||||
|
Integer byte offset, or -1 for unloaded buffer.
|
||||||
|
|
||||||
nvim_buf_get_var({buffer}, {name}) *nvim_buf_get_var()*
|
nvim_buf_get_var({buffer}, {name}) *nvim_buf_get_var()*
|
||||||
Gets a buffer-scoped (b:) variable.
|
Gets a buffer-scoped (b:) variable.
|
||||||
|
|
||||||
@ -1013,14 +1086,28 @@ nvim_buf_set_name({buffer}, {name}) *nvim_buf_set_name()*
|
|||||||
{buffer} Buffer handle
|
{buffer} Buffer handle
|
||||||
{name} Buffer name
|
{name} Buffer name
|
||||||
|
|
||||||
nvim_buf_is_valid({buffer}) *nvim_buf_is_valid()*
|
nvim_buf_is_loaded({buffer}) *nvim_buf_is_loaded()*
|
||||||
Checks if a buffer is valid
|
Checks if a buffer is valid and loaded. See |api-buffer| for
|
||||||
|
more info about unloaded buffers.
|
||||||
|
|
||||||
Parameters: ~
|
Parameters: ~
|
||||||
{buffer} Buffer handle
|
{buffer} Buffer handle
|
||||||
|
|
||||||
Return: ~
|
Return: ~
|
||||||
true if the buffer is valid, false otherwise
|
true if the buffer is valid and loaded, false otherwise.
|
||||||
|
|
||||||
|
nvim_buf_is_valid({buffer}) *nvim_buf_is_valid()*
|
||||||
|
Checks if a buffer is valid.
|
||||||
|
|
||||||
|
Note:
|
||||||
|
Even if a buffer is valid it may have been unloaded. See
|
||||||
|
|api-buffer| for more info about unloaded buffers.
|
||||||
|
|
||||||
|
Parameters: ~
|
||||||
|
{buffer} Buffer handle
|
||||||
|
|
||||||
|
Return: ~
|
||||||
|
true if the buffer is valid, false otherwise.
|
||||||
|
|
||||||
nvim_buf_get_mark({buffer}, {name}) *nvim_buf_get_mark()*
|
nvim_buf_get_mark({buffer}, {name}) *nvim_buf_get_mark()*
|
||||||
Return a tuple (row,col) representing the position of the
|
Return a tuple (row,col) representing the position of the
|
||||||
@ -1034,35 +1121,36 @@ nvim_buf_get_mark({buffer}, {name}) *nvim_buf_get_mark()*
|
|||||||
(row, col) tuple
|
(row, col) tuple
|
||||||
|
|
||||||
*nvim_buf_add_highlight()*
|
*nvim_buf_add_highlight()*
|
||||||
nvim_buf_add_highlight({buffer}, {src_id}, {hl_group}, {line},
|
nvim_buf_add_highlight({buffer}, {ns_id}, {hl_group}, {line},
|
||||||
{col_start}, {col_end})
|
{col_start}, {col_end})
|
||||||
Adds a highlight to buffer.
|
Adds a highlight to buffer.
|
||||||
|
|
||||||
Useful for plugins that dynamically generate highlights to a
|
Useful for plugins that dynamically generate highlights to a
|
||||||
buffer (like a semantic highlighter or linter). The function
|
buffer (like a semantic highlighter or linter). The function
|
||||||
adds a single highlight to a buffer. Unlike matchaddpos()
|
adds a single highlight to a buffer. Unlike |matchaddpos()|
|
||||||
highlights follow changes to line numbering (as lines are
|
highlights follow changes to line numbering (as lines are
|
||||||
inserted/removed above the highlighted line), like signs and
|
inserted/removed above the highlighted line), like signs and
|
||||||
marks do.
|
marks do.
|
||||||
|
|
||||||
`src_id` is useful for batch deletion/updating of a set of
|
Namespaces are used for batch deletion/updating of a set of
|
||||||
highlights. When called with `src_id = 0`, an unique source id
|
highlights. To create a namespace, use |nvim_create_namespace|
|
||||||
is generated and returned. Successive calls can pass that
|
which returns a namespace id. Pass it in to this function as
|
||||||
`src_id` to associate new highlights with the same source
|
`ns_id` to add highlights to the namespace. All highlights in
|
||||||
group. All highlights in the same group can be cleared with
|
the same namespace can then be cleared with single call to
|
||||||
`nvim_buf_clear_highlight`. If the highlight never will be
|
|nvim_buf_clear_namespace|. If the highlight never will be
|
||||||
manually deleted, pass `src_id = -1`.
|
deleted by an API call, pass `ns_id = -1`.
|
||||||
|
|
||||||
If `hl_group` is the empty string no highlight is added, but a
|
As a shorthand, `ns_id = 0` can be used to create a new
|
||||||
new `src_id` is still returned. This is useful for an external
|
namespace for the highlight, the allocated id is then
|
||||||
plugin to synchrounously request an unique `src_id` at
|
returned. If `hl_group` is the empty string no highlight is
|
||||||
initialization, and later asynchronously add and clear
|
added, but a new `ns_id` is still returned. This is supported
|
||||||
highlights in response to buffer changes.
|
for backwards compatibility, new code should use
|
||||||
|
|nvim_create_namespace| to create a new empty namespace.
|
||||||
|
|
||||||
Parameters: ~
|
Parameters: ~
|
||||||
{buffer} Buffer handle
|
{buffer} Buffer handle
|
||||||
{src_id} Source group to use or 0 to use a new group,
|
{ns_id} namespace to use or -1 for ungrouped
|
||||||
or -1 for ungrouped highlight
|
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 (byte-indexed) column range to
|
{col_start} Start of (byte-indexed) column range to
|
||||||
@ -1071,23 +1159,61 @@ nvim_buf_add_highlight({buffer}, {src_id}, {hl_group}, {line},
|
|||||||
highlight, or -1 to highlight to end of line
|
highlight, or -1 to highlight to end of line
|
||||||
|
|
||||||
Return: ~
|
Return: ~
|
||||||
The src_id that was used
|
The ns_id that was used
|
||||||
|
|
||||||
*nvim_buf_clear_highlight()*
|
*nvim_buf_clear_namespace()*
|
||||||
nvim_buf_clear_highlight({buffer}, {src_id}, {line_start}, {line_end})
|
nvim_buf_clear_namespace({buffer}, {ns_id}, {line_start}, {line_end})
|
||||||
Clears highlights from a given source group and a range of
|
Clears namespaced objects, highlights and virtual text, from a
|
||||||
lines
|
line range
|
||||||
|
|
||||||
To clear a source group in the entire buffer, pass in 0 and -1
|
To clear the namespace 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: ~
|
||||||
{buffer} Buffer handle
|
{buffer} Buffer handle
|
||||||
{src_id} Highlight source group to clear, or -1 to
|
{ns_id} Namespace to clear, or -1 to clear all
|
||||||
clear all.
|
namespaces.
|
||||||
{line_start} Start of range of lines to clear
|
{line_start} Start of range of lines to clear
|
||||||
{line_end} End of range of lines to clear (exclusive)
|
{line_end} End of range of lines to clear (exclusive)
|
||||||
or -1 to clear to end of file.
|
or -1 to clear to end of buffer.
|
||||||
|
|
||||||
|
*nvim_buf_set_virtual_text()*
|
||||||
|
nvim_buf_set_virtual_text({buffer}, {ns_id}, {line}, {chunks}, {opts})
|
||||||
|
Set the virtual text (annotation) for a buffer line.
|
||||||
|
|
||||||
|
By default (and currently the only option) the text will be
|
||||||
|
placed after the buffer text. Virtual text will never cause
|
||||||
|
reflow, rather virtual text will be truncated at the end of
|
||||||
|
the screen line. The virtual text will begin one cell (|lcs-
|
||||||
|
eol| or space) after the ordinary text.
|
||||||
|
|
||||||
|
Namespaces are used to support batch deletion/updating of
|
||||||
|
virtual text. To create a namespace, use
|
||||||
|
|nvim_create_namespace|. Virtual text is cleared using
|
||||||
|
|nvim_buf_clear_namespace|. The same `ns_id` can be used for
|
||||||
|
both virtual text and highlights added by
|
||||||
|
|nvim_buf_add_highlight|, both can then be cleared with a
|
||||||
|
single call to |nvim_buf_clear_namespace|. If the virtual text
|
||||||
|
never will be cleared by an API call, pass `ns_id = -1`.
|
||||||
|
|
||||||
|
As a shorthand, `ns_id = 0` can be used to create a new
|
||||||
|
namespace for the virtual text, the allocated id is then
|
||||||
|
returned.
|
||||||
|
|
||||||
|
Parameters: ~
|
||||||
|
{buffer} Buffer handle
|
||||||
|
{ns_id} Namespace to use or 0 to create a namespace, or
|
||||||
|
-1 for a ungrouped annotation
|
||||||
|
{line} Line to annotate with virtual text (zero-
|
||||||
|
indexed)
|
||||||
|
{chunks} A list of [text, hl_group] arrays, each
|
||||||
|
representing a text chunk with specified
|
||||||
|
highlight. `hl_group` element can be omitted for
|
||||||
|
no highlight.
|
||||||
|
{opts} Optional parameters. Currently not used.
|
||||||
|
|
||||||
|
Return: ~
|
||||||
|
The ns_id that was used
|
||||||
|
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
@ -1102,6 +1228,13 @@ nvim_win_get_buf({window}) *nvim_win_get_buf()*
|
|||||||
Return: ~
|
Return: ~
|
||||||
Buffer handle
|
Buffer handle
|
||||||
|
|
||||||
|
nvim_win_set_buf({window}, {buffer}) *nvim_win_set_buf()*
|
||||||
|
Sets the current buffer in a window, without side-effects
|
||||||
|
|
||||||
|
Parameters: ~
|
||||||
|
{window} Window handle
|
||||||
|
{buffer} Buffer handle
|
||||||
|
|
||||||
nvim_win_get_cursor({window}) *nvim_win_get_cursor()*
|
nvim_win_get_cursor({window}) *nvim_win_get_cursor()*
|
||||||
Gets the cursor position in the window
|
Gets the cursor position in the window
|
||||||
|
|
||||||
|
@ -313,4 +313,4 @@ There is one known minor bug,
|
|||||||
|
|
||||||
No other bugs are known to exist.
|
No other bugs are known to exist.
|
||||||
|
|
||||||
vim:tw=78:ts=8:ft=help:norl:
|
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||||
|
|
||||||
|
|
||||||
Automatic commands *autocommand*
|
Automatic commands *autocmd* *autocommand*
|
||||||
|
|
||||||
For a basic explanation, see section |40.3| in the user manual.
|
For a basic explanation, see section |40.3| in the user manual.
|
||||||
|
|
||||||
@ -20,7 +20,7 @@ files matching *.c. You can also use autocommands to implement advanced
|
|||||||
features, such as editing compressed files (see |gzip-example|). The usual
|
features, such as editing compressed files (see |gzip-example|). The usual
|
||||||
place to put autocommands is in your vimrc file.
|
place to put autocommands is in your vimrc file.
|
||||||
|
|
||||||
*E203* *E204* *E143* *E855* *E937*
|
*E203* *E204* *E143* *E855* *E937* *E952*
|
||||||
WARNING: Using autocommands is very powerful, and may lead to unexpected side
|
WARNING: Using autocommands is very powerful, and may lead to unexpected side
|
||||||
effects. Be careful not to destroy your text.
|
effects. Be careful not to destroy your text.
|
||||||
- It's a good idea to do some testing on an expendable copy of a file first.
|
- It's a good idea to do some testing on an expendable copy of a file first.
|
||||||
@ -44,6 +44,8 @@ effects. Be careful not to destroy your text.
|
|||||||
Add {cmd} to the list of commands that Vim will
|
Add {cmd} to the list of commands that Vim will
|
||||||
execute automatically on {event} for a file matching
|
execute automatically on {event} for a file matching
|
||||||
{pat} |autocmd-patterns|.
|
{pat} |autocmd-patterns|.
|
||||||
|
Note: A quote character is seen as argument to the
|
||||||
|
:autocmd and won't start a comment.
|
||||||
Vim always adds the {cmd} after existing autocommands,
|
Vim always adds the {cmd} after existing autocommands,
|
||||||
so that the autocommands execute in the order in which
|
so that the autocommands execute in the order in which
|
||||||
they were given. See |autocmd-nested| for [nested].
|
they were given. See |autocmd-nested| for [nested].
|
||||||
@ -79,7 +81,8 @@ will appear twice. To avoid this, define your autocommands in a group, so
|
|||||||
that you can easily clear them: >
|
that you can easily clear them: >
|
||||||
|
|
||||||
augroup vimrc
|
augroup vimrc
|
||||||
autocmd! " Remove all vimrc autocommands
|
" Remove all vimrc autocommands
|
||||||
|
autocmd!
|
||||||
au BufNewFile,BufRead *.html so <sfile>:h/html.vim
|
au BufNewFile,BufRead *.html so <sfile>:h/html.vim
|
||||||
augroup END
|
augroup END
|
||||||
|
|
||||||
@ -133,6 +136,8 @@ prompt. When one command outputs two messages this can happen anyway.
|
|||||||
plugins, syntax highlighting, etc.
|
plugins, syntax highlighting, etc.
|
||||||
|
|
||||||
:au[tocmd]! [group] Remove ALL autocommands.
|
:au[tocmd]! [group] Remove ALL autocommands.
|
||||||
|
Note: a quote will be seen as argument to the :autocmd
|
||||||
|
and won't start a comment.
|
||||||
Warning: You should normally not do this without a
|
Warning: You should normally not do this without a
|
||||||
group, it breaks plugins, syntax highlighting, etc.
|
group, it breaks plugins, syntax highlighting, etc.
|
||||||
|
|
||||||
@ -273,14 +278,16 @@ Name triggered by ~
|
|||||||
|VimEnter| after doing all the startup stuff
|
|VimEnter| after doing all the startup stuff
|
||||||
|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 exit
|
||||||
|
|ExitPre| when using a command that may make Vim exit
|
||||||
|VimLeavePre| before exiting Nvim, before writing the shada file
|
|VimLeavePre| before exiting Nvim, before writing the shada file
|
||||||
|VimLeave| before exiting Nvim, after writing the shada file
|
|VimLeave| before exiting Nvim, after writing the shada file
|
||||||
|VimResume| after Nvim is resumed
|
|VimResume| after Nvim is resumed
|
||||||
|VimSuspend| before Nvim is suspended
|
|VimSuspend| before Nvim is suspended
|
||||||
|
|
||||||
Various
|
Various
|
||||||
|
|DiffUpdated| after diffs have been updated
|
||||||
|DirChanged| after the |current-directory| was changed
|
|DirChanged| after the |current-directory| was changed
|
||||||
|
|
||||||
|FileChangedShell| Vim notices that a file changed since editing started
|
|FileChangedShell| Vim notices that a file changed since editing started
|
||||||
@ -297,8 +304,8 @@ Name triggered by ~
|
|||||||
|SourceCmd| before sourcing a Vim script |Cmd-event|
|
|SourceCmd| before sourcing a Vim script |Cmd-event|
|
||||||
|
|
||||||
|VimResized| after the Vim window size changed
|
|VimResized| after the Vim window size changed
|
||||||
|FocusGained| Vim got input focus
|
|FocusGained| Nvim got focus
|
||||||
|FocusLost| Vim lost input focus
|
|FocusLost| Nvim lost focus
|
||||||
|CursorHold| the user doesn't press a key for a while
|
|CursorHold| the user doesn't press a key for a while
|
||||||
|CursorHoldI| the user doesn't press a key for a while in Insert mode
|
|CursorHoldI| the user doesn't press a key for a while in Insert mode
|
||||||
|CursorMoved| the cursor was moved in Normal mode
|
|CursorMoved| the cursor was moved in Normal mode
|
||||||
@ -312,6 +319,7 @@ 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
|
||||||
|
|CmdlineChanged| after a change was made to the command-line text
|
||||||
|CmdlineEnter| after entering cmdline mode
|
|CmdlineEnter| after entering cmdline mode
|
||||||
|CmdlineLeave| before leaving cmdline mode
|
|CmdlineLeave| before leaving cmdline mode
|
||||||
|CmdwinEnter| after entering the command-line window
|
|CmdwinEnter| after entering the command-line window
|
||||||
@ -331,6 +339,7 @@ Name triggered by ~
|
|||||||
|TextChangedP| after a change was made to the text in Insert mode
|
|TextChangedP| after a change was made to the text in Insert mode
|
||||||
when popup menu visible
|
when popup menu visible
|
||||||
|
|
||||||
|
|ColorSchemePre| before loading a color scheme
|
||||||
|ColorScheme| after loading a color scheme
|
|ColorScheme| after loading a color scheme
|
||||||
|
|
||||||
|RemoteReply| a reply from a server Vim was received
|
|RemoteReply| a reply from a server Vim was received
|
||||||
@ -494,14 +503,14 @@ ChanInfo State of channel changed, for instance the
|
|||||||
client of a RPC channel described itself.
|
client of a RPC channel described itself.
|
||||||
Sets these |v:event| keys:
|
Sets these |v:event| keys:
|
||||||
info
|
info
|
||||||
See |nvim_get_chan_info| for the format of the
|
See |nvim_get_chan_info()| for the format of
|
||||||
info Dictionary.
|
the info Dictionary.
|
||||||
*ChanOpen*
|
*ChanOpen*
|
||||||
ChanOpen Just after a channel was opened.
|
ChanOpen Just after a channel was opened.
|
||||||
Sets these |v:event| keys:
|
Sets these |v:event| keys:
|
||||||
info
|
info
|
||||||
See |nvim_get_chan_info| for the format of the
|
See |nvim_get_chan_info()| for the format of
|
||||||
info Dictionary.
|
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
|
||||||
@ -512,21 +521,24 @@ 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|.
|
||||||
|
*CmdlineChanged*
|
||||||
|
CmdlineChanged After a change was made to the text inside
|
||||||
|
command line. Be careful not to mess up the
|
||||||
|
command line, it may cause Vim to lock up.
|
||||||
|
<afile> is set to the |cmdline-char|.
|
||||||
*CmdlineEnter*
|
*CmdlineEnter*
|
||||||
CmdlineEnter After moving the cursor to the command line,
|
CmdlineEnter After entering the command-line (including
|
||||||
where the user can type a command or search
|
non-interactive use of ":" in a mapping: use
|
||||||
string.
|
|<Cmd>| instead to avoid this).
|
||||||
<afile> is set to a single character,
|
<afile> is set to the |cmdline-char|.
|
||||||
indicating the type of command-line.
|
|
||||||
|cmdline-char|
|
|
||||||
Sets these |v:event| keys:
|
Sets these |v:event| keys:
|
||||||
cmdlevel
|
cmdlevel
|
||||||
cmdtype
|
cmdtype
|
||||||
*CmdlineLeave*
|
*CmdlineLeave*
|
||||||
CmdlineLeave Before leaving the command line.
|
CmdlineLeave Before leaving the command-line (including
|
||||||
<afile> is set to a single character,
|
non-interactive use of ":" in a mapping: use
|
||||||
indicating the type of command-line.
|
|<Cmd>| instead to avoid this).
|
||||||
|cmdline-char|
|
<afile> is set to the |cmdline-char|.
|
||||||
Sets these |v:event| keys:
|
Sets these |v:event| keys:
|
||||||
abort (mutable)
|
abort (mutable)
|
||||||
cmdlevel
|
cmdlevel
|
||||||
@ -558,6 +570,10 @@ ColorScheme After loading a color scheme. |:colorscheme|
|
|||||||
set, and <amatch> for the new colorscheme
|
set, and <amatch> for the new colorscheme
|
||||||
name.
|
name.
|
||||||
|
|
||||||
|
*ColorSchemePre*
|
||||||
|
ColorSchemePre Before loading a color scheme. |:colorscheme|
|
||||||
|
Useful to setup removing things added by a
|
||||||
|
color scheme, before another one is loaded.
|
||||||
|
|
||||||
*CompleteDone*
|
*CompleteDone*
|
||||||
CompleteDone After Insert mode completion is done. Either
|
CompleteDone After Insert mode completion is done. Either
|
||||||
@ -613,6 +629,11 @@ CursorMoved After the cursor was moved in Normal or Visual
|
|||||||
CursorMovedI After the cursor was moved in Insert mode.
|
CursorMovedI After the cursor was moved in Insert mode.
|
||||||
Not triggered when the popup menu is visible.
|
Not triggered when the popup menu is visible.
|
||||||
Otherwise the same as CursorMoved.
|
Otherwise the same as CursorMoved.
|
||||||
|
*DiffUpdated*
|
||||||
|
DiffUpdated After diffs have been updated. Depending on
|
||||||
|
what kind of diff is being used (internal or
|
||||||
|
external) this can be triggered on every
|
||||||
|
change or when doing |:diffupdate|.
|
||||||
*DirChanged*
|
*DirChanged*
|
||||||
DirChanged After the |current-directory| was changed.
|
DirChanged After the |current-directory| was changed.
|
||||||
Sets these |v:event| keys:
|
Sets these |v:event| keys:
|
||||||
@ -646,6 +667,14 @@ FileChangedRO Before making the first change to a read-only
|
|||||||
*E881*
|
*E881*
|
||||||
If the number of lines changes saving for undo
|
If the number of lines changes saving for undo
|
||||||
may fail and the change will be aborted.
|
may fail and the change will be aborted.
|
||||||
|
*ExitPre*
|
||||||
|
ExitPre When using `:quit`, `:wq` in a way it makes
|
||||||
|
Vim exit, or using `:qall`, just after
|
||||||
|
|QuitPre|. Can be used to close any
|
||||||
|
non-essential window. Exiting may still be
|
||||||
|
cancelled if there is a modified buffer that
|
||||||
|
isn't automatically saved, use |VimLeavePre|
|
||||||
|
for really exiting.
|
||||||
*FileChangedShell*
|
*FileChangedShell*
|
||||||
FileChangedShell When Vim notices that the modification time of
|
FileChangedShell When Vim notices that the modification time of
|
||||||
a file has changed since editing started.
|
a file has changed since editing started.
|
||||||
@ -735,14 +764,10 @@ FilterWritePre Before writing a file for a filter command or
|
|||||||
filter command.
|
filter command.
|
||||||
Not triggered when 'shelltemp' is off.
|
Not triggered when 'shelltemp' is off.
|
||||||
*FocusGained*
|
*FocusGained*
|
||||||
FocusGained When Vim got input focus. Only for the GUI
|
FocusGained Nvim got focus.
|
||||||
version and a few console versions where this
|
|
||||||
can be detected.
|
|
||||||
*FocusLost*
|
*FocusLost*
|
||||||
FocusLost When Vim lost input focus. Only for the GUI
|
FocusLost Nvim lost focus. Also (potentially) when
|
||||||
version and a few console versions where this
|
a GUI dialog pops up.
|
||||||
can be detected. May also happen when a
|
|
||||||
dialog pops up.
|
|
||||||
*FuncUndefined*
|
*FuncUndefined*
|
||||||
FuncUndefined When a user function is used but it isn't
|
FuncUndefined When a user function is used but it isn't
|
||||||
defined. Useful for defining a function only
|
defined. Useful for defining a function only
|
||||||
@ -836,6 +861,9 @@ OptionSet After setting an option. The pattern is
|
|||||||
plugin. You can always use `:noa` to prevent
|
plugin. You can always use `:noa` to prevent
|
||||||
triggering this autocommand.
|
triggering this autocommand.
|
||||||
|
|
||||||
|
When using |:set| in the autocommand the event
|
||||||
|
is not triggered again.
|
||||||
|
|
||||||
*QuickFixCmdPre*
|
*QuickFixCmdPre*
|
||||||
QuickFixCmdPre Before a quickfix command is run (|:make|,
|
QuickFixCmdPre Before a quickfix command is run (|:make|,
|
||||||
|:lmake|, |:grep|, |:lgrep|, |:grepadd|,
|
|:lmake|, |:grep|, |:lgrep|, |:grepadd|,
|
||||||
@ -866,6 +894,7 @@ QuitPre When using `:quit`, `:wq` or `:qall`, before
|
|||||||
or quits Vim. Can be used to close any
|
or quits Vim. Can be used to close any
|
||||||
non-essential window if the current window is
|
non-essential window if the current window is
|
||||||
the last ordinary window.
|
the last ordinary window.
|
||||||
|
Also see |ExitPre|.
|
||||||
*RemoteReply*
|
*RemoteReply*
|
||||||
RemoteReply When a reply from a Vim that functions as
|
RemoteReply When a reply from a Vim that functions as
|
||||||
server was received |server2client()|. The
|
server was received |server2client()|. The
|
||||||
@ -933,6 +962,7 @@ SwapExists Detected an existing swap file when starting
|
|||||||
It is not allowed to change to another buffer,
|
It is not allowed to change to another buffer,
|
||||||
change a buffer name or change directory
|
change a buffer name or change directory
|
||||||
here.
|
here.
|
||||||
|
{only available with the +eval feature}
|
||||||
*Syntax*
|
*Syntax*
|
||||||
Syntax When the 'syntax' option has been set. The
|
Syntax When the 'syntax' option has been set. The
|
||||||
pattern is matched against the syntax name.
|
pattern is matched against the syntax name.
|
||||||
@ -963,7 +993,7 @@ TermClose When a |terminal| job ends.
|
|||||||
TermOpen When a |terminal| job is starting. Can be
|
TermOpen When a |terminal| job is starting. Can be
|
||||||
used to configure the terminal buffer.
|
used to configure the terminal buffer.
|
||||||
*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|
|
||||||
can be used to do things depending on the
|
can be used to do things depending on the
|
||||||
terminal version. Note that this event may be
|
terminal version. Note that this event may be
|
||||||
@ -993,6 +1023,10 @@ TextChangedP After a change was made to the text in the
|
|||||||
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
|
||||||
":doautocmd".
|
":doautocmd".
|
||||||
|
Note that when `:doautocmd User MyEvent` is
|
||||||
|
used while there are no matching autocommands,
|
||||||
|
you will get an error. If you don't want
|
||||||
|
that, define a dummy autocommand yourself.
|
||||||
*UserGettingBored*
|
*UserGettingBored*
|
||||||
UserGettingBored When the user presses the same key 42 times.
|
UserGettingBored When the user presses the same key 42 times.
|
||||||
Just kidding! :-)
|
Just kidding! :-)
|
||||||
@ -1041,9 +1075,10 @@ WinEnter After entering another window. Not done for
|
|||||||
If the window is for another buffer, Vim
|
If the window is for another buffer, Vim
|
||||||
executes the BufEnter autocommands after the
|
executes the BufEnter autocommands after the
|
||||||
WinEnter autocommands.
|
WinEnter autocommands.
|
||||||
Note: When using ":split fname" the WinEnter
|
Note: For split and tabpage commands the
|
||||||
event is triggered after the split but before
|
WinEnter event is triggered after the split
|
||||||
the file "fname" is loaded.
|
or tab command but before the file is loaded.
|
||||||
|
|
||||||
*WinLeave*
|
*WinLeave*
|
||||||
WinLeave Before leaving a window. If the window to be
|
WinLeave Before leaving a window. If the window to be
|
||||||
entered next is for a different buffer, Vim
|
entered next is for a different buffer, Vim
|
||||||
@ -1353,7 +1388,7 @@ Careful: '[ and '] change when using commands that change the buffer.
|
|||||||
In commands which expect a file name, you can use "<afile>" for the file name
|
In commands which expect a file name, you can use "<afile>" for the file name
|
||||||
that is being read |:<afile>| (you can also use "%" for the current file
|
that is being read |:<afile>| (you can also use "%" for the current file
|
||||||
name). "<abuf>" can be used for the buffer number of the currently effective
|
name). "<abuf>" can be used for the buffer number of the currently effective
|
||||||
buffer. This also works for buffers that doesn't have a name. But it doesn't
|
buffer. This also works for buffers that don't have a name. But it doesn't
|
||||||
work for files without a buffer (e.g., with ":r file").
|
work for files without a buffer (e.g., with ":r file").
|
||||||
|
|
||||||
*gzip-example*
|
*gzip-example*
|
||||||
|
@ -99,7 +99,7 @@ is an error when 'cpoptions' includes the 'E' flag.
|
|||||||
J Join [count] lines, with a minimum of two lines.
|
J Join [count] lines, with a minimum of two lines.
|
||||||
Remove the indent and insert up to two spaces (see
|
Remove the indent and insert up to two spaces (see
|
||||||
below). Fails when on the last line of the buffer.
|
below). Fails when on the last line of the buffer.
|
||||||
If [count] is too big it is reduce to the number of
|
If [count] is too big it is reduced to the number of
|
||||||
lines available.
|
lines available.
|
||||||
|
|
||||||
*v_J*
|
*v_J*
|
||||||
@ -501,6 +501,7 @@ If the 'shiftround' option is on, the indent is rounded to a multiple of
|
|||||||
If the 'smartindent' option is on, or 'cindent' is on and 'cinkeys' contains
|
If the 'smartindent' option is on, or 'cindent' is on and 'cinkeys' contains
|
||||||
'#' with a zero value, shift right does not affect lines starting with '#'
|
'#' with a zero value, shift right does not affect lines starting with '#'
|
||||||
(these are supposed to be C preprocessor lines that must stay in column 1).
|
(these are supposed to be C preprocessor lines that must stay in column 1).
|
||||||
|
This can be changed with the 'cino' option, see |cino-#|.
|
||||||
|
|
||||||
When the 'expandtab' option is off (this is the default) Vim uses <Tab>s as
|
When the 'expandtab' option is off (this is the default) Vim uses <Tab>s as
|
||||||
much as possible to make the indent. You can use ">><<" to replace an indent
|
much as possible to make the indent. You can use ">><<" to replace an indent
|
||||||
@ -666,6 +667,7 @@ The flags that you can use for the substitute commands:
|
|||||||
CTRL-E to scroll the screen up
|
CTRL-E to scroll the screen up
|
||||||
CTRL-Y to scroll the screen down
|
CTRL-Y to scroll the screen down
|
||||||
|
|
||||||
|
*:s_e*
|
||||||
[e] When the search pattern fails, do not issue an error message and, in
|
[e] When the search pattern fails, do not issue an error message and, in
|
||||||
particular, continue in maps as if no error occurred. This is most
|
particular, continue in maps as if no error occurred. This is most
|
||||||
useful to prevent the "No match" error from breaking a mapping. Vim
|
useful to prevent the "No match" error from breaking a mapping. Vim
|
||||||
@ -676,29 +678,34 @@ The flags that you can use for the substitute commands:
|
|||||||
Trailing characters
|
Trailing characters
|
||||||
Interrupted
|
Interrupted
|
||||||
|
|
||||||
|
*:s_g*
|
||||||
[g] Replace all occurrences in the line. Without this argument,
|
[g] Replace all occurrences in the line. Without this argument,
|
||||||
replacement occurs only for the first occurrence in each line. If the
|
replacement occurs only for the first occurrence in each line. If the
|
||||||
'gdefault' option is on, this flag is on by default and the [g]
|
'gdefault' option is on, this flag is on by default and the [g]
|
||||||
argument switches it off.
|
argument switches it off.
|
||||||
|
|
||||||
|
*:s_i*
|
||||||
[i] Ignore case for the pattern. The 'ignorecase' and 'smartcase' options
|
[i] Ignore case for the pattern. The 'ignorecase' and 'smartcase' options
|
||||||
are not used.
|
are not used.
|
||||||
|
|
||||||
|
*:s_I*
|
||||||
[I] Don't ignore case for the pattern. The 'ignorecase' and 'smartcase'
|
[I] Don't ignore case for the pattern. The 'ignorecase' and 'smartcase'
|
||||||
options are not used.
|
options are not used.
|
||||||
|
|
||||||
|
*:s_n*
|
||||||
[n] Report the number of matches, do not actually substitute. The [c]
|
[n] Report the number of matches, do not actually substitute. The [c]
|
||||||
flag is ignored. The matches are reported as if 'report' is zero.
|
flag is ignored. The matches are reported as if 'report' is zero.
|
||||||
Useful to |count-items|.
|
Useful to |count-items|.
|
||||||
If \= |sub-replace-expression| is used, the expression will be
|
If \= |sub-replace-expression| is used, the expression will be
|
||||||
evaluated in the |sandbox| at every match.
|
evaluated in the |sandbox| at every match.
|
||||||
|
|
||||||
[p] Print the line containing the last substitute.
|
[p] Print the line containing the last substitute. *:s_p*
|
||||||
|
|
||||||
[#] Like [p] and prepend the line number.
|
[#] Like [p] and prepend the line number. *:s_#*
|
||||||
|
|
||||||
[l] Like [p] but print the text like |:list|.
|
[l] Like [p] but print the text like |:list|. *:s_l*
|
||||||
|
|
||||||
|
*:s_r*
|
||||||
[r] Only useful in combination with `:&` or `:s` without arguments. `:&r`
|
[r] Only useful in combination with `:&` or `:s` without arguments. `:&r`
|
||||||
works the same way as `:~`: When the search pattern is empty, use the
|
works the same way as `:~`: When the search pattern is empty, use the
|
||||||
previously used search pattern instead of the search pattern from the
|
previously used search pattern instead of the search pattern from the
|
||||||
@ -1135,7 +1142,7 @@ There are ten types of registers: *registers* *E354*
|
|||||||
5. three read-only registers ":, "., "%
|
5. three read-only registers ":, "., "%
|
||||||
6. alternate buffer register "#
|
6. alternate buffer register "#
|
||||||
7. the expression register "=
|
7. the expression register "=
|
||||||
8. The selection and drop registers "*, "+ and "~
|
8. The selection registers "* and "+
|
||||||
9. The black hole register "_
|
9. The black hole register "_
|
||||||
10. Last search pattern register "/
|
10. Last search pattern register "/
|
||||||
|
|
||||||
@ -1236,7 +1243,7 @@ If the "= register is used for the "p" command, the String is split up at <NL>
|
|||||||
characters. If the String ends in a <NL>, it is regarded as a linewise
|
characters. If the String ends in a <NL>, it is regarded as a linewise
|
||||||
register.
|
register.
|
||||||
|
|
||||||
8. Selection and drop registers "*, "+ and "~
|
8. Selection registers "* and "+
|
||||||
Use these registers for storing and retrieving the selected text for the GUI.
|
Use these registers for storing and retrieving the selected text for the GUI.
|
||||||
See |quotestar| and |quoteplus|. When the clipboard is not available or not
|
See |quotestar| and |quoteplus|. When the clipboard is not available or not
|
||||||
working, the unnamed register is used instead. For Unix systems and Mac OS X,
|
working, the unnamed register is used instead. For Unix systems and Mac OS X,
|
||||||
@ -1371,6 +1378,55 @@ to the name of an external program for Vim to use for text formatting. The
|
|||||||
'textwidth' and other options have no effect on formatting by an external
|
'textwidth' and other options have no effect on formatting by an external
|
||||||
program.
|
program.
|
||||||
|
|
||||||
|
*format-formatexpr*
|
||||||
|
The 'formatexpr' option can be set to a Vim script function that performs
|
||||||
|
reformatting of the buffer. This should usually happen in an |ftplugin|,
|
||||||
|
since formatting is highly dependent on the type of file. It makes
|
||||||
|
sense to use an |autoload| script, so the corresponding script is only loaded
|
||||||
|
when actually needed and the script should be called <filetype>format.vim.
|
||||||
|
|
||||||
|
For example, the XML filetype plugin distributed with Vim in the $VIMRUNTIME
|
||||||
|
directory, sets the 'formatexpr' option to: >
|
||||||
|
|
||||||
|
setlocal formatexpr=xmlformat#Format()
|
||||||
|
|
||||||
|
That means, you will find the corresponding script, defining the
|
||||||
|
xmlformat#Format() function, in the directory:
|
||||||
|
`$VIMRUNTIME/autoload/xmlformat.vim`
|
||||||
|
|
||||||
|
Here is an example script that removes trailing whitespace from the selected
|
||||||
|
text. Put it in your autoload directory, e.g. ~/.vim/autoload/format.vim: >
|
||||||
|
|
||||||
|
func! format#Format()
|
||||||
|
" only reformat on explicit gq command
|
||||||
|
if mode() != 'n'
|
||||||
|
" fall back to Vims internal reformatting
|
||||||
|
return 1
|
||||||
|
endif
|
||||||
|
let lines = getline(v:lnum, v:lnum + v:count - 1)
|
||||||
|
call map(lines, {key, val -> substitute(val, '\s\+$', '', 'g')})
|
||||||
|
call setline('.', lines)
|
||||||
|
|
||||||
|
" do not run internal formatter!
|
||||||
|
return 0
|
||||||
|
endfunc
|
||||||
|
|
||||||
|
You can then enable the formatting by executing: >
|
||||||
|
setlocal formatexpr=format#Format()
|
||||||
|
|
||||||
|
Note: this function explicitly returns non-zero when called from insert mode
|
||||||
|
(which basically means, text is inserted beyond the 'textwidth' limit). This
|
||||||
|
causes Vim to fall back to reformat the text by using the internal formatter.
|
||||||
|
|
||||||
|
However, if the |gq| command is used to reformat the text, the function
|
||||||
|
will receive the selected lines, trim trailing whitespace from those lines and
|
||||||
|
put them back in place. If you are going to split single lines into multiple
|
||||||
|
lines, be careful not to overwrite anything.
|
||||||
|
|
||||||
|
If you want to allow reformatting of text from insert or replace mode, one has
|
||||||
|
to be very careful, because the function might be called recursively. For
|
||||||
|
debugging it helps to set the 'debug' option.
|
||||||
|
|
||||||
*right-justify*
|
*right-justify*
|
||||||
There is no command in Vim to right justify text. You can do it with
|
There is no command in Vim to right justify text. You can do it with
|
||||||
an external command, like "par" (e.g.: "!}par" to format until the end of the
|
an external command, like "par" (e.g.: "!}par" to format until the end of the
|
||||||
@ -1753,4 +1809,4 @@ The sorting can be interrupted, but if you interrupt it too late in the
|
|||||||
process you may end up with duplicated lines. This also depends on the system
|
process you may end up with duplicated lines. This also depends on the system
|
||||||
library function used.
|
library function used.
|
||||||
|
|
||||||
vim:tw=78:ts=8:ft=help:norl:
|
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||||
|
@ -32,8 +32,13 @@ Channels support multiple modes or protocols. In the most basic
|
|||||||
mode of operation, raw bytes are read and written to the channel.
|
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
|
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.
|
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
|
The builtin |terminal-emulator| is also implemented on top of PTY channels.
|
||||||
channels.
|
|
||||||
|
Channel Id *channel-id*
|
||||||
|
|
||||||
|
Each channel is identified by an integer id, unique for the life of the
|
||||||
|
current Nvim session. Functions like |stdioopen()| return channel ids;
|
||||||
|
functions like |chansend()| consume channel ids.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
2. Reading and writing raw bytes *channel-bytes*
|
2. Reading and writing raw bytes *channel-bytes*
|
||||||
@ -64,8 +69,8 @@ be raised.
|
|||||||
|
|
||||||
- The arguments passed to the callback function are:
|
- The arguments passed to the callback function are:
|
||||||
|
|
||||||
0: The channel id
|
0: |channel-id|
|
||||||
1: the raw data read from the channel, formatted as a |readfile()|-style
|
1: Raw data read from the channel, formatted as a |readfile()|-style
|
||||||
list. If EOF occured, a single empty string `['']` will be passed in.
|
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
|
Note that the items in this list do not directly correspond to actual
|
||||||
lines in the output. See |channel-lines|
|
lines in the output. See |channel-lines|
|
||||||
@ -150,9 +155,8 @@ 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
|
(TUI). If Nvim is |--headless| the TUI is not started and stdin/stdout can be
|
||||||
used as a channel. See also |--embed|.
|
used as a channel. See also |--embed|.
|
||||||
|
|
||||||
Call |stdioopen()| during |startup| to open the stdio channel as channel-id 1.
|
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),
|
Nvim's stderr is always available as |v:stderr|, a write-only bytes channel.
|
||||||
a write-only bytes channel.
|
|
||||||
|
|
||||||
Example: >
|
Example: >
|
||||||
func! OnEvent(id, data, event)
|
func! OnEvent(id, data, event)
|
||||||
|
@ -4,8 +4,8 @@
|
|||||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||||
|
|
||||||
|
|
||||||
*Cmdline-mode* *Command-line-mode*
|
*Cmdline-mode* *Command-line-mode* *Cmdline*
|
||||||
Command-line mode *Cmdline* *Command-line* *mode-cmdline* *:*
|
Command-line mode *cmdline* *Command-line* *mode-cmdline* *:*
|
||||||
|
|
||||||
Command-line mode is used to enter Ex commands (":"), search patterns
|
Command-line mode is used to enter Ex commands (":"), search patterns
|
||||||
("/" and "?"), and filter commands ("!").
|
("/" and "?"), and filter commands ("!").
|
||||||
@ -163,12 +163,14 @@ CTRL-R CTRL-F *c_CTRL-R_CTRL-F* *c_<C-R>_<C-F>*
|
|||||||
CTRL-R CTRL-P *c_CTRL-R_CTRL-P* *c_<C-R>_<C-P>*
|
CTRL-R CTRL-P *c_CTRL-R_CTRL-P* *c_<C-R>_<C-P>*
|
||||||
CTRL-R CTRL-W *c_CTRL-R_CTRL-W* *c_<C-R>_<C-W>*
|
CTRL-R CTRL-W *c_CTRL-R_CTRL-W* *c_<C-R>_<C-W>*
|
||||||
CTRL-R CTRL-A *c_CTRL-R_CTRL-A* *c_<C-R>_<C-A>*
|
CTRL-R CTRL-A *c_CTRL-R_CTRL-A* *c_<C-R>_<C-A>*
|
||||||
|
CTRL-R CTRL-L *c_CTRL-R_CTRL-L* *c_<C-R>_<C-L>*
|
||||||
Insert the object under the cursor:
|
Insert the object under the cursor:
|
||||||
CTRL-F the Filename under the cursor
|
CTRL-F the Filename under the cursor
|
||||||
CTRL-P the Filename under the cursor, expanded with
|
CTRL-P the Filename under the cursor, expanded with
|
||||||
'path' as in |gf|
|
'path' as in |gf|
|
||||||
CTRL-W the Word under the cursor
|
CTRL-W the Word under the cursor
|
||||||
CTRL-A the WORD under the cursor; see |WORD|
|
CTRL-A the WORD under the cursor; see |WORD|
|
||||||
|
CTRL-L the line under the cursor
|
||||||
|
|
||||||
When 'incsearch' is set the cursor position at the end of the
|
When 'incsearch' is set the cursor position at the end of the
|
||||||
currently displayed match is used. With CTRL-W the part of
|
currently displayed match is used. With CTRL-W the part of
|
||||||
@ -176,8 +178,8 @@ CTRL-R CTRL-A *c_CTRL-R_CTRL-A* *c_<C-R>_<C-A>*
|
|||||||
|
|
||||||
*c_CTRL-R_CTRL-R* *c_<C-R>_<C-R>*
|
*c_CTRL-R_CTRL-R* *c_<C-R>_<C-R>*
|
||||||
*c_CTRL-R_CTRL-O* *c_<C-R>_<C-O>*
|
*c_CTRL-R_CTRL-O* *c_<C-R>_<C-O>*
|
||||||
CTRL-R CTRL-R {0-9a-z"%#:-=. CTRL-F CTRL-P CTRL-W CTRL-A}
|
CTRL-R CTRL-R {0-9a-z"%#:-=. CTRL-F CTRL-P CTRL-W CTRL-A CTRL-L}
|
||||||
CTRL-R CTRL-O {0-9a-z"%#:-=. CTRL-F CTRL-P CTRL-W CTRL-A}
|
CTRL-R CTRL-O {0-9a-z"%#:-=. CTRL-F CTRL-P CTRL-W CTRL-A CTRL-L}
|
||||||
Insert register or object under the cursor. Works like
|
Insert register or object under the cursor. Works like
|
||||||
|c_CTRL-R| but inserts the text literally. For example, if
|
|c_CTRL-R| but inserts the text literally. For example, if
|
||||||
register a contains "xy^Hz" (where ^H is a backspace),
|
register a contains "xy^Hz" (where ^H is a backspace),
|
||||||
@ -210,7 +212,7 @@ CTRL-\ e {expr} *c_CTRL-\_e*
|
|||||||
|
|
||||||
*c_CTRL-Y*
|
*c_CTRL-Y*
|
||||||
CTRL-Y When there is a modeless selection, copy the selection into
|
CTRL-Y When there is a modeless selection, copy the selection into
|
||||||
the clipboard. |modeless-selection|
|
the clipboard.
|
||||||
If there is no selection CTRL-Y is inserted as a character.
|
If there is no selection CTRL-Y is inserted as a character.
|
||||||
|
|
||||||
CTRL-M or CTRL-J *c_CTRL-M* *c_CTRL-J* *c_<NL>* *c_<CR>* *c_CR*
|
CTRL-M or CTRL-J *c_CTRL-M* *c_CTRL-J* *c_<NL>* *c_<CR>* *c_CR*
|
||||||
@ -376,10 +378,13 @@ CTRL-D List names that match the pattern in front of the cursor.
|
|||||||
match is inserted. After the last match, the first is used
|
match is inserted. After the last match, the first is used
|
||||||
again (wrap around).
|
again (wrap around).
|
||||||
The behavior can be changed with the 'wildmode' option.
|
The behavior can be changed with the 'wildmode' option.
|
||||||
|
*c_<S-Tab>*
|
||||||
|
<S-Tab> Like 'wildchar' or <Tab>, but begin with the last match and
|
||||||
|
then go to the previous match.
|
||||||
*c_CTRL-N*
|
*c_CTRL-N*
|
||||||
CTRL-N After using 'wildchar' which got multiple matches, go to next
|
CTRL-N After using 'wildchar' which got multiple matches, go to next
|
||||||
match. Otherwise recall more recent command-line from history.
|
match. Otherwise recall more recent command-line from history.
|
||||||
<S-Tab> *c_CTRL-P* *c_<S-Tab>*
|
*c_CTRL-P*
|
||||||
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.
|
history.
|
||||||
@ -490,8 +495,46 @@ after a command causes the rest of the line to be ignored. This can be used
|
|||||||
to add comments. Example: >
|
to add comments. Example: >
|
||||||
:set ai "set 'autoindent' option
|
:set ai "set 'autoindent' option
|
||||||
It is not possible to add a comment to a shell command ":!cmd" or to the
|
It is not possible to add a comment to a shell command ":!cmd" or to the
|
||||||
":map" command and a few others, because they see the '"' as part of their
|
":map" command and a few others (mainly commands that expect expressions)
|
||||||
argument. This is mentioned where the command is explained.
|
that see the '"' as part of their argument:
|
||||||
|
|
||||||
|
:argdo
|
||||||
|
:autocmd
|
||||||
|
:bufdo
|
||||||
|
:cexpr (and the like)
|
||||||
|
:call
|
||||||
|
:cdo (and the like)
|
||||||
|
:command
|
||||||
|
:cscope (and the like)
|
||||||
|
:debug
|
||||||
|
:display
|
||||||
|
:echo (and the like)
|
||||||
|
:elseif
|
||||||
|
:execute
|
||||||
|
:folddoopen
|
||||||
|
:folddoclosed
|
||||||
|
:for
|
||||||
|
:grep (and the like)
|
||||||
|
:help (and the like)
|
||||||
|
:if
|
||||||
|
:let
|
||||||
|
:make
|
||||||
|
:map (and the like including :abbrev commands)
|
||||||
|
:menu (and the like)
|
||||||
|
:mkspell
|
||||||
|
:normal
|
||||||
|
:ownsyntax
|
||||||
|
:popup
|
||||||
|
:promptfind (and the like)
|
||||||
|
:registers
|
||||||
|
:return
|
||||||
|
:sort
|
||||||
|
:syntax
|
||||||
|
:tabdo
|
||||||
|
:tearoff
|
||||||
|
:vimgrep (and the like)
|
||||||
|
:while
|
||||||
|
:windo
|
||||||
|
|
||||||
*:bar* *:\bar*
|
*:bar* *:\bar*
|
||||||
'|' can be used to separate commands, so you can give multiple commands in one
|
'|' can be used to separate commands, so you can give multiple commands in one
|
||||||
@ -786,6 +829,11 @@ Also see |`=|.
|
|||||||
Note: these are typed literally, they are not special keys!
|
Note: these are typed literally, they are not special keys!
|
||||||
<cword> is replaced with the word under the cursor (like |star|)
|
<cword> is replaced with the word under the cursor (like |star|)
|
||||||
<cWORD> is replaced with the WORD under the cursor (see |WORD|)
|
<cWORD> is replaced with the WORD under the cursor (see |WORD|)
|
||||||
|
<cexpr> is replaced with the word under the cursor, including more
|
||||||
|
to form a C expression. E.g., when the cursor is on "arg"
|
||||||
|
of "ptr->arg" then the result is "ptr->arg"; when the
|
||||||
|
cursor is on "]" of "list[idx]" then the result is
|
||||||
|
"list[idx]". This is used for |v:beval_text|.
|
||||||
<cfile> is replaced with the path name under the cursor (like what
|
<cfile> is replaced with the path name under the cursor (like what
|
||||||
|gf| uses)
|
|gf| uses)
|
||||||
<afile> When executing autocommands, is replaced with the file name
|
<afile> When executing autocommands, is replaced with the file name
|
||||||
@ -834,7 +882,8 @@ These modifiers can be given, in this order:
|
|||||||
directory.
|
directory.
|
||||||
:. Reduce file name to be relative to current directory, if
|
:. Reduce file name to be relative to current directory, if
|
||||||
possible. File name is unmodified if it is not below the
|
possible. File name is unmodified if it is not below the
|
||||||
current directory.
|
current directory, but on MS-Windows the drive is removed if
|
||||||
|
it is the current drive.
|
||||||
For maximum shortness, use ":~:.".
|
For maximum shortness, use ":~:.".
|
||||||
:h Head of the file name (the last component and any separators
|
:h Head of the file name (the last component and any separators
|
||||||
removed). Cannot be used with :e, :r or :t.
|
removed). Cannot be used with :e, :r or :t.
|
||||||
@ -1098,4 +1147,4 @@ The character used for the pattern indicates the type of command-line:
|
|||||||
@ string for |input()|
|
@ string for |input()|
|
||||||
- text for |:insert| or |:append|
|
- text for |:insert| or |:append|
|
||||||
|
|
||||||
vim:tw=78:ts=8:ft=help:norl:
|
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||||
|
@ -162,12 +162,8 @@ In WinDbg: choose Open Crash Dump on the File menu. Follow the instructions in
|
|||||||
*get-ms-debuggers*
|
*get-ms-debuggers*
|
||||||
3.5 Obtaining Microsoft Debugging Tools ~
|
3.5 Obtaining Microsoft Debugging Tools ~
|
||||||
|
|
||||||
The Debugging Tools for Windows (including WinDbg) can be downloaded from
|
Visual Studio 2017 Community Edition can be downloaded for free from:
|
||||||
http://www.microsoft.com/whdc/devtools/debugging/default.mspx
|
https://visualstudio.microsoft.com/downloads/
|
||||||
This includes the WinDbg debugger.
|
|
||||||
|
|
||||||
Visual C++ 2005 Express Edition can be downloaded for free from:
|
|
||||||
http://msdn.microsoft.com/vstudio/express/visualC/default.aspx
|
|
||||||
|
|
||||||
=========================================================================
|
=========================================================================
|
||||||
vim:tw=78:ts=8:ft=help:norl:
|
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||||
|
@ -37,15 +37,17 @@ 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()|.
|
||||||
|
*inputdialog()* Use |input()| instead.
|
||||||
*jobclose()* Obsolete name for |chanclose()|
|
*jobclose()* Obsolete name for |chanclose()|
|
||||||
*jobsend()* Obsolete name for |chansend()|
|
*jobsend()* Obsolete name for |chansend()|
|
||||||
*last_buffer_nr()* Obsolete name for bufnr("$").
|
*last_buffer_nr()* Obsolete name for bufnr("$").
|
||||||
|
|
||||||
Modifiers ~
|
Modifiers ~
|
||||||
|
*cpo-<*
|
||||||
*:menu-<special>*
|
*:menu-<special>*
|
||||||
*:menu-special* <> notation is always enabled. |cpo-<|
|
*:menu-special* <> notation is always enabled.
|
||||||
*:map-<special>*
|
*:map-<special>*
|
||||||
*:map-special* <> notation is always enabled. |cpo-<|
|
*:map-special* <> notation is always enabled.
|
||||||
|
|
||||||
Normal commands ~
|
Normal commands ~
|
||||||
*]f*
|
*]f*
|
||||||
|
@ -4,56 +4,37 @@
|
|||||||
NVIM REFERENCE MANUAL
|
NVIM REFERENCE MANUAL
|
||||||
|
|
||||||
|
|
||||||
Development of Nvim. *development*
|
Development of Nvim *development*
|
||||||
|
|
||||||
Nvim is open source software. Everybody is encouraged to contribute.
|
This reference describes design constraints and guidelines, for developing
|
||||||
|
Nvim applications or Nvim itself.
|
||||||
|
Architecture and internal concepts are covered in src/nvim/README.md
|
||||||
|
|
||||||
|
Nvim is free and open source. Everybody is encouraged to contribute.
|
||||||
https://github.com/neovim/neovim/blob/master/CONTRIBUTING.md
|
https://github.com/neovim/neovim/blob/master/CONTRIBUTING.md
|
||||||
|
|
||||||
See src/nvim/README.md for an overview of the source code.
|
|
||||||
|
|
||||||
Type |gO| to see the table of contents.
|
Type |gO| to see the table of contents.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
Design goals *design-goals*
|
Design goals *design-goals*
|
||||||
|
|
||||||
Most important things come first (roughly).
|
Most important things come first (roughly). Some items conflict; this is
|
||||||
|
intentional. A balance must be found.
|
||||||
Note that some items conflict; this is intentional. A balance must be found.
|
|
||||||
|
|
||||||
|
|
||||||
NVIM IS... IMPROVED *design-improved*
|
NVIM IS... IMPROVED *design-improved*
|
||||||
|
|
||||||
The IMproved bits of Vim should make it a better Vi, without becoming a
|
The Neo bits of Nvim should make it a better Vim, without becoming a
|
||||||
completely different editor. Extensions are done with a "Vi spirit".
|
completely different editor.
|
||||||
- Use the keyboard as much as feasible. The mouse requires a third hand,
|
- In matters of taste, prefer Vim/Unix tradition. If there is no relevant
|
||||||
which we don't have. Many terminals don't have a mouse.
|
Vim/Unix tradition, consider the "common case".
|
||||||
- When the mouse is used anyway, avoid the need to switch back to the
|
|
||||||
keyboard. Avoid mixing mouse and keyboard handling.
|
|
||||||
- Add commands and options in a consistent way. Otherwise people will have a
|
|
||||||
hard time finding and remembering them. Keep in mind that more commands and
|
|
||||||
options will be added later.
|
|
||||||
- A feature that people do not know about is a useless feature. Don't add
|
- A feature that people do not know about is a useless feature. Don't add
|
||||||
obscure features, or at least add hints in documentation that they exist.
|
obscure features, or at least add hints in documentation that they exist.
|
||||||
- Minimize using CTRL and other modifiers, they are more difficult to type.
|
|
||||||
- There are many first-time and inexperienced Vim users. Make it easy for
|
|
||||||
them to start using Vim and learn more over time.
|
|
||||||
- There is no limit to the features that can be added. Selecting new features
|
- There is no limit to the features that can be added. Selecting new features
|
||||||
is based on (1) what users ask for, (2) how much effort it takes to
|
is based on (1) what users ask for, (2) how much effort it takes to
|
||||||
implement and (3) someone actually implementing it.
|
implement and (3) someone actually implementing it.
|
||||||
|
- Backwards compatibility is a feature. The RPC API in particular should
|
||||||
|
never break.
|
||||||
NVIM IS... MULTI PLATFORM *design-multi-platform*
|
|
||||||
|
|
||||||
Vim tries to help as many users on as many platforms as possible.
|
|
||||||
- Support many kinds of terminals. The minimal demands are cursor positioning
|
|
||||||
and clear-screen. Commands should only use key strokes that most keyboards
|
|
||||||
have. Support all the keys on the keyboard for mapping.
|
|
||||||
- Support many platforms. A condition is that there is someone willing to do
|
|
||||||
Vim development on that platform, and it doesn't mean messing up the code.
|
|
||||||
- Support many compilers and libraries. Not everybody is able or allowed to
|
|
||||||
install another compiler or GUI library.
|
|
||||||
- People switch from one platform to another, and from GUI to terminal
|
|
||||||
version. Features should be present in all versions.
|
|
||||||
|
|
||||||
|
|
||||||
NVIM IS... WELL DOCUMENTED *design-documented*
|
NVIM IS... WELL DOCUMENTED *design-documented*
|
||||||
@ -90,15 +71,6 @@ NVIM IS... MAINTAINABLE *design-maintain*
|
|||||||
knowledge spread to other parts of the code.
|
knowledge spread to other parts of the code.
|
||||||
|
|
||||||
|
|
||||||
NVIM IS... FLEXIBLE *design-flexible*
|
|
||||||
|
|
||||||
Vim should make it easy for users to work in their preferred styles rather
|
|
||||||
than coercing its users into particular patterns of work. This can be for
|
|
||||||
items with a large impact or for details. The defaults are carefully chosen
|
|
||||||
such that most users will enjoy using Vim as it is. Commands and options can
|
|
||||||
be used to adjust Vim to the desire of the user and its environment.
|
|
||||||
|
|
||||||
|
|
||||||
NVIM IS... NOT *design-not*
|
NVIM IS... NOT *design-not*
|
||||||
|
|
||||||
Nvim is not an operating system; instead it should be composed with other
|
Nvim is not an operating system; instead it should be composed with other
|
||||||
@ -110,41 +82,6 @@ include the kitchen sink... but it's good for plumbing."
|
|||||||
Developer guidelines *dev*
|
Developer guidelines *dev*
|
||||||
|
|
||||||
|
|
||||||
JARGON *dev-jargon*
|
|
||||||
|
|
||||||
API client ~
|
|
||||||
All external UIs and remote plugins (as opposed to regular Vim plugins) are
|
|
||||||
"clients" in general; but we call something an "API client" if its purpose is
|
|
||||||
to abstract or wrap the RPC API for the convenience of other applications
|
|
||||||
(just like a REST client or SDK such as boto3 for AWS: you can speak AWS REST
|
|
||||||
using an HTTP client like curl, but boto3 wraps that in a convenient python
|
|
||||||
interface). For example, the Nvim lua-client is an API client:
|
|
||||||
https://github.com/neovim/lua-client
|
|
||||||
|
|
||||||
Host ~
|
|
||||||
A plugin "host" is both a client (of the Nvim API) and a server (of an
|
|
||||||
external platform, e.g. python). It is a remote plugin that hosts other
|
|
||||||
plugins.
|
|
||||||
|
|
||||||
Remote plugin ~
|
|
||||||
Arbitrary code registered via |:UpdateRemotePlugins|, that runs in a separate
|
|
||||||
process and communicates with Nvim via the |api|.
|
|
||||||
|
|
||||||
Window ~
|
|
||||||
The word "window" is commonly used for several things: A window on the screen,
|
|
||||||
the xterm window, a window inside Vim to view a buffer.
|
|
||||||
To avoid confusion, other items that are sometimes called window have been
|
|
||||||
given another name. Here is an overview of the related items:
|
|
||||||
|
|
||||||
screen The whole display.
|
|
||||||
shell The Vim application. This can cover the whole screen (e.g.,
|
|
||||||
when running in a console) or part of it (xterm or GUI).
|
|
||||||
window View on a buffer. There can be several windows in Vim,
|
|
||||||
together with the command line, menubar, toolbar, etc. they
|
|
||||||
fit in the shell.
|
|
||||||
frame Windows are kept in a tree of frames. Each frame contains
|
|
||||||
a column, row, or window ("leaf" frame).
|
|
||||||
|
|
||||||
PROVIDERS *dev-provider*
|
PROVIDERS *dev-provider*
|
||||||
|
|
||||||
A goal of Nvim is to allow extension of the editor without special knowledge
|
A goal of Nvim is to allow extension of the editor without special knowledge
|
||||||
@ -200,6 +137,13 @@ DOCUMENTATION *dev-doc*
|
|||||||
"the user host terminal".
|
"the user host terminal".
|
||||||
- Use "tui-" to prefix help tags related to the host terminal, and "TUI"
|
- Use "tui-" to prefix help tags related to the host terminal, and "TUI"
|
||||||
in prose if possible.
|
in prose if possible.
|
||||||
|
- Docstrings: do not start parameter descriptions with "The" or "A" unless it
|
||||||
|
is critical to avoid ambiguity.
|
||||||
|
GOOD: >
|
||||||
|
/// @param dirname Path fragment before `pend`
|
||||||
|
< BAD: >
|
||||||
|
/// @param dirname The path fragment before `pend`
|
||||||
|
<
|
||||||
|
|
||||||
API *dev-api*
|
API *dev-api*
|
||||||
|
|
||||||
@ -239,7 +183,16 @@ Example: `nvim_buf_changedtick_event`.
|
|||||||
|
|
||||||
API-CLIENT *dev-api-client*
|
API-CLIENT *dev-api-client*
|
||||||
|
|
||||||
|
Standard Features ~
|
||||||
|
|
||||||
|
- Clients should call |nvim_set_client_info()| after connecting, so users and
|
||||||
|
plugins can detect the client by handling the |ChanInfo| event. This
|
||||||
|
avoids the need for special variables or other client hints.
|
||||||
|
- Clients should handle |nvim_error_event| notifications, which will be sent
|
||||||
|
if an async request to nvim was rejected or caused an error.
|
||||||
|
|
||||||
Package Naming ~
|
Package Naming ~
|
||||||
|
|
||||||
API client packages should NOT be named something ambiguous like "neovim" or
|
API client packages should NOT be named something ambiguous like "neovim" or
|
||||||
"python-client". Use "nvim" as a prefix/suffix to some other identifier
|
"python-client". Use "nvim" as a prefix/suffix to some other identifier
|
||||||
following ecosystem conventions.
|
following ecosystem conventions.
|
||||||
@ -255,33 +208,36 @@ Examples of API-client package names:
|
|||||||
BAD: neovim
|
BAD: neovim
|
||||||
|
|
||||||
Implementation ~
|
Implementation ~
|
||||||
Consider using libmpack instead of the msgpack.org C/C++ library. libmpack is
|
|
||||||
small, efficient, and C89-compatible. It can be easily inlined in your
|
|
||||||
C project source, too. https://github.com/libmpack/libmpack/
|
|
||||||
|
|
||||||
|
Consider using libmpack instead of the msgpack.org C/C++ library. libmpack is
|
||||||
|
small (can be inlined into your C/C++ project) and efficient (no allocations).
|
||||||
|
It also implements msgpack-RPC.
|
||||||
|
https://github.com/libmpack/libmpack/
|
||||||
|
|
||||||
EXTERNAL UI *dev-ui*
|
EXTERNAL UI *dev-ui*
|
||||||
|
|
||||||
Compatibility ~
|
|
||||||
External UIs should be aware of the |api-contract|. In particular, future
|
External UIs should be aware of the |api-contract|. In particular, future
|
||||||
versions of Nvim may add new items to existing events. The API is strongly
|
versions of Nvim may add new items to existing events. The API is strongly
|
||||||
backwards-compatible, but clients must not break if new fields are added to
|
backwards-compatible, but clients must not break if new (optional) fields are
|
||||||
existing events.
|
added to existing events.
|
||||||
|
|
||||||
|
Standard Features ~
|
||||||
|
|
||||||
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
|
|
||||||
|
- Call |nvim_set_client_info()| after connecting, so users and plugins can
|
||||||
|
detect the UI by handling the |ChanInfo| event. This avoids the need for
|
||||||
|
special variables and UI-specific config files (gvimrc, macvimrc, …).
|
||||||
|
- Cursor style (shape, color) should conform 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 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
|
- Avoid mappings that conflict with the Nvim keymap-space; GUIs have many new
|
||||||
like <C-,> <C-Enter> <C-S-x> <D-x> and patterns like "shift shift", which
|
chords (<C-,> <C-Enter> <C-S-x> <D-x>) and patterns ("shift shift") that do
|
||||||
don't conflict with typical Nvim mappings.
|
not potentially conflict with Nvim defaults, plugins, etc.
|
||||||
|
- Consider the "option_set" |ui-global| event as a hint for other GUI
|
||||||
Implementation ~
|
behaviors. UI-related options ('guifont', 'ambiwidth', …) are published in
|
||||||
- UI-related options ('guifont', 'ambiwidth', …) are published in the
|
this event.
|
||||||
"option_set" |ui-global| event. The event is triggered when the UI first
|
|
||||||
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:noet:ft=help:norl:
|
||||||
|
@ -5,7 +5,7 @@
|
|||||||
|
|
||||||
|
|
||||||
*diff* *diff-mode*
|
*diff* *diff-mode*
|
||||||
This file describes the |+diff| feature: Showing differences between two to
|
This file describes the diff feature: Showing differences between two to
|
||||||
eight versions of the same file.
|
eight versions of the same file.
|
||||||
|
|
||||||
The basics are explained in section |08.7| of the user manual.
|
The basics are explained in section |08.7| of the user manual.
|
||||||
@ -27,7 +27,9 @@ The second and following arguments may also be a directory name. Vim will
|
|||||||
then append the file name of the first argument to the directory name to find
|
then append the file name of the first argument to the directory name to find
|
||||||
the file.
|
the file.
|
||||||
|
|
||||||
This only works when a standard "diff" command is available. See 'diffexpr'.
|
By default an internal diff library will be used. When 'diffopt' or
|
||||||
|
'diffexpr' has been set an external "diff" command will be used. This only
|
||||||
|
works when such a diff program is available.
|
||||||
|
|
||||||
Diffs are local to the current tab page |tab-page|. You can't see diffs with
|
Diffs are local to the current tab page |tab-page|. You can't see diffs with
|
||||||
a window in another tab page. This does make it possible to have several
|
a window in another tab page. This does make it possible to have several
|
||||||
@ -332,8 +334,9 @@ between file1 and file2: >
|
|||||||
|
|
||||||
The ">" is replaced with the value of 'shellredir'.
|
The ">" is replaced with the value of 'shellredir'.
|
||||||
|
|
||||||
The output of "diff" must be a normal "ed" style diff. Do NOT use a context
|
The output of "diff" must be a normal "ed" style diff or a unified diff. Do
|
||||||
diff. This example explains the format that Vim expects: >
|
NOT use a context diff. This example explains the format that Vim expects for
|
||||||
|
the "ed" style diff: >
|
||||||
|
|
||||||
1a2
|
1a2
|
||||||
> bbb
|
> bbb
|
||||||
@ -372,12 +375,16 @@ Example (this does almost the same as 'diffexpr' being empty): >
|
|||||||
endif
|
endif
|
||||||
silent execute "!diff -a --binary " . opt . v:fname_in . " " . v:fname_new .
|
silent execute "!diff -a --binary " . opt . v:fname_in . " " . v:fname_new .
|
||||||
\ " > " . v:fname_out
|
\ " > " . v:fname_out
|
||||||
|
redraw!
|
||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
The "-a" argument is used to force comparing the files as text, comparing as
|
The "-a" argument is used to force comparing the files as text, comparing as
|
||||||
binaries isn't useful. The "--binary" argument makes the files read in binary
|
binaries isn't useful. The "--binary" argument makes the files read in binary
|
||||||
mode, so that a CTRL-Z doesn't end the text on DOS.
|
mode, so that a CTRL-Z doesn't end the text on DOS.
|
||||||
|
|
||||||
|
The `redraw!` command may not be needed, depending on whether executing a
|
||||||
|
shell command shows something on the display or not.
|
||||||
|
|
||||||
*E810* *E97*
|
*E810* *E97*
|
||||||
Vim will do a test if the diff output looks alright. If it doesn't, you will
|
Vim will do a test if the diff output looks alright. If it doesn't, you will
|
||||||
get an error message. Possible causes:
|
get an error message. Possible causes:
|
||||||
@ -429,4 +436,4 @@ evaluating 'patchexpr'. This hopefully avoids that files in the current
|
|||||||
directory are accidentally patched. Vim will also delete files starting with
|
directory are accidentally patched. Vim will also delete files starting with
|
||||||
v:fname_in and ending in ".rej" and ".orig".
|
v:fname_in and ending in ".rej" and ".orig".
|
||||||
|
|
||||||
vim:tw=78:ts=8:ft=help:norl:
|
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||||
|
@ -1484,4 +1484,4 @@ char digraph hex dec official name ~
|
|||||||
ſt ft FB05 64261 LATIN SMALL LIGATURE LONG S T
|
ſt ft FB05 64261 LATIN SMALL LIGATURE LONG S T
|
||||||
st st FB06 64262 LATIN SMALL LIGATURE ST
|
st st FB06 64262 LATIN SMALL LIGATURE ST
|
||||||
|
|
||||||
vim:tw=78:ts=8:ft=help:norl:
|
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||||
|
@ -376,6 +376,15 @@ On Unix and a few other systems you can also use backticks for the file name
|
|||||||
argument, for example: >
|
argument, for example: >
|
||||||
:next `find . -name ver\\*.c -print`
|
:next `find . -name ver\\*.c -print`
|
||||||
:view `ls -t *.patch \| head -n1`
|
:view `ls -t *.patch \| head -n1`
|
||||||
|
Vim will run the command in backticks using the 'shell' and use the standard
|
||||||
|
output as argument for the given Vim command (error messages from the shell
|
||||||
|
command will be discarded).
|
||||||
|
To see what shell command Vim is running, set the 'verbose' option to 4. When
|
||||||
|
the shell command returns a non-zero exit code, an error message will be
|
||||||
|
displayed and the Vim command will be aborted. To avoid this make the shell
|
||||||
|
always return zero like so: >
|
||||||
|
:next `find . -name ver\\*.c -print \|\| true`
|
||||||
|
|
||||||
The backslashes before the star are required to prevent the shell from
|
The backslashes before the star are required to prevent the shell from
|
||||||
expanding "ver*.c" prior to execution of the find program. The backslash
|
expanding "ver*.c" prior to execution of the find program. The backslash
|
||||||
before the shell pipe symbol "|" prevents Vim from parsing it as command
|
before the shell pipe symbol "|" prevents Vim from parsing it as command
|
||||||
@ -825,7 +834,7 @@ Note: When the 'write' option is off, you are not able to write any file.
|
|||||||
|
|
||||||
*:w* *:write*
|
*:w* *:write*
|
||||||
*E502* *E503* *E504* *E505*
|
*E502* *E503* *E504* *E505*
|
||||||
*E512* *E514* *E667* *E796*
|
*E512* *E514* *E667* *E796* *E949*
|
||||||
:w[rite] [++opt] Write the whole buffer to the current file. This is
|
:w[rite] [++opt] Write the whole buffer to the current file. This is
|
||||||
the normal way to save changes to a file. It fails
|
the normal way to save changes to a file. It fails
|
||||||
when the 'readonly' option is set or when there is
|
when the 'readonly' option is set or when there is
|
||||||
@ -881,6 +890,9 @@ used, for example, when the write fails and you want to try again later with
|
|||||||
":w #". This can be switched off by removing the 'A' flag from the
|
":w #". This can be switched off by removing the 'A' flag from the
|
||||||
'cpoptions' option.
|
'cpoptions' option.
|
||||||
|
|
||||||
|
Note that the 'fsync' option matters here. If it's set it may make writes
|
||||||
|
slower (but safer).
|
||||||
|
|
||||||
*:sav* *:saveas*
|
*:sav* *:saveas*
|
||||||
:sav[eas][!] [++opt] {file}
|
:sav[eas][!] [++opt] {file}
|
||||||
Save the current buffer under the name {file} and set
|
Save the current buffer under the name {file} and set
|
||||||
@ -1225,9 +1237,6 @@ working directory, which in turn takes precedence over the global
|
|||||||
working directory. If a local working directory (tab or window) does not
|
working directory. If a local working directory (tab or window) does not
|
||||||
exist, the next-higher scope in the hierarchy applies.
|
exist, the next-higher scope in the hierarchy applies.
|
||||||
|
|
||||||
Commands for changing the working directory can be suffixed with a bang "!"
|
|
||||||
(e.g. |:cd!|) which is ignored, for compatibility with Vim.
|
|
||||||
|
|
||||||
*:cd* *E747* *E472*
|
*:cd* *E747* *E472*
|
||||||
:cd[!] On non-Unix systems: Print the current directory
|
:cd[!] On non-Unix systems: Print the current directory
|
||||||
name. On Unix systems: Change the current directory
|
name. On Unix systems: Change the current directory
|
||||||
@ -1545,4 +1554,4 @@ There are three different types of searching:
|
|||||||
currently work with 'path' items that contain a URL or use the double star
|
currently work with 'path' items that contain a URL or use the double star
|
||||||
with depth limiter (/usr/**2) or upward search (;) notations.
|
with depth limiter (/usr/**2) or upward search (;) notations.
|
||||||
|
|
||||||
vim:tw=78:ts=8:ft=help:norl:
|
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||||
|
@ -921,6 +921,13 @@ These three can be repeated and mixed. Examples:
|
|||||||
|
|
||||||
expr8 *expr8*
|
expr8 *expr8*
|
||||||
-----
|
-----
|
||||||
|
This expression is either |expr9| or a sequence of the alternatives below,
|
||||||
|
in any order. E.g., these are all possible:
|
||||||
|
expr9[expr1].name
|
||||||
|
expr9.name[expr1]
|
||||||
|
expr9(expr1, ...)[expr1].name
|
||||||
|
|
||||||
|
|
||||||
expr8[expr1] item of String or |List| *expr-[]* *E111*
|
expr8[expr1] item of String or |List| *expr-[]* *E111*
|
||||||
*subscript*
|
*subscript*
|
||||||
|
|
||||||
@ -1508,8 +1515,7 @@ v:errmsg Last given error message. It's allowed to set this variable.
|
|||||||
:silent! next
|
:silent! next
|
||||||
:if v:errmsg != ""
|
:if v:errmsg != ""
|
||||||
: ... handle error
|
: ... handle error
|
||||||
< "errmsg" also works, for backwards compatibility.
|
<
|
||||||
|
|
||||||
*v:errors* *errors-variable*
|
*v:errors* *errors-variable*
|
||||||
v:errors Errors found by assert functions, such as |assert_true()|.
|
v:errors Errors found by assert functions, such as |assert_true()|.
|
||||||
This is a list of strings.
|
This is a list of strings.
|
||||||
@ -1528,8 +1534,8 @@ v:event Dictionary of event data for the current |autocommand|. Valid
|
|||||||
event, e.g. |DirChanged| or |TextYankPost|.
|
event, e.g. |DirChanged| or |TextYankPost|.
|
||||||
KEY DESCRIPTION ~
|
KEY DESCRIPTION ~
|
||||||
abort Whether the event triggered during
|
abort Whether the event triggered during
|
||||||
an aborting condition, i e |c_Esc| or
|
an aborting condition (e.g. |c_Esc| or
|
||||||
|c_CTRL-c|for |CmdlineLeave|.
|
|c_CTRL-C| for |CmdlineLeave|).
|
||||||
cmdlevel Level of cmdline.
|
cmdlevel Level of cmdline.
|
||||||
cmdtype Type of cmdline, |cmdline-char|.
|
cmdtype Type of cmdline, |cmdline-char|.
|
||||||
cwd Current working directory.
|
cwd Current working directory.
|
||||||
@ -1813,17 +1819,16 @@ v:shell_error Result of the last shell command. When non-zero, the last
|
|||||||
:if v:shell_error
|
:if v:shell_error
|
||||||
: echo 'could not rename "foo" to "bar"!'
|
: echo 'could not rename "foo" to "bar"!'
|
||||||
:endif
|
:endif
|
||||||
< "shell_error" also works, for backwards compatibility.
|
<
|
||||||
|
|
||||||
*v:statusmsg* *statusmsg-variable*
|
*v:statusmsg* *statusmsg-variable*
|
||||||
v:statusmsg Last given status message. It's allowed to set this variable.
|
v:statusmsg Last given status message. It's allowed to set this variable.
|
||||||
|
|
||||||
*v:stderr* *stderr-variable*
|
*v:stderr* *stderr-variable*
|
||||||
v:stderr Channel id for stderr. Unlike stdin and stdout (see
|
v:stderr |channel-id| corresponding to stderr. The value is always 2;
|
||||||
|stdioopen()|), stderr is always open for writing. This channel
|
use this variable to make your code more descriptive.
|
||||||
ID is always 2, but this variable can be used to be explicit.
|
Unlike stdin and stdout (see |stdioopen()|), stderr is always
|
||||||
Example: >
|
open for writing. Example: >
|
||||||
:call chansend(v:stderr, "something bad happened\n")
|
:call chansend(v:stderr, "error: toaster empty\n")
|
||||||
<
|
<
|
||||||
*v:swapname* *swapname-variable*
|
*v:swapname* *swapname-variable*
|
||||||
v:swapname Only valid when executing |SwapExists| autocommands: Name of
|
v:swapname Only valid when executing |SwapExists| autocommands: Name of
|
||||||
@ -1881,14 +1886,11 @@ v:termresponse The escape sequence returned by the terminal for the DA
|
|||||||
|
|
||||||
*v:testing* *testing-variable*
|
*v:testing* *testing-variable*
|
||||||
v:testing Must be set before using `test_garbagecollect_now()`.
|
v:testing Must be set before using `test_garbagecollect_now()`.
|
||||||
Also, when set certain error messages won't be shown for 2
|
|
||||||
seconds. (e.g. "'dictionary' option is empty")
|
|
||||||
|
|
||||||
*v:this_session* *this_session-variable*
|
*v:this_session* *this_session-variable*
|
||||||
v:this_session Full filename of the last loaded or saved session file. See
|
v:this_session Full filename of the last loaded or saved session file. See
|
||||||
|:mksession|. It is allowed to set this variable. When no
|
|:mksession|. It is allowed to set this variable. When no
|
||||||
session file has been saved, this variable is empty.
|
session file has been saved, this variable is empty.
|
||||||
"this_session" also works, for backwards compatibility.
|
|
||||||
|
|
||||||
*v:throwpoint* *throwpoint-variable*
|
*v:throwpoint* *throwpoint-variable*
|
||||||
v:throwpoint The point where the exception most recently caught and not
|
v:throwpoint The point where the exception most recently caught and not
|
||||||
@ -2104,6 +2106,7 @@ gettabvar({nr}, {varname} [, {def}])
|
|||||||
gettabwinvar({tabnr}, {winnr}, {name} [, {def}])
|
gettabwinvar({tabnr}, {winnr}, {name} [, {def}])
|
||||||
any {name} in {winnr} in tab page {tabnr}
|
any {name} in {winnr} in tab page {tabnr}
|
||||||
getwininfo([{winid}]) List list of windows
|
getwininfo([{winid}]) List list of windows
|
||||||
|
getwinpos([{timeout}]) List X and Y coord in pixels of the Vim window
|
||||||
getwinposx() Number X coord in pixels of GUI Vim window
|
getwinposx() Number X coord in pixels of GUI Vim window
|
||||||
getwinposy() Number Y coord in pixels of GUI Vim window
|
getwinposy() Number Y coord in pixels of GUI Vim window
|
||||||
getwinvar({nr}, {varname} [, {def}])
|
getwinvar({nr}, {varname} [, {def}])
|
||||||
@ -2132,8 +2135,6 @@ index({list}, {expr} [, {start} [, {ic}]])
|
|||||||
Number index in {list} where {expr} appears
|
Number index in {list} where {expr} appears
|
||||||
input({prompt} [, {text} [, {completion}]])
|
input({prompt} [, {text} [, {completion}]])
|
||||||
String get input from the user
|
String get input from the user
|
||||||
inputdialog({prompt} [, {text} [, {completion}]])
|
|
||||||
String like input() but in a GUI dialog
|
|
||||||
inputlist({textlist}) Number let the user pick from a choice list
|
inputlist({textlist}) Number let the user pick from a choice list
|
||||||
inputrestore() Number restore typeahead
|
inputrestore() Number restore typeahead
|
||||||
inputsave() Number save and clear typeahead
|
inputsave() Number save and clear typeahead
|
||||||
@ -2197,6 +2198,8 @@ msgpackdump({list}) List dump a list of objects to msgpack
|
|||||||
msgpackparse({list}) List parse msgpack to a list of objects
|
msgpackparse({list}) List parse msgpack to a list of objects
|
||||||
nextnonblank({lnum}) Number line nr of non-blank line >= {lnum}
|
nextnonblank({lnum}) Number line nr of non-blank line >= {lnum}
|
||||||
nr2char({expr}[, {utf8}]) String single char with ASCII/UTF8 value {expr}
|
nr2char({expr}[, {utf8}]) String single char with ASCII/UTF8 value {expr}
|
||||||
|
option_restore({list}) none restore options saved by option_save()
|
||||||
|
option_save({list}) List save options values
|
||||||
nvim_...({args}...) any call nvim |api| functions
|
nvim_...({args}...) any call nvim |api| functions
|
||||||
or({expr}, {expr}) Number bitwise OR
|
or({expr}, {expr}) Number bitwise OR
|
||||||
pathshorten({expr}) String shorten directory names in a path
|
pathshorten({expr}) String shorten directory names in a path
|
||||||
@ -2222,6 +2225,7 @@ remote_read({serverid} [, {timeout}])
|
|||||||
String read reply string
|
String read reply string
|
||||||
remote_send({server}, {string} [, {idvar}])
|
remote_send({server}, {string} [, {idvar}])
|
||||||
String send key sequence
|
String send key sequence
|
||||||
|
remote_startserver({name}) none become server {name}
|
||||||
remove({list}, {idx} [, {end}]) any remove items {idx}-{end} from {list}
|
remove({list}, {idx} [, {end}]) any remove items {idx}-{end} from {list}
|
||||||
remove({dict}, {key}) any remove entry {key} from {dict}
|
remove({dict}, {key}) any remove entry {key} from {dict}
|
||||||
rename({from}, {to}) Number rename (move) file from {from} to {to}
|
rename({from}, {to}) Number rename (move) file from {from} to {to}
|
||||||
@ -2337,6 +2341,7 @@ tolower({expr}) String the String {expr} switched to lowercase
|
|||||||
toupper({expr}) String the String {expr} switched to uppercase
|
toupper({expr}) String the String {expr} switched to uppercase
|
||||||
tr({src}, {fromstr}, {tostr}) String translate chars of {src} in {fromstr}
|
tr({src}, {fromstr}, {tostr}) String translate chars of {src} in {fromstr}
|
||||||
to chars in {tostr}
|
to chars in {tostr}
|
||||||
|
trim({text} [, {mask}]) String trim characters in {mask} from {text}
|
||||||
trunc({expr}) Float truncate Float {expr}
|
trunc({expr}) Float truncate Float {expr}
|
||||||
type({name}) Number type of variable {name}
|
type({name}) Number type of variable {name}
|
||||||
undofile({name}) String undo file name for {name}
|
undofile({name}) String undo file name for {name}
|
||||||
@ -2352,6 +2357,7 @@ win_getid([{win} [, {tab}]]) Number get |window-ID| for {win} in {tab}
|
|||||||
win_gotoid({expr}) Number go to |window-ID| {expr}
|
win_gotoid({expr}) Number go to |window-ID| {expr}
|
||||||
win_id2tabwin({expr}) List get tab and window nr from |window-ID|
|
win_id2tabwin({expr}) List get tab and window nr from |window-ID|
|
||||||
win_id2win({expr}) Number get window nr from |window-ID|
|
win_id2win({expr}) Number get window nr from |window-ID|
|
||||||
|
win_screenpos({nr}) List get screen position of window {nr}
|
||||||
winbufnr({nr}) Number buffer number of window {nr}
|
winbufnr({nr}) Number buffer number of window {nr}
|
||||||
wincol() Number window column of the cursor
|
wincol() Number window column of the cursor
|
||||||
winheight({nr}) Number height of window {nr}
|
winheight({nr}) Number height of window {nr}
|
||||||
@ -2412,10 +2418,10 @@ and({expr}, {expr}) *and()*
|
|||||||
api_info() *api_info()*
|
api_info() *api_info()*
|
||||||
Returns Dictionary of |api-metadata|.
|
Returns Dictionary of |api-metadata|.
|
||||||
|
|
||||||
append({lnum}, {expr}) *append()*
|
append({lnum}, {text}) *append()*
|
||||||
When {expr} is a |List|: Append each item of the |List| as a
|
When {text} is a |List|: Append each item of the |List| as a
|
||||||
text line below line {lnum} in the current buffer.
|
text line below line {lnum} in the current buffer.
|
||||||
Otherwise append {expr} as one text line below line {lnum} in
|
Otherwise append {text} as one text line below line {lnum} in
|
||||||
the current buffer.
|
the current buffer.
|
||||||
{lnum} can be zero to insert a line before the first one.
|
{lnum} can be zero to insert a line before the first one.
|
||||||
Returns 1 for failure ({lnum} out of range or out of memory),
|
Returns 1 for failure ({lnum} out of range or out of memory),
|
||||||
@ -2485,7 +2491,7 @@ assert_exception({error} [, {msg}]) *assert_exception()*
|
|||||||
call assert_exception('E492:')
|
call assert_exception('E492:')
|
||||||
endtry
|
endtry
|
||||||
|
|
||||||
assert_fails({cmd} [, {error}]) *assert_fails()*
|
assert_fails({cmd} [, {error} [, {msg}]]) *assert_fails()*
|
||||||
Run {cmd} and add an error message to |v:errors| if it does
|
Run {cmd} and add an error message to |v:errors| if it does
|
||||||
NOT produce an error.
|
NOT produce an error.
|
||||||
When {error} is given it must match in |v:errmsg|.
|
When {error} is given it must match in |v:errmsg|.
|
||||||
@ -2610,6 +2616,8 @@ bufexists({expr}) *bufexists()*
|
|||||||
The result is a Number, which is |TRUE| if a buffer called
|
The result is a Number, which is |TRUE| if a buffer called
|
||||||
{expr} exists.
|
{expr} exists.
|
||||||
If the {expr} argument is a number, buffer numbers are used.
|
If the {expr} argument is a number, buffer numbers are used.
|
||||||
|
Number zero is the alternate buffer for the current window.
|
||||||
|
|
||||||
If the {expr} argument is a string it must match a buffer name
|
If the {expr} argument is a string it must match a buffer name
|
||||||
exactly. The name can be:
|
exactly. The name can be:
|
||||||
- Relative to the current directory.
|
- Relative to the current directory.
|
||||||
@ -2771,7 +2779,7 @@ changenr() *changenr()*
|
|||||||
redo it is the number of the redone change. After undo it is
|
redo it is the number of the redone change. After undo it is
|
||||||
one less than the number of the undone change.
|
one less than the number of the undone change.
|
||||||
|
|
||||||
chanclose({id}[, {stream}]) {Nvim} *chanclose()*
|
chanclose({id}[, {stream}]) *chanclose()*
|
||||||
Close a channel or a specific stream associated with it.
|
Close a channel or a specific stream associated with it.
|
||||||
For a job, {stream} can be one of "stdin", "stdout",
|
For a job, {stream} can be one of "stdin", "stdout",
|
||||||
"stderr" or "rpc" (closes stdin/stdout for a job started
|
"stderr" or "rpc" (closes stdin/stdout for a job started
|
||||||
@ -2781,7 +2789,7 @@ chanclose({id}[, {stream}]) {Nvim} *chanclose()*
|
|||||||
For a socket, there is only one stream, and {stream} should be
|
For a socket, there is only one stream, and {stream} should be
|
||||||
ommited.
|
ommited.
|
||||||
|
|
||||||
chansend({id}, {data}) {Nvim} *chansend()*
|
chansend({id}, {data}) *chansend()*
|
||||||
Send data to channel {id}. For a job, it writes it to the
|
Send data to channel {id}. For a job, it writes it to the
|
||||||
stdin of the process. For the stdio channel |channel-stdio|,
|
stdin of the process. For the stdio channel |channel-stdio|,
|
||||||
it writes to Nvim's stdout. Returns the number of bytes
|
it writes to Nvim's stdout. Returns the number of bytes
|
||||||
@ -2913,7 +2921,7 @@ confirm({msg} [, {choices} [, {default} [, {type}]]])
|
|||||||
made. It returns the number of the choice. For the first
|
made. It returns the number of the choice. For the first
|
||||||
choice this is 1.
|
choice this is 1.
|
||||||
|
|
||||||
{msg} is displayed in a |dialog| with {choices} as the
|
{msg} is displayed in a dialog with {choices} as the
|
||||||
alternatives. When {choices} is missing or empty, "&OK" is
|
alternatives. When {choices} is missing or empty, "&OK" is
|
||||||
used (and translated).
|
used (and translated).
|
||||||
{msg} is a String, use '\n' to include a newline. Only on
|
{msg} is a String, use '\n' to include a newline. Only on
|
||||||
@ -2991,11 +2999,16 @@ cosh({expr}) *cosh()*
|
|||||||
|
|
||||||
count({comp}, {expr} [, {ic} [, {start}]]) *count()*
|
count({comp}, {expr} [, {ic} [, {start}]]) *count()*
|
||||||
Return the number of times an item with value {expr} appears
|
Return the number of times an item with value {expr} appears
|
||||||
in |List| or |Dictionary| {comp}.
|
in |String|, |List| or |Dictionary| {comp}.
|
||||||
|
|
||||||
If {start} is given then start with the item with this index.
|
If {start} is given then start with the item with this index.
|
||||||
{start} can only be used with a |List|.
|
{start} can only be used with a |List|.
|
||||||
|
|
||||||
When {ic} is given and it's |TRUE| then case is ignored.
|
When {ic} is given and it's |TRUE| then case is ignored.
|
||||||
|
|
||||||
|
When {comp} is a string then the number of not overlapping
|
||||||
|
occurrences of {expr} is returned. Zero is returned when
|
||||||
|
{expr} is an empty string.
|
||||||
|
|
||||||
*cscope_connection()*
|
*cscope_connection()*
|
||||||
cscope_connection([{num} , {dbpath} [, {prepend}]])
|
cscope_connection([{num} , {dbpath} [, {prepend}]])
|
||||||
@ -3224,12 +3237,12 @@ executable({expr}) *executable()*
|
|||||||
On Windows it only checks if the file exists and
|
On Windows it only checks if the file exists and
|
||||||
is not a directory, not if it's really executable.
|
is not a directory, not if it's really executable.
|
||||||
On Windows an executable in the same directory as Vim is
|
On Windows an executable in the same directory as Vim is
|
||||||
always found. Since this directory is added to $PATH it
|
always found (it is added to $PATH at |startup|).
|
||||||
should also work to execute it |win32-PATH|.
|
|
||||||
The result is a Number:
|
The result is a Number:
|
||||||
1 exists
|
1 exists
|
||||||
0 does not exist
|
0 does not exist
|
||||||
-1 not implemented on this system
|
-1 not implemented on this system
|
||||||
|
|exepath()| can be used to get the full path of an executable.
|
||||||
|
|
||||||
execute({command} [, {silent}]) *execute()*
|
execute({command} [, {silent}]) *execute()*
|
||||||
Execute {command} and capture its output.
|
Execute {command} and capture its output.
|
||||||
@ -3364,9 +3377,7 @@ expand({expr} [, {nosuf} [, {list}]]) *expand()*
|
|||||||
|
|
||||||
If {list} is given and it is |TRUE|, a List will be returned.
|
If {list} is given and it is |TRUE|, a List will be returned.
|
||||||
Otherwise the result is a String and when there are several
|
Otherwise the result is a String and when there are several
|
||||||
matches, they are separated by <NL> characters. [Note: in
|
matches, they are separated by <NL> characters.
|
||||||
version 5.0 a space was used, which caused problems when a
|
|
||||||
file name contains a space]
|
|
||||||
|
|
||||||
If the expansion fails, the result is an empty string. A name
|
If the expansion fails, the result is an empty string. A name
|
||||||
for a non-existing file is not included, unless {expr} does
|
for a non-existing file is not included, unless {expr} does
|
||||||
@ -3427,7 +3438,7 @@ expand({expr} [, {nosuf} [, {list}]]) *expand()*
|
|||||||
all "README" files in the current directory and below: >
|
all "README" files in the current directory and below: >
|
||||||
:echo expand("**/README")
|
:echo expand("**/README")
|
||||||
<
|
<
|
||||||
Expand() can also be used to expand variables and environment
|
expand() can also be used to expand variables and environment
|
||||||
variables that are only known in a shell. But this can be
|
variables that are only known in a shell. But this can be
|
||||||
slow, because a shell may be used to do the expansion. See
|
slow, because a shell may be used to do the expansion. See
|
||||||
|expr-env-expand|.
|
|expr-env-expand|.
|
||||||
@ -3809,8 +3820,7 @@ garbagecollect([{atexit}]) *garbagecollect()*
|
|||||||
|
|
||||||
The garbage collection is not done immediately but only when
|
The garbage collection is not done immediately but only when
|
||||||
it's safe to perform. This is when waiting for the user to
|
it's safe to perform. This is when waiting for the user to
|
||||||
type a character. To force garbage collection immediately use
|
type a character.
|
||||||
|test_garbagecollect_now()|.
|
|
||||||
|
|
||||||
get({list}, {idx} [, {default}]) *get()*
|
get({list}, {idx} [, {default}]) *get()*
|
||||||
Get item {idx} from |List| {list}. When this item is not
|
Get item {idx} from |List| {list}. When this item is not
|
||||||
@ -3879,7 +3889,7 @@ getbufinfo([{dict}])
|
|||||||
endfor
|
endfor
|
||||||
<
|
<
|
||||||
To get buffer-local options use: >
|
To get buffer-local options use: >
|
||||||
getbufvar({bufnr}, '&')
|
getbufvar({bufnr}, '&option_name')
|
||||||
|
|
||||||
<
|
<
|
||||||
*getbufline()*
|
*getbufline()*
|
||||||
@ -4040,6 +4050,8 @@ getcmdline() *getcmdline()*
|
|||||||
Example: >
|
Example: >
|
||||||
:cmap <F7> <C-\>eescape(getcmdline(), ' \')<CR>
|
:cmap <F7> <C-\>eescape(getcmdline(), ' \')<CR>
|
||||||
< Also see |getcmdtype()|, |getcmdpos()| and |setcmdpos()|.
|
< Also see |getcmdtype()|, |getcmdpos()| and |setcmdpos()|.
|
||||||
|
Returns an empty string when entering a password or using
|
||||||
|
|inputsecret()|.
|
||||||
|
|
||||||
getcmdpos() *getcmdpos()*
|
getcmdpos() *getcmdpos()*
|
||||||
Return the position of the cursor in the command line as a
|
Return the position of the cursor in the command line as a
|
||||||
@ -4074,6 +4086,7 @@ getcompletion({pat}, {type} [, {filtered}]) *getcompletion()*
|
|||||||
specifies what for. The following completion types are
|
specifies what for. The following completion types are
|
||||||
supported:
|
supported:
|
||||||
|
|
||||||
|
arglist file names in argument list
|
||||||
augroup autocmd groups
|
augroup autocmd groups
|
||||||
buffer buffer names
|
buffer buffer names
|
||||||
behave :behave suboptions
|
behave :behave suboptions
|
||||||
@ -4094,6 +4107,7 @@ getcompletion({pat}, {type} [, {filtered}]) *getcompletion()*
|
|||||||
highlight highlight groups
|
highlight highlight groups
|
||||||
history :history suboptions
|
history :history suboptions
|
||||||
locale locale names (as output of locale -a)
|
locale locale names (as output of locale -a)
|
||||||
|
mapclear buffer argument
|
||||||
mapping mapping name
|
mapping mapping name
|
||||||
menu menus
|
menu menus
|
||||||
messages |:messages| suboptions
|
messages |:messages| suboptions
|
||||||
@ -4303,6 +4317,7 @@ getqflist([{what}]) *getqflist()*
|
|||||||
list item is a dictionary with these entries:
|
list item is a dictionary with these entries:
|
||||||
bufnr number of buffer that has the file name, use
|
bufnr number of buffer that has the file name, use
|
||||||
bufname() to get the name
|
bufname() to get the name
|
||||||
|
module module name
|
||||||
lnum line number in the buffer (first line is 1)
|
lnum line number in the buffer (first line is 1)
|
||||||
col column number (first column is 1)
|
col column number (first column is 1)
|
||||||
vcol |TRUE|: "col" is visual column
|
vcol |TRUE|: "col" is visual column
|
||||||
@ -4327,34 +4342,63 @@ getqflist([{what}]) *getqflist()*
|
|||||||
If the optional {what} dictionary argument is supplied, then
|
If the optional {what} dictionary argument is supplied, then
|
||||||
returns only the items listed in {what} as a dictionary. The
|
returns only the items listed in {what} as a dictionary. The
|
||||||
following string items are supported in {what}:
|
following string items are supported in {what}:
|
||||||
context get the context stored with |setqflist()|
|
changedtick get the total number of changes made
|
||||||
|
to the list |quickfix-changedtick|
|
||||||
|
context get the |quickfix-context|
|
||||||
|
efm errorformat to use when parsing "lines". If
|
||||||
|
not present, then the 'errorformat' option
|
||||||
|
value is used.
|
||||||
|
id get information for the quickfix list with
|
||||||
|
|quickfix-ID|; zero means the id for the
|
||||||
|
current list or the list specified by "nr"
|
||||||
|
idx index of the current entry in the list
|
||||||
items quickfix list entries
|
items quickfix list entries
|
||||||
|
lines parse a list of lines using 'efm' and return
|
||||||
|
the resulting entries. Only a |List| type is
|
||||||
|
accepted. The current quickfix list is not
|
||||||
|
modified. See |quickfix-parse|.
|
||||||
nr get information for this quickfix list; zero
|
nr get information for this quickfix list; zero
|
||||||
means the current quickfix list and '$' means
|
means the current quickfix list and "$" means
|
||||||
the last quickfix list
|
the last quickfix list
|
||||||
title get the list title
|
size number of entries in the quickfix list
|
||||||
winid get the |window-ID| (if opened)
|
title get the list title |quickfix-title|
|
||||||
|
winid get the quickfix |window-ID|
|
||||||
all all of the above quickfix properties
|
all all of the above quickfix properties
|
||||||
Non-string items in {what} are ignored.
|
Non-string items in {what} are ignored. To get the value of a
|
||||||
|
particular item, set it to zero.
|
||||||
If "nr" is not present then the current quickfix list is used.
|
If "nr" is not present then the current quickfix list is used.
|
||||||
To get the number of lists in the quickfix stack, set 'nr' to
|
If both "nr" and a non-zero "id" are specified, then the list
|
||||||
'$' in {what}. The 'nr' value in the returned dictionary
|
specified by "id" is used.
|
||||||
|
To get the number of lists in the quickfix stack, set "nr" to
|
||||||
|
"$" in {what}. The "nr" value in the returned dictionary
|
||||||
contains the quickfix stack size.
|
contains the quickfix stack size.
|
||||||
In case of error processing {what}, an empty dictionary is
|
When "lines" is specified, all the other items except "efm"
|
||||||
returned.
|
are ignored. The returned dictionary contains the entry
|
||||||
|
"items" with the list of entries.
|
||||||
|
|
||||||
The returned dictionary contains the following entries:
|
The returned dictionary contains the following entries:
|
||||||
context context information stored with |setqflist()|
|
changedtick total number of changes made to the
|
||||||
items quickfix list entries
|
list |quickfix-changedtick|
|
||||||
nr quickfix list number
|
context quickfix list context. See |quickfix-context|
|
||||||
title quickfix list title text
|
If not present, set to "".
|
||||||
winid quickfix |window-ID| (if opened)
|
id quickfix list ID |quickfix-ID|. If not
|
||||||
|
present, set to 0.
|
||||||
|
idx index of the current entry in the list. If not
|
||||||
|
present, set to 0.
|
||||||
|
items quickfix list entries. If not present, set to
|
||||||
|
an empty list.
|
||||||
|
nr quickfix list number. If not present, set to 0
|
||||||
|
size number of entries in the quickfix list. If not
|
||||||
|
present, set to 0.
|
||||||
|
title quickfix list title text. If not present, set
|
||||||
|
to "".
|
||||||
|
winid quickfix |window-ID|. If not present, set to 0
|
||||||
|
|
||||||
Examples: >
|
Examples (See also |getqflist-examples|): >
|
||||||
:echo getqflist({'all': 1})
|
:echo getqflist({'all': 1})
|
||||||
:echo getqflist({'nr': 2, 'title': 1})
|
:echo getqflist({'nr': 2, 'title': 1})
|
||||||
|
:echo getqflist({'lines' : ["F1:10:L10"]})
|
||||||
<
|
<
|
||||||
|
|
||||||
getreg([{regname} [, 1 [, {list}]]]) *getreg()*
|
getreg([{regname} [, 1 [, {list}]]]) *getreg()*
|
||||||
The result is a String, which is the contents of register
|
The result is a String, which is the contents of register
|
||||||
{regname}. Example: >
|
{regname}. Example: >
|
||||||
@ -4433,6 +4477,9 @@ gettabwinvar({tabnr}, {winnr}, {varname} [, {def}]) *gettabwinvar()*
|
|||||||
:let list_is_on = gettabwinvar(1, 2, '&list')
|
:let list_is_on = gettabwinvar(1, 2, '&list')
|
||||||
:echo "myvar = " . gettabwinvar(3, 1, 'myvar')
|
:echo "myvar = " . gettabwinvar(3, 1, 'myvar')
|
||||||
<
|
<
|
||||||
|
To obtain all window-local variables use: >
|
||||||
|
gettabwinvar({tabnr}, {winnr}, '&')
|
||||||
|
|
||||||
*getwinposx()*
|
*getwinposx()*
|
||||||
getwinposx() The result is a Number, which is the X coordinate in pixels of
|
getwinposx() The result is a Number, which is the X coordinate in pixels of
|
||||||
the left hand side of the GUI Vim window. The result will be
|
the left hand side of the GUI Vim window. The result will be
|
||||||
@ -4458,19 +4505,18 @@ getwininfo([{winid}]) *getwininfo()*
|
|||||||
Each List item is a Dictionary with the following entries:
|
Each List item is a Dictionary with the following entries:
|
||||||
bufnr number of buffer in the window
|
bufnr number of buffer in the window
|
||||||
height window height (excluding winbar)
|
height window height (excluding winbar)
|
||||||
winbar 1 if the window has a toolbar, 0
|
|
||||||
otherwise
|
|
||||||
loclist 1 if showing a location list
|
loclist 1 if showing a location list
|
||||||
quickfix 1 if quickfix or location list window
|
quickfix 1 if quickfix or location list window
|
||||||
tabnr tab page number
|
tabnr tab page number
|
||||||
variables a reference to the dictionary with
|
variables a reference to the dictionary with
|
||||||
window-local variables
|
window-local variables
|
||||||
width window width
|
width window width
|
||||||
|
winbar 1 if the window has a toolbar, 0
|
||||||
|
otherwise
|
||||||
|
wincol leftmost screen column of the window
|
||||||
winid |window-ID|
|
winid |window-ID|
|
||||||
winnr window number
|
winnr window number
|
||||||
|
winrow topmost screen column of the window
|
||||||
To obtain all window-local variables use: >
|
|
||||||
gettabwinvar({tabnr}, {winnr}, '&')
|
|
||||||
|
|
||||||
getwinvar({winnr}, {varname} [, {def}]) *getwinvar()*
|
getwinvar({winnr}, {varname} [, {def}]) *getwinvar()*
|
||||||
Like |gettabwinvar()| for the current tabpage.
|
Like |gettabwinvar()| for the current tabpage.
|
||||||
@ -4799,7 +4845,7 @@ input({opts})
|
|||||||
where
|
where
|
||||||
hl_start_col is the first highlighted column,
|
hl_start_col is the first highlighted column,
|
||||||
hl_end_col is the last highlighted column (+ 1!),
|
hl_end_col is the last highlighted column (+ 1!),
|
||||||
hl_group is |:hl| group used for highlighting.
|
hl_group is |:hi| group used for highlighting.
|
||||||
*E5403* *E5404* *E5405* *E5406*
|
*E5403* *E5404* *E5405* *E5406*
|
||||||
Both hl_start_col and hl_end_col + 1 must point to the start
|
Both hl_start_col and hl_end_col + 1 must point to the start
|
||||||
of the multibyte character (highlighting must not break
|
of the multibyte character (highlighting must not break
|
||||||
@ -4862,20 +4908,6 @@ input({opts})
|
|||||||
: call inputrestore()
|
: call inputrestore()
|
||||||
:endfunction
|
:endfunction
|
||||||
|
|
||||||
inputdialog({prompt} [, {text} [, {cancelreturn}]]) *inputdialog()*
|
|
||||||
inputdialog({opts})
|
|
||||||
Like |input()|, but when the GUI is running and text dialogs
|
|
||||||
are supported, a dialog window pops up to input the text.
|
|
||||||
Example: >
|
|
||||||
:let n = inputdialog("value for shiftwidth", shiftwidth())
|
|
||||||
:if n != ""
|
|
||||||
: let &sw = n
|
|
||||||
:endif
|
|
||||||
< When the dialog is cancelled {cancelreturn} is returned. When
|
|
||||||
omitted an empty string is returned.
|
|
||||||
Hitting <Enter> works like pressing the OK button. Hitting
|
|
||||||
<Esc> works like pressing the Cancel button.
|
|
||||||
|
|
||||||
inputlist({textlist}) *inputlist()*
|
inputlist({textlist}) *inputlist()*
|
||||||
{textlist} must be a |List| of strings. This |List| is
|
{textlist} must be a |List| of strings. This |List| is
|
||||||
displayed, one string per line. The user will be prompted to
|
displayed, one string per line. The user will be prompted to
|
||||||
@ -4993,15 +5025,17 @@ jobstart({cmd}[, {opts}]) *jobstart()*
|
|||||||
:call jobstart(split(&shell) + split(&shellcmdflag) + ['{cmd}'])
|
:call jobstart(split(&shell) + split(&shellcmdflag) + ['{cmd}'])
|
||||||
< (See |shell-unquoting| for details.)
|
< (See |shell-unquoting| for details.)
|
||||||
|
|
||||||
|
Example: >
|
||||||
|
:call jobstart('nvim -h', {'on_stdout':{j,d,e->append(line('.'),d)}})
|
||||||
|
<
|
||||||
Returns |job-id| on success, 0 on invalid arguments (or job
|
Returns |job-id| on success, 0 on invalid arguments (or job
|
||||||
table is full), -1 if {cmd}[0] or 'shell' is not executable.
|
table is full), -1 if {cmd}[0] or 'shell' is not executable.
|
||||||
For communication over the job's stdio, it is represented as a
|
The returned job-id is a valid |channel-id| representing the
|
||||||
|channel|, and a channel ID is returned on success. Use
|
job's stdio streams. Use |chansend()| (or |rpcnotify()| and
|
||||||
|chansend()| (or |rpcnotify()| and |rpcrequest()| if "rpc" option
|
|rpcrequest()| if "rpc" was enabled) to send data to stdin and
|
||||||
was used) to send data to stdin and |chanclose()| to close stdio
|
|chanclose()| to close the streams without stopping the job.
|
||||||
streams without stopping the job explicitly.
|
|
||||||
|
|
||||||
See |job-control| and |rpc|.
|
See |job-control| and |RPC|.
|
||||||
|
|
||||||
NOTE: on Windows if {cmd} is a List:
|
NOTE: on Windows if {cmd} is a List:
|
||||||
- cmd[0] must be an executable (not a "built-in"). If it is
|
- cmd[0] must be an executable (not a "built-in"). If it is
|
||||||
@ -5043,7 +5077,7 @@ jobstart({cmd}[, {opts}]) *jobstart()*
|
|||||||
- The channel ID on success
|
- The channel ID on success
|
||||||
- 0 on invalid arguments
|
- 0 on invalid arguments
|
||||||
- -1 if {cmd}[0] is not executable.
|
- -1 if {cmd}[0] is not executable.
|
||||||
See |job-control|, |channels|, and |msgpack-rpc| for more information.
|
See also |job-control|, |channel|, |msgpack-rpc|.
|
||||||
|
|
||||||
jobstop({id}) *jobstop()*
|
jobstop({id}) *jobstop()*
|
||||||
Stop |job-id| {id} by sending SIGTERM to the job process. If
|
Stop |job-id| {id} by sending SIGTERM to the job process. If
|
||||||
@ -5053,18 +5087,24 @@ jobstop({id}) *jobstop()*
|
|||||||
See |job-control|.
|
See |job-control|.
|
||||||
|
|
||||||
jobwait({ids}[, {timeout}]) *jobwait()*
|
jobwait({ids}[, {timeout}]) *jobwait()*
|
||||||
Wait for a set of jobs to finish. The {ids} argument is a list
|
Wait for a set of jobs to complete.
|
||||||
of |job-id|s to wait for. {timeout} is the maximum number of
|
|
||||||
milliseconds to wait. During jobwait(), callbacks for jobs not
|
{ids} is a list of |job-id|s to wait for.
|
||||||
in the {ids} list may be invoked. The screen will not redraw
|
{timeout} is the maximum number of milliseconds to wait.
|
||||||
unless |:redraw| is invoked by a callback.
|
{timeout} of zero can be used to check if a job-id is valid,
|
||||||
|
without waiting.
|
||||||
|
|
||||||
|
During jobwait() callbacks for jobs not in the {ids} list may
|
||||||
|
be invoked. The screen will not redraw unless |:redraw| is
|
||||||
|
invoked by a callback.
|
||||||
|
|
||||||
Returns a list of len({ids}) integers, where each integer is
|
Returns a list of len({ids}) integers, where each integer is
|
||||||
the wait-result of the corresponding job. Each wait-result is:
|
the wait-result of the corresponding job. Each wait-result is
|
||||||
Job exit-code, if the job exited
|
one of the following:
|
||||||
-1 if the wait timed out for the job
|
* Exit-code, if the job exited
|
||||||
-2 if the job was interrupted
|
* -1 if the timeout was exceeded
|
||||||
-3 if the |job-id| is invalid.
|
* -2 if the job was interrupted
|
||||||
|
* -3 if the |job-id| is invalid
|
||||||
|
|
||||||
join({list} [, {sep}]) *join()*
|
join({list} [, {sep}]) *join()*
|
||||||
Join the items in {list} together into one String.
|
Join the items in {list} together into one String.
|
||||||
@ -5182,8 +5222,10 @@ line({expr}) The result is a Number, which is the line number of the file
|
|||||||
$ the last line in the current buffer
|
$ the last line in the current buffer
|
||||||
'x position of mark x (if the mark is not set, 0 is
|
'x position of mark x (if the mark is not set, 0 is
|
||||||
returned)
|
returned)
|
||||||
w0 first line visible in current window
|
w0 first line visible in current window (one if the
|
||||||
w$ last line visible in current window
|
display isn't updated, e.g. in silent Ex mode)
|
||||||
|
w$ last line visible in current window (this is one
|
||||||
|
less than "w0" if no lines are visible)
|
||||||
v In Visual mode: the start of the Visual area (the
|
v In Visual mode: the start of the Visual area (the
|
||||||
cursor is the end). When not in Visual mode
|
cursor is the end). When not in Visual mode
|
||||||
returns the cursor position. Differs from |'<| in
|
returns the cursor position. Differs from |'<| in
|
||||||
@ -5304,7 +5346,8 @@ maparg({name} [, {mode} [, {abbr} [, {dict}]]]) *maparg()*
|
|||||||
listing.
|
listing.
|
||||||
|
|
||||||
When there is no mapping for {name}, an empty String is
|
When there is no mapping for {name}, an empty String is
|
||||||
returned.
|
returned. When the mapping for {name} is empty, then "<Nop>"
|
||||||
|
is returned.
|
||||||
|
|
||||||
The {name} can have special key names, like in the ":map"
|
The {name} can have special key names, like in the ":map"
|
||||||
command.
|
command.
|
||||||
@ -5371,9 +5414,10 @@ mapcheck({name} [, {mode} [, {abbr}]]) *mapcheck()*
|
|||||||
mapping that matches with {name}, while maparg() only finds a
|
mapping that matches with {name}, while maparg() only finds a
|
||||||
mapping for {name} exactly.
|
mapping for {name} exactly.
|
||||||
When there is no mapping that starts with {name}, an empty
|
When there is no mapping that starts with {name}, an empty
|
||||||
String is returned. If there is one, the rhs of that mapping
|
String is returned. If there is one, the RHS of that mapping
|
||||||
is returned. If there are several mappings that start with
|
is returned. If there are several mappings that start with
|
||||||
{name}, the rhs of one of them is returned.
|
{name}, the RHS of one of them is returned. This will be
|
||||||
|
"<Nop>" if the RHS is empty.
|
||||||
The mappings local to the current buffer are checked first,
|
The mappings local to the current buffer are checked first,
|
||||||
then the global mappings.
|
then the global mappings.
|
||||||
This function can be used to check if a mapping can be added
|
This function can be used to check if a mapping can be added
|
||||||
@ -5388,11 +5432,14 @@ match({expr}, {pat} [, {start} [, {count}]]) *match()*
|
|||||||
When {expr} is a |List| then this returns the index of the
|
When {expr} is a |List| then this returns the index of the
|
||||||
first item where {pat} matches. Each item is used as a
|
first item where {pat} matches. Each item is used as a
|
||||||
String, |Lists| and |Dictionaries| are used as echoed.
|
String, |Lists| and |Dictionaries| are used as echoed.
|
||||||
|
|
||||||
Otherwise, {expr} is used as a String. The result is a
|
Otherwise, {expr} is used as a String. The result is a
|
||||||
Number, which gives the index (byte offset) in {expr} where
|
Number, which gives the index (byte offset) in {expr} where
|
||||||
{pat} matches.
|
{pat} matches.
|
||||||
|
|
||||||
A match at the first character or |List| item returns zero.
|
A match at the first character or |List| item returns zero.
|
||||||
If there is no match -1 is returned.
|
If there is no match -1 is returned.
|
||||||
|
|
||||||
For getting submatches see |matchlist()|.
|
For getting submatches see |matchlist()|.
|
||||||
Example: >
|
Example: >
|
||||||
:echo match("testing", "ing") " results in 4
|
:echo match("testing", "ing") " results in 4
|
||||||
@ -5529,8 +5576,6 @@ matchaddpos({group}, {pos} [, {priority} [, {id} [, {dict}]]])
|
|||||||
< Matches added by |matchaddpos()| are returned by
|
< Matches added by |matchaddpos()| are returned by
|
||||||
|getmatches()| with an entry "pos1", "pos2", etc., with the
|
|getmatches()| with an entry "pos1", "pos2", etc., with the
|
||||||
value a list like the {pos} item.
|
value a list like the {pos} item.
|
||||||
These matches cannot be set via |setmatches()|, however they
|
|
||||||
can still be deleted by |clearmatches()|.
|
|
||||||
|
|
||||||
matcharg({nr}) *matcharg()*
|
matcharg({nr}) *matcharg()*
|
||||||
Selects the {nr} match item, as set with a |:match|,
|
Selects the {nr} match item, as set with a |:match|,
|
||||||
@ -5680,7 +5725,7 @@ mkdir({name} [, {path} [, {prot}]])
|
|||||||
the new directory. The default is 0755 (rwxr-xr-x: r/w for
|
the new directory. The default is 0755 (rwxr-xr-x: r/w for
|
||||||
the user readable for others). Use 0700 to make it unreadable
|
the user readable for others). Use 0700 to make it unreadable
|
||||||
for others.
|
for others.
|
||||||
{Nvim}
|
|
||||||
{prot} is applied for all parts of {name}. Thus if you create
|
{prot} is applied for all parts of {name}. Thus if you create
|
||||||
/tmp/foo/bar then /tmp/foo will be created with 0700. Example: >
|
/tmp/foo/bar then /tmp/foo will be created with 0700. Example: >
|
||||||
:call mkdir($HOME . "/tmp/foo/bar", "p", 0700)
|
:call mkdir($HOME . "/tmp/foo/bar", "p", 0700)
|
||||||
@ -5723,7 +5768,7 @@ mode([expr]) Return a string that indicates the current mode.
|
|||||||
"c" or "n".
|
"c" or "n".
|
||||||
Also see |visualmode()|.
|
Also see |visualmode()|.
|
||||||
|
|
||||||
msgpackdump({list}) {Nvim} *msgpackdump()*
|
msgpackdump({list}) *msgpackdump()*
|
||||||
Convert a list of VimL objects to msgpack. Returned value is
|
Convert a list of VimL objects to msgpack. Returned value is
|
||||||
|readfile()|-style list. Example: >
|
|readfile()|-style list. Example: >
|
||||||
call writefile(msgpackdump([{}]), 'fname.mpack', 'b')
|
call writefile(msgpackdump([{}]), 'fname.mpack', 'b')
|
||||||
@ -5738,7 +5783,7 @@ msgpackdump({list}) {Nvim} *msgpackdump()*
|
|||||||
4. Other strings are always dumped as BIN strings.
|
4. Other strings are always dumped as BIN strings.
|
||||||
5. Points 3. and 4. do not apply to |msgpack-special-dict|s.
|
5. Points 3. and 4. do not apply to |msgpack-special-dict|s.
|
||||||
|
|
||||||
msgpackparse({list}) {Nvim} *msgpackparse()*
|
msgpackparse({list}) *msgpackparse()*
|
||||||
Convert a |readfile()|-style list to a list of VimL objects.
|
Convert a |readfile()|-style list to a list of VimL objects.
|
||||||
Example: >
|
Example: >
|
||||||
let fname = expand('~/.config/nvim/shada/main.shada')
|
let fname = expand('~/.config/nvim/shada/main.shada')
|
||||||
@ -6194,15 +6239,17 @@ reltimestr({time}) *reltimestr()*
|
|||||||
< Also see |profiling|.
|
< Also see |profiling|.
|
||||||
|
|
||||||
*remote_expr()* *E449*
|
*remote_expr()* *E449*
|
||||||
remote_expr({server}, {string} [, {idvar}])
|
remote_expr({server}, {string} [, {idvar} [, {timeout}]])
|
||||||
Send the {string} to {server}. The string is sent as an
|
Send the {string} to {server}. The string is sent as an
|
||||||
expression and the result is returned after evaluation.
|
expression and the result is returned after evaluation.
|
||||||
The result must be a String or a |List|. A |List| is turned
|
The result must be a String or a |List|. A |List| is turned
|
||||||
into a String by joining the items with a line break in
|
into a String by joining the items with a line break in
|
||||||
between (not at the end), like with join(expr, "\n").
|
between (not at the end), like with join(expr, "\n").
|
||||||
If {idvar} is present, it is taken as the name of a
|
If {idvar} is present and not empty, it is taken as the name
|
||||||
variable and a {serverid} for later use with
|
of a variable and a {serverid} for later use with
|
||||||
remote_read() is stored there.
|
remote_read() is stored there.
|
||||||
|
If {timeout} is given the read times out after this many
|
||||||
|
seconds. Otherwise a timeout of 600 seconds is used.
|
||||||
See also |clientserver| |RemoteReply|.
|
See also |clientserver| |RemoteReply|.
|
||||||
This function is not available in the |sandbox|.
|
This function is not available in the |sandbox|.
|
||||||
{only available when compiled with the |+clientserver| feature}
|
{only available when compiled with the |+clientserver| feature}
|
||||||
@ -6246,9 +6293,10 @@ remote_peek({serverid} [, {retvar}]) *remote_peek()*
|
|||||||
:let repl = ""
|
:let repl = ""
|
||||||
:echo "PEEK: ".remote_peek(id, "repl").": ".repl
|
:echo "PEEK: ".remote_peek(id, "repl").": ".repl
|
||||||
|
|
||||||
remote_read({serverid}) *remote_read()*
|
remote_read({serverid}, [{timeout}]) *remote_read()*
|
||||||
Return the oldest available reply from {serverid} and consume
|
Return the oldest available reply from {serverid} and consume
|
||||||
it. It blocks until a reply is available.
|
it. Unless a {timeout} in seconds is given, it blocks until a
|
||||||
|
reply is available.
|
||||||
See also |clientserver|.
|
See also |clientserver|.
|
||||||
This function is not available in the |sandbox|.
|
This function is not available in the |sandbox|.
|
||||||
{only available when compiled with the |+clientserver| feature}
|
{only available when compiled with the |+clientserver| feature}
|
||||||
@ -6266,6 +6314,7 @@ remote_send({server}, {string} [, {idvar}])
|
|||||||
See also |clientserver| |RemoteReply|.
|
See also |clientserver| |RemoteReply|.
|
||||||
This function is not available in the |sandbox|.
|
This function is not available in the |sandbox|.
|
||||||
{only available when compiled with the |+clientserver| feature}
|
{only available when compiled with the |+clientserver| feature}
|
||||||
|
|
||||||
Note: Any errors will be reported in the server and may mess
|
Note: Any errors will be reported in the server and may mess
|
||||||
up the display.
|
up the display.
|
||||||
Examples: >
|
Examples: >
|
||||||
@ -6277,6 +6326,12 @@ remote_send({server}, {string} [, {idvar}])
|
|||||||
:echo remote_send("gvim", ":sleep 10 | echo ".
|
:echo remote_send("gvim", ":sleep 10 | echo ".
|
||||||
\ 'server2client(expand("<client>"), "HELLO")<CR>')
|
\ 'server2client(expand("<client>"), "HELLO")<CR>')
|
||||||
<
|
<
|
||||||
|
*remote_startserver()* *E941* *E942*
|
||||||
|
remote_startserver({name})
|
||||||
|
Become the server {name}. This fails if already running as a
|
||||||
|
server, when |v:servername| is not empty.
|
||||||
|
{only available when compiled with the |+clientserver| feature}
|
||||||
|
|
||||||
remove({list}, {idx} [, {end}]) *remove()*
|
remove({list}, {idx} [, {end}]) *remove()*
|
||||||
Without {end}: Remove the item at {idx} from |List| {list} and
|
Without {end}: Remove the item at {idx} from |List| {list} and
|
||||||
return the item.
|
return the item.
|
||||||
@ -6346,30 +6401,28 @@ round({expr}) *round()*
|
|||||||
echo round(-4.5)
|
echo round(-4.5)
|
||||||
< -5.0
|
< -5.0
|
||||||
|
|
||||||
rpcnotify({channel}, {event}[, {args}...]) {Nvim} *rpcnotify()*
|
rpcnotify({channel}, {event}[, {args}...]) *rpcnotify()*
|
||||||
Sends {event} to {channel} via |RPC| and returns immediately.
|
Sends {event} to {channel} via |RPC| and returns immediately.
|
||||||
If {channel} is 0, the event is broadcast to all channels.
|
If {channel} is 0, the event is broadcast to all channels.
|
||||||
Example: >
|
Example: >
|
||||||
:au VimLeave call rpcnotify(0, "leaving")
|
:au VimLeave call rpcnotify(0, "leaving")
|
||||||
|
|
||||||
rpcrequest({channel}, {method}[, {args}...]) {Nvim} *rpcrequest()*
|
rpcrequest({channel}, {method}[, {args}...]) *rpcrequest()*
|
||||||
Sends a request to {channel} to invoke {method} via
|
Sends a request to {channel} to invoke {method} via
|
||||||
|RPC| and blocks until a response is received.
|
|RPC| and blocks until a response is received.
|
||||||
Example: >
|
Example: >
|
||||||
:let result = rpcrequest(rpc_chan, "func", 1, 2, 3)
|
:let result = rpcrequest(rpc_chan, "func", 1, 2, 3)
|
||||||
|
|
||||||
rpcstart({prog}[, {argv}]) {Nvim} *rpcstart()*
|
rpcstart({prog}[, {argv}]) *rpcstart()*
|
||||||
Deprecated. Replace >
|
Deprecated. Replace >
|
||||||
:let id = rpcstart('prog', ['arg1', 'arg2'])
|
:let id = rpcstart('prog', ['arg1', 'arg2'])
|
||||||
< with >
|
< with >
|
||||||
:let id = jobstart(['prog', 'arg1', 'arg2'], {'rpc': v:true})
|
:let id = jobstart(['prog', 'arg1', 'arg2'], {'rpc': v:true})
|
||||||
|
|
||||||
rpcstop({channel}) {Nvim} *rpcstop()*
|
rpcstop({channel}) *rpcstop()*
|
||||||
Deprecated. This function was used to stop a job with |rpc|
|
Deprecated. Instead use |jobstop()| to stop any job, and
|
||||||
channel, and additionally closed rpc sockets. Instead use
|
chanclose(id, "rpc") to close RPC communication without
|
||||||
|jobstop()| to stop any job, and |chanclose|(id, "rpc") to close
|
stopping the job. Use chanclose(id) to close any socket.
|
||||||
rpc communication without stopping the job. Use |chanclose|(id)
|
|
||||||
to close any socket.
|
|
||||||
|
|
||||||
screenattr({row}, {col}) *screenattr()*
|
screenattr({row}, {col}) *screenattr()*
|
||||||
Like |screenchar()|, but return the attribute. This is a rather
|
Like |screenchar()|, but return the attribute. This is a rather
|
||||||
@ -6550,6 +6603,8 @@ searchpair({start}, {middle}, {end} [, {flags} [, {skip}
|
|||||||
When {skip} is omitted or empty, every match is accepted.
|
When {skip} is omitted or empty, every match is accepted.
|
||||||
When evaluating {skip} causes an error the search is aborted
|
When evaluating {skip} causes an error the search is aborted
|
||||||
and -1 returned.
|
and -1 returned.
|
||||||
|
{skip} can be a string, a lambda, a funcref or a partial.
|
||||||
|
Anything else makes the function fail.
|
||||||
|
|
||||||
For {stopline} and {timeout} see |search()|.
|
For {stopline} and {timeout} see |search()|.
|
||||||
|
|
||||||
@ -6829,10 +6884,12 @@ setpos({expr}, {list})
|
|||||||
|
|
||||||
|
|
||||||
setqflist({list} [, {action}[, {what}]]) *setqflist()*
|
setqflist({list} [, {action}[, {what}]]) *setqflist()*
|
||||||
Create or replace or add to the quickfix list using the items
|
Create or replace or add to the quickfix list.
|
||||||
in {list}. Each item in {list} is a dictionary.
|
|
||||||
Non-dictionary items in {list} are ignored. Each dictionary
|
When {what} is not present, use the items in {list}. Each
|
||||||
item can contain the following entries:
|
item must be a dictionary. Non-dictionary items in {list} are
|
||||||
|
ignored. Each dictionary item can contain the following
|
||||||
|
entries:
|
||||||
|
|
||||||
bufnr buffer number; must be the number of a valid
|
bufnr buffer number; must be the number of a valid
|
||||||
buffer
|
buffer
|
||||||
@ -6877,7 +6934,10 @@ setqflist({list} [, {action}[, {what}]]) *setqflist()*
|
|||||||
freed.
|
freed.
|
||||||
|
|
||||||
If {action} is not present or is set to ' ', then a new list
|
If {action} is not present or is set to ' ', then a new list
|
||||||
is created.
|
is created. The new quickfix list is added after the current
|
||||||
|
quickfix list in the stack and all the following lists are
|
||||||
|
freed. To add a new quickfix list at the end of the stack,
|
||||||
|
set "nr" in {what} to "$".
|
||||||
|
|
||||||
If {title} is given, it will be used to set |w:quickfix_title|
|
If {title} is given, it will be used to set |w:quickfix_title|
|
||||||
after opening the quickfix window.
|
after opening the quickfix window.
|
||||||
@ -6886,20 +6946,32 @@ setqflist({list} [, {action}[, {what}]]) *setqflist()*
|
|||||||
only the items listed in {what} are set. The first {list}
|
only the items listed in {what} are set. The first {list}
|
||||||
argument is ignored. The following items can be specified in
|
argument is ignored. The following items can be specified in
|
||||||
{what}:
|
{what}:
|
||||||
context any Vim type can be stored as a context
|
context quickfix list context. See |quickfix-context|
|
||||||
|
efm errorformat to use when parsing text from
|
||||||
|
"lines". If this is not present, then the
|
||||||
|
'errorformat' option value is used.
|
||||||
|
id quickfix list identifier |quickfix-ID|
|
||||||
items list of quickfix entries. Same as the {list}
|
items list of quickfix entries. Same as the {list}
|
||||||
argument.
|
argument.
|
||||||
|
lines use 'errorformat' to parse a list of lines and
|
||||||
|
add the resulting entries to the quickfix list
|
||||||
|
{nr} or {id}. Only a |List| value is supported.
|
||||||
nr list number in the quickfix stack; zero
|
nr list number in the quickfix stack; zero
|
||||||
means the current quickfix list and '$' means
|
means the current quickfix list and "$" means
|
||||||
the last quickfix list
|
the last quickfix list
|
||||||
title quickfix list title text
|
title quickfix list title text
|
||||||
Unsupported keys in {what} are ignored.
|
Unsupported keys in {what} are ignored.
|
||||||
If the "nr" item is not present, then the current quickfix list
|
If the "nr" item is not present, then the current quickfix list
|
||||||
is modified.
|
is modified. When creating a new quickfix list, "nr" can be
|
||||||
|
set to a value one greater than the quickfix stack size.
|
||||||
|
When modifying a quickfix list, to guarantee that the correct
|
||||||
|
list is modified, "id" should be used instead of "nr" to
|
||||||
|
specify the list.
|
||||||
|
|
||||||
Examples: >
|
Examples (See also |setqflist-examples|): >
|
||||||
:call setqflist([], 'r', {'title': 'My search'})
|
:call setqflist([], 'r', {'title': 'My search'})
|
||||||
:call setqflist([], 'r', {'nr': 2, 'title': 'Errors'})
|
:call setqflist([], 'r', {'nr': 2, 'title': 'Errors'})
|
||||||
|
:call setqflist([], 'a', {'id':qfid, 'lines':["F1:10:L10"]})
|
||||||
<
|
<
|
||||||
Returns zero for success, -1 for failure.
|
Returns zero for success, -1 for failure.
|
||||||
|
|
||||||
@ -7269,8 +7341,8 @@ stdpath({what}) *stdpath()* *E6100*
|
|||||||
directories.
|
directories.
|
||||||
|
|
||||||
{what} Type Description ~
|
{what} Type Description ~
|
||||||
cache String Cache directory. Useful for plugins
|
cache String Cache directory. Arbitrary temporary
|
||||||
that need temporary files to work.
|
storage for plugins, etc.
|
||||||
config String User configuration directory. The
|
config String User configuration directory. The
|
||||||
|init.vim| is stored here.
|
|init.vim| is stored here.
|
||||||
config_dirs List Additional configuration directories.
|
config_dirs List Additional configuration directories.
|
||||||
@ -7278,6 +7350,9 @@ stdpath({what}) *stdpath()* *E6100*
|
|||||||
is stored here.
|
is stored here.
|
||||||
data_dirs List Additional data directories.
|
data_dirs List Additional data directories.
|
||||||
|
|
||||||
|
Example: >
|
||||||
|
:echo stdpath("config")
|
||||||
|
|
||||||
|
|
||||||
str2float({expr}) *str2float()*
|
str2float({expr}) *str2float()*
|
||||||
Convert String {expr} to a Float. This mostly works the same
|
Convert String {expr} to a Float. This mostly works the same
|
||||||
@ -7499,8 +7574,9 @@ submatch({nr} [, {list}]) *submatch()* *E935*
|
|||||||
When substitute() is used recursively only the submatches in
|
When substitute() is used recursively only the submatches in
|
||||||
the current (deepest) call can be obtained.
|
the current (deepest) call can be obtained.
|
||||||
|
|
||||||
Example: >
|
Examples: >
|
||||||
:s/\d\+/\=submatch(0) + 1/
|
:s/\d\+/\=submatch(0) + 1/
|
||||||
|
:echo substitute(text, '\d\+', '\=submatch(0) + 1', '')
|
||||||
< This finds the first number in the line and adds one to it.
|
< This finds the first number in the line and adds one to it.
|
||||||
A line break is included as a newline character.
|
A line break is included as a newline character.
|
||||||
|
|
||||||
@ -7625,7 +7701,7 @@ synconcealed({lnum}, {col}) *synconcealed()*
|
|||||||
concealable region if there are two consecutive regions
|
concealable region if there are two consecutive regions
|
||||||
with the same replacement character. For an example, if
|
with the same replacement character. For an example, if
|
||||||
the text is "123456" and both "23" and "45" are concealed
|
the text is "123456" and both "23" and "45" are concealed
|
||||||
and replace by the character "X", then:
|
and replaced by the character "X", then:
|
||||||
call returns ~
|
call returns ~
|
||||||
synconcealed(lnum, 1) [0, '', 0]
|
synconcealed(lnum, 1) [0, '', 0]
|
||||||
synconcealed(lnum, 2) [1, 'X', 1]
|
synconcealed(lnum, 2) [1, 'X', 1]
|
||||||
@ -7810,7 +7886,7 @@ tempname() *tempname()* *temp-file-name*
|
|||||||
For MS-Windows forward slashes are used when the 'shellslash'
|
For MS-Windows forward slashes are used when the 'shellslash'
|
||||||
option is set or when 'shellcmdflag' starts with '-'.
|
option is set or when 'shellcmdflag' starts with '-'.
|
||||||
|
|
||||||
termopen({cmd}[, {opts}]) {Nvim} *termopen()*
|
termopen({cmd}[, {opts}]) *termopen()*
|
||||||
Spawns {cmd} in a new pseudo-terminal session connected
|
Spawns {cmd} in a new pseudo-terminal session connected
|
||||||
to the current buffer. {cmd} is the same as the one passed to
|
to the current buffer. {cmd} is the same as the one passed to
|
||||||
|jobstart()|. This function fails if the current buffer is
|
|jobstart()|. This function fails if the current buffer is
|
||||||
@ -7825,7 +7901,7 @@ termopen({cmd}[, {opts}]) {Nvim} *termopen()*
|
|||||||
See |terminal| for more information.
|
See |terminal| for more information.
|
||||||
|
|
||||||
test_garbagecollect_now() *test_garbagecollect_now()*
|
test_garbagecollect_now() *test_garbagecollect_now()*
|
||||||
Like garbagecollect(), but executed right away. This must
|
Like |garbagecollect()|, but executed right away. This must
|
||||||
only be called directly to avoid any structure to exist
|
only be called directly to avoid any structure to exist
|
||||||
internally, and |v:testing| must have been set before calling
|
internally, and |v:testing| must have been set before calling
|
||||||
any function.
|
any function.
|
||||||
@ -7942,6 +8018,22 @@ tr({src}, {fromstr}, {tostr}) *tr()*
|
|||||||
echo tr("<blob>", "<>", "{}")
|
echo tr("<blob>", "<>", "{}")
|
||||||
< returns "{blob}"
|
< returns "{blob}"
|
||||||
|
|
||||||
|
trim({text} [, {mask}]) *trim()*
|
||||||
|
Return {text} as a String where any character in {mask} is
|
||||||
|
removed from the beginning and end of {text}.
|
||||||
|
If {mask} is not given, {mask} is all characters up to 0x20,
|
||||||
|
which includes Tab, space, NL and CR, plus the non-breaking
|
||||||
|
space character 0xa0.
|
||||||
|
This code deals with multibyte characters properly.
|
||||||
|
|
||||||
|
Examples: >
|
||||||
|
echo trim(" some text ")
|
||||||
|
< returns "some text" >
|
||||||
|
echo trim(" \r\t\t\r RESERVE \t\n\x0B\xA0") . "_TAIL"
|
||||||
|
< returns "RESERVE_TAIL" >
|
||||||
|
echo trim("rm<Xrm<>X>rrm", "rm<>")
|
||||||
|
< returns "Xrm<>X" (characters in the middle are not removed)
|
||||||
|
|
||||||
trunc({expr}) *trunc()*
|
trunc({expr}) *trunc()*
|
||||||
Return the largest integral value with magnitude less than or
|
Return the largest integral value with magnitude less than or
|
||||||
equal to {expr} as a |Float| (truncate towards zero).
|
equal to {expr} as a |Float| (truncate towards zero).
|
||||||
@ -8144,6 +8236,14 @@ win_id2win({expr}) *win_id2win()*
|
|||||||
Return the window number of window with ID {expr}.
|
Return the window number of window with ID {expr}.
|
||||||
Return 0 if the window cannot be found in the current tabpage.
|
Return 0 if the window cannot be found in the current tabpage.
|
||||||
|
|
||||||
|
win_screenpos({nr}) *win_screenpos()*
|
||||||
|
Return the screen position of window {nr} as a list with two
|
||||||
|
numbers: [row, col]. The first window always has position
|
||||||
|
[1, 1].
|
||||||
|
{nr} can be the window number or the |window-ID|.
|
||||||
|
Return [0, 0] if the window cannot be found in the current
|
||||||
|
tabpage.
|
||||||
|
|
||||||
*winbufnr()*
|
*winbufnr()*
|
||||||
winbufnr({nr}) The result is a Number, which is the number of the buffer
|
winbufnr({nr}) The result is a Number, which is the number of the buffer
|
||||||
associated with window {nr}. {nr} can be the window number or
|
associated with window {nr}. {nr} can be the window number or
|
||||||
@ -8439,7 +8539,7 @@ tag_old_static Compiled with support for old static tags
|
|||||||
|tag-old-static|.
|
|tag-old-static|.
|
||||||
tag_any_white Compiled with support for any white characters in tags
|
tag_any_white Compiled with support for any white characters in tags
|
||||||
files |tag-any-white|.
|
files |tag-any-white|.
|
||||||
termresponse Compiled with support for |t_RV| and |v:termresponse|.
|
termresponse Compiled with support for t_RV and |v:termresponse|.
|
||||||
textobjects Compiled with support for |text-objects|.
|
textobjects Compiled with support for |text-objects|.
|
||||||
timers Compiled with |timer_start()| support.
|
timers Compiled with |timer_start()| support.
|
||||||
title Compiled with window title support |'title'|.
|
title Compiled with window title support |'title'|.
|
||||||
@ -8456,6 +8556,8 @@ visual Compiled with Visual mode.
|
|||||||
visualextra Compiled with extra Visual mode commands.
|
visualextra Compiled with extra Visual mode commands.
|
||||||
|blockwise-operators|.
|
|blockwise-operators|.
|
||||||
vreplace Compiled with |gR| and |gr| commands.
|
vreplace Compiled with |gR| and |gr| commands.
|
||||||
|
vtp Compiled for vcon support |+vtp| (check vcon to find
|
||||||
|
out if it works in the current console)).
|
||||||
wildignore Compiled with 'wildignore' option.
|
wildignore Compiled with 'wildignore' option.
|
||||||
wildmenu Compiled with 'wildmenu' option.
|
wildmenu Compiled with 'wildmenu' option.
|
||||||
win32 Windows version of Vim (32 or 64 bit).
|
win32 Windows version of Vim (32 or 64 bit).
|
||||||
@ -8558,6 +8660,9 @@ See |:verbose-cmd| for more information.
|
|||||||
not used an error message is given. When [!] is used,
|
not used an error message is given. When [!] is used,
|
||||||
an existing function is silently replaced. Unless it
|
an existing function is silently replaced. Unless it
|
||||||
is currently being executed, that is an error.
|
is currently being executed, that is an error.
|
||||||
|
NOTE: Use ! wisely. If used without care it can cause
|
||||||
|
an existing function to be replaced unexpectedly,
|
||||||
|
which is hard to debug.
|
||||||
|
|
||||||
For the {arguments} see |function-argument|.
|
For the {arguments} see |function-argument|.
|
||||||
|
|
||||||
@ -8677,8 +8782,7 @@ may be larger.
|
|||||||
It is also possible to define a function without any arguments. You must
|
It is also possible to define a function without any arguments. You must
|
||||||
still supply the () then.
|
still supply the () then.
|
||||||
|
|
||||||
It is allowed to define another function inside a function
|
It is allowed to define another function inside a function body.
|
||||||
body.
|
|
||||||
|
|
||||||
*local-variables*
|
*local-variables*
|
||||||
Inside a function local variables can be used. These will disappear when the
|
Inside a function local variables can be used. These will disappear when the
|
||||||
@ -8835,9 +8939,6 @@ Also note that if you have two script files, and one calls a function in the
|
|||||||
other and vice versa, before the used function is defined, it won't work.
|
other and vice versa, before the used function is defined, it won't work.
|
||||||
Avoid using the autoload functionality at the toplevel.
|
Avoid using the autoload functionality at the toplevel.
|
||||||
|
|
||||||
Hint: If you distribute a bunch of scripts you can pack them together with the
|
|
||||||
|vimball| utility. Also read the user manual |distribute-script|.
|
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
6. Curly braces names *curly-braces-names*
|
6. Curly braces names *curly-braces-names*
|
||||||
|
|
||||||
@ -9056,6 +9157,14 @@ This does NOT work: >
|
|||||||
variables are automatically deleted when the function
|
variables are automatically deleted when the function
|
||||||
ends.
|
ends.
|
||||||
|
|
||||||
|
:unl[et] ${env-name} ... *:unlet-environment* *:unlet-$*
|
||||||
|
Remove environment variable {env-name}.
|
||||||
|
Can mix {name} and ${env-name} in one :unlet command.
|
||||||
|
No error message is given for a non-existing
|
||||||
|
variable, also without !.
|
||||||
|
If the system does not support deleting an environment
|
||||||
|
variable, it is made emtpy.
|
||||||
|
|
||||||
:lockv[ar][!] [depth] {name} ... *:lockvar* *:lockv*
|
:lockv[ar][!] [depth] {name} ... *:lockvar* *:lockv*
|
||||||
Lock the internal variable {name}. Locking means that
|
Lock the internal variable {name}. Locking means that
|
||||||
it can no longer be changed (until it is unlocked).
|
it can no longer be changed (until it is unlocked).
|
||||||
@ -10594,7 +10703,7 @@ The sandbox is also used for the |:sandbox| command.
|
|||||||
|
|
||||||
These items are not allowed in the sandbox:
|
These items are not allowed in the sandbox:
|
||||||
- changing the buffer text
|
- changing the buffer text
|
||||||
- defining or changing mapping, autocommands, functions, user commands
|
- defining or changing mapping, autocommands, user commands
|
||||||
- setting certain options (see |option-summary|)
|
- setting certain options (see |option-summary|)
|
||||||
- setting certain v: variables (see |v:var|) *E794*
|
- setting certain v: variables (see |v:var|) *E794*
|
||||||
- executing a shell command
|
- executing a shell command
|
||||||
@ -10616,6 +10725,7 @@ location. Insecure in this context are:
|
|||||||
- sourcing a .nvimrc or .exrc in the current directory
|
- sourcing a .nvimrc or .exrc in the current directory
|
||||||
- while executing in the sandbox
|
- while executing in the sandbox
|
||||||
- value coming from a modeline
|
- value coming from a modeline
|
||||||
|
- executing a function that was defined in the sandbox
|
||||||
|
|
||||||
Note that when in the sandbox and saving an option value and restoring it, the
|
Note that when in the sandbox and saving an option value and restoring it, the
|
||||||
option will still be marked as it was set in the sandbox.
|
option will still be marked as it was set in the sandbox.
|
||||||
@ -10709,7 +10819,7 @@ Group Default link Colored expression ~
|
|||||||
|expr-entry|
|
|expr-entry|
|
||||||
|
|
||||||
*hl-NvimColon* Delimiter `:` in |dict| literal
|
*hl-NvimColon* Delimiter `:` in |dict| literal
|
||||||
*hl-NvimComma* Delimiter `,` in |dict|/|list|
|
*hl-NvimComma* Delimiter `,` in |dict| or |list|
|
||||||
literal or
|
literal or
|
||||||
|expr-function|
|
|expr-function|
|
||||||
*hl-NvimArrow* Delimiter `->` in |lambda|
|
*hl-NvimArrow* Delimiter `->` in |lambda|
|
||||||
|
@ -205,4 +205,4 @@ changes made in the current line.
|
|||||||
|
|
||||||
For more information about the bugs refer to rileft.txt.
|
For more information about the bugs refer to rileft.txt.
|
||||||
|
|
||||||
vim:tw=78:ts=8:ft=help:norl:
|
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||||
|
@ -152,8 +152,8 @@ file. It will be overwritten when installing a new version of Vim.
|
|||||||
|
|
||||||
A. If you want to overrule all default file type checks.
|
A. If you want to overrule all default file type checks.
|
||||||
This works by writing one file for each filetype. The disadvantage is that
|
This works by writing one file for each filetype. The disadvantage is that
|
||||||
means there can be many files. The advantage is that you can simply drop
|
there can be many files. The advantage is that you can simply drop this
|
||||||
this file in the right directory to make it work.
|
file in the right directory to make it work.
|
||||||
*ftdetect*
|
*ftdetect*
|
||||||
1. Create your user runtime directory. You would normally use the first
|
1. Create your user runtime directory. You would normally use the first
|
||||||
item of the 'runtimepath' option. Then create the directory "ftdetect"
|
item of the 'runtimepath' option. Then create the directory "ftdetect"
|
||||||
@ -273,6 +273,10 @@ then Vim will load all plugins in these directories and below:
|
|||||||
|
|
||||||
Note that the last one is the value of $VIMRUNTIME which has been expanded.
|
Note that the last one is the value of $VIMRUNTIME which has been expanded.
|
||||||
|
|
||||||
|
Note that when using a plugin manager or |packages| many directories will be
|
||||||
|
added to 'runtimepath'. These plugins each require their own directory, don't
|
||||||
|
put them directly in ~/.vim/plugin.
|
||||||
|
|
||||||
What if it looks like your plugin is not being loaded? You can find out what
|
What if it looks like your plugin is not being loaded? You can find out what
|
||||||
happens when Vim starts up by using the |-V| argument: >
|
happens when Vim starts up by using the |-V| argument: >
|
||||||
|
|
||||||
@ -512,7 +516,7 @@ View manpages in Nvim. Supports highlighting, completion, locales, and
|
|||||||
navigation. Also see |find-manpage|.
|
navigation. Also see |find-manpage|.
|
||||||
|
|
||||||
To use Nvim as a manpager: >
|
To use Nvim as a manpager: >
|
||||||
export MANPAGER="nvim -c 'set ft=man' -"
|
export MANPAGER='nvim +Man!'
|
||||||
|
|
||||||
man.vim will always attempt to reuse the closest man window (above/left) but
|
man.vim will always attempt to reuse the closest man window (above/left) but
|
||||||
otherwise create a split.
|
otherwise create a split.
|
||||||
@ -522,13 +526,14 @@ The case sensitivity of completion is controlled by 'fileignorecase'.
|
|||||||
Commands:
|
Commands:
|
||||||
Man {name} Display the manpage for {name}.
|
Man {name} Display the manpage for {name}.
|
||||||
Man {sect} {name} Display the manpage for {name} and section {sect}.
|
Man {sect} {name} Display the manpage for {name} and section {sect}.
|
||||||
Man {name}({sect}) Alternate syntax which completes the section.
|
Man {name}({sect}) Same as above.
|
||||||
Man {sect} {name}({sect}) Used during completion to show the real section of
|
Man {sect} {name}({sect}) Used during completion to show the real section of
|
||||||
when the provided section is a prefix, e.g. 1m vs 1.
|
when the provided section is a prefix, e.g. 1m vs 1.
|
||||||
Man {path} Open the manpage specified by path. Prepend "./" if
|
Man {path} Open the manpage at {path}. Prepend "./" if {path}
|
||||||
page is in the current directory.
|
is relative to the current directory.
|
||||||
Man Open the manpage for the <cWORD> (man buffers)
|
Man Open the manpage for the <cWORD> (man buffers)
|
||||||
or <cword> (non-man buffers) under the cursor.
|
or <cword> (non-man buffers) under the cursor.
|
||||||
|
Man! Display the current buffer contents as a manpage.
|
||||||
|
|
||||||
|:Man| accepts command modifiers. For example, to use a vertical split: >
|
|:Man| accepts command modifiers. For example, to use a vertical split: >
|
||||||
:vertical Man printf
|
:vertical Man printf
|
||||||
@ -568,11 +573,31 @@ By default the following options are set, in accordance with PEP8: >
|
|||||||
|
|
||||||
setlocal expandtab shiftwidth=4 softtabstop=4 tabstop=8
|
setlocal expandtab shiftwidth=4 softtabstop=4 tabstop=8
|
||||||
|
|
||||||
To disable this behaviour, set the following variable in your vimrc: >
|
To disable this behavior, set the following variable in your vimrc: >
|
||||||
|
|
||||||
let g:python_recommended_style = 0
|
let g:python_recommended_style = 0
|
||||||
|
|
||||||
|
|
||||||
|
R MARKDOWN *ft-rmd-plugin*
|
||||||
|
|
||||||
|
By default ftplugin/html.vim is not sourced. If you want it sourced, add to
|
||||||
|
your |vimrc|: >
|
||||||
|
let rmd_include_html = 1
|
||||||
|
|
||||||
|
The 'formatexpr' option is set dynamically with different values for R code
|
||||||
|
and for Markdown code. If you prefer that 'formatexpr' is not set, add to your
|
||||||
|
|vimrc|: >
|
||||||
|
let rmd_dynamic_comments = 0
|
||||||
|
|
||||||
|
|
||||||
|
R RESTRUCTURED TEXT *ft-rrst-plugin*
|
||||||
|
|
||||||
|
The 'formatexpr' option is set dynamically with different values for R code
|
||||||
|
and for ReStructured text. If you prefer that 'formatexpr' is not set, add to
|
||||||
|
your |vimrc|: >
|
||||||
|
let rrst_dynamic_comments = 0
|
||||||
|
|
||||||
|
|
||||||
RPM SPEC *ft-spec-plugin*
|
RPM SPEC *ft-spec-plugin*
|
||||||
|
|
||||||
Since the text for this plugin is rather long it has been put in a separate
|
Since the text for this plugin is rather long it has been put in a separate
|
||||||
@ -749,4 +774,23 @@ You can change the default by defining the variable g:tex_flavor to the format
|
|||||||
Currently no other formats are recognized.
|
Currently no other formats are recognized.
|
||||||
|
|
||||||
|
|
||||||
vim:tw=78:ts=8:ft=help:norl:
|
VIM *ft-vim-plugin*
|
||||||
|
|
||||||
|
The Vim filetype plugin defines mappings to move to the start and end of
|
||||||
|
functions with [[ and ]]. Move around comments with ]" and [".
|
||||||
|
|
||||||
|
The mappings can be disabled with: >
|
||||||
|
let g:no_vim_maps = 1
|
||||||
|
|
||||||
|
|
||||||
|
ZIMBU *ft-zimbu-plugin*
|
||||||
|
|
||||||
|
The Zimbu filetype plugin defines mappings to move to the start and end of
|
||||||
|
functions with [[ and ]].
|
||||||
|
|
||||||
|
The mappings can be disabled with: >
|
||||||
|
let g:no_zimbu_maps = 1
|
||||||
|
<
|
||||||
|
|
||||||
|
|
||||||
|
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||||
|
@ -595,4 +595,4 @@ used. Otherwise the values from the window where the buffer was edited last
|
|||||||
are used.
|
are used.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
vim:tw=78:ts=8:ft=help:norl:
|
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||||
|
@ -249,7 +249,7 @@ g:decada.Make_Command string
|
|||||||
External command used for |g:decada.Make()| (|'makeprg'|).
|
External command used for |g:decada.Make()| (|'makeprg'|).
|
||||||
|
|
||||||
*g:decada.Error_Format*
|
*g:decada.Error_Format*
|
||||||
g:decada.Error_Format| string
|
g:decada.Error_Format string
|
||||||
Error format (|'errorformat'|).
|
Error format (|'errorformat'|).
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
*ft_rust.txt* Filetype plugin for Rust
|
*ft_rust.txt* For Vim version 8.1. Last change: 2017 Nov 02
|
||||||
|
|
||||||
|
This is documentation for the Rust filetype plugin.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
CONTENTS *rust*
|
CONTENTS *rust*
|
||||||
@ -234,4 +236,4 @@ It also has a few other mappings:
|
|||||||
Note: This binding is only available in MacVim.
|
Note: This binding is only available in MacVim.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
vim:tw=78:sw=4:noet:ts=8:ft=help:norl:
|
vim:tw=78:sw=4:ts=8:noet:ft=help:norl:
|
||||||
|
@ -773,4 +773,4 @@ Setting the filetype back to Perl sets all the usual "perl" related items back
|
|||||||
as they were.
|
as they were.
|
||||||
|
|
||||||
|
|
||||||
vim:tw=78:ts=8:ft=help:norl:
|
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||||
|
@ -9,7 +9,7 @@ Vim's Graphical User Interface *gui* *GUI*
|
|||||||
Type |gO| to see the table of contents.
|
Type |gO| to see the table of contents.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
1. Starting the GUI *gui-start* *E229* *E233*
|
Starting the GUI *gui-start* *E229* *E233*
|
||||||
|
|
||||||
*ginit.vim* *gui-init* *gvimrc* *$MYGVIMRC*
|
*ginit.vim* *gui-init* *gvimrc* *$MYGVIMRC*
|
||||||
The gvimrc file is where GUI-specific startup commands should be placed. It
|
The gvimrc file is where GUI-specific startup commands should be placed. It
|
||||||
@ -71,7 +71,7 @@ and only the first one that is found is read.
|
|||||||
:winp[os]
|
:winp[os]
|
||||||
Display current position of the top left corner of the GUI vim
|
Display current position of the top left corner of the GUI vim
|
||||||
window in pixels. Does not work in all versions.
|
window in pixels. Does not work in all versions.
|
||||||
Also see |getwinposx()| and |getwinposy()|.
|
Also see |getwinpos()|, |getwinposx()| and |getwinposy()|.
|
||||||
|
|
||||||
:winp[os] {X} {Y} *E466*
|
:winp[os] {X} {Y} *E466*
|
||||||
Put the GUI vim window at the given {X} and {Y} coordinates.
|
Put the GUI vim window at the given {X} and {Y} coordinates.
|
||||||
@ -87,7 +87,7 @@ and only the first one that is found is read.
|
|||||||
Obsolete, use ":set lines=11 columns=22".
|
Obsolete, use ":set lines=11 columns=22".
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
2. Scrollbars *gui-scrollbars*
|
Scrollbars *gui-scrollbars*
|
||||||
|
|
||||||
There are vertical scrollbars and a horizontal scrollbar. You may
|
There are vertical scrollbars and a horizontal scrollbar. You may
|
||||||
configure which ones appear with the 'guioptions' option.
|
configure which ones appear with the 'guioptions' option.
|
||||||
@ -155,167 +155,7 @@ include the 'h' flag in 'guioptions'. Then the scrolling is limited by the
|
|||||||
text of the current cursor line.
|
text of the current cursor line.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
3. Mouse Control *gui-mouse*
|
Drag and drop *drag-n-drop*
|
||||||
|
|
||||||
The mouse only works if the appropriate flag in the 'mouse' option is set.
|
|
||||||
When the GUI is switched on, and 'mouse' wasn't set yet, the 'mouse' option is
|
|
||||||
automatically set to "a", enabling it for all modes except for the
|
|
||||||
|hit-enter| prompt. If you don't want this, a good place to change the
|
|
||||||
'mouse' option is the "gvimrc" file.
|
|
||||||
|
|
||||||
Other options that are relevant:
|
|
||||||
'mousefocus' window focus follows mouse pointer |gui-mouse-focus|
|
|
||||||
'mousemodel' what mouse button does which action
|
|
||||||
'mousehide' hide mouse pointer while typing text
|
|
||||||
'selectmode' whether to start Select mode or Visual mode
|
|
||||||
|
|
||||||
A quick way to set these is with the ":behave" command.
|
|
||||||
*:behave* *:be*
|
|
||||||
:be[have] {model} Set behavior for mouse and selection. Valid
|
|
||||||
arguments are:
|
|
||||||
mswin MS-Windows behavior
|
|
||||||
xterm Xterm behavior
|
|
||||||
|
|
||||||
Using ":behave" changes these options:
|
|
||||||
option mswin xterm ~
|
|
||||||
'selectmode' "mouse,key" ""
|
|
||||||
'mousemodel' "popup" "extend"
|
|
||||||
'keymodel' "startsel,stopsel" ""
|
|
||||||
'selection' "exclusive" "inclusive"
|
|
||||||
|
|
||||||
In the $VIMRUNTIME directory, there is a script called |mswin.vim|, which will
|
|
||||||
also map a few keys to the MS-Windows cut/copy/paste commands. This is NOT
|
|
||||||
compatible, since it uses the CTRL-V, CTRL-X and CTRL-C keys. If you don't
|
|
||||||
mind, use this command: >
|
|
||||||
:so $VIMRUNTIME/mswin.vim
|
|
||||||
|
|
||||||
For scrolling with a wheel on a mouse, see |scroll-mouse-wheel|.
|
|
||||||
|
|
||||||
|
|
||||||
3.1 Moving Cursor with Mouse *gui-mouse-move*
|
|
||||||
|
|
||||||
Click the left mouse button somewhere in a text buffer where you want the
|
|
||||||
cursor to go, and it does!
|
|
||||||
This works in when 'mouse' contains ~
|
|
||||||
Normal mode 'n' or 'a'
|
|
||||||
Visual mode 'v' or 'a'
|
|
||||||
Insert mode 'i' or 'a'
|
|
||||||
|
|
||||||
Select mode is handled like Visual mode.
|
|
||||||
|
|
||||||
You may use this with an operator such as 'd' to delete text from the current
|
|
||||||
cursor position to the position you point to with the mouse. That is, you hit
|
|
||||||
'd' and then click the mouse somewhere.
|
|
||||||
|
|
||||||
*gui-mouse-focus*
|
|
||||||
The 'mousefocus' option can be set to make the keyboard focus follow the
|
|
||||||
mouse pointer. This means that the window where the mouse pointer is, is the
|
|
||||||
active window. Warning: this doesn't work very well when using a menu,
|
|
||||||
because the menu command will always be applied to the top window.
|
|
||||||
|
|
||||||
If you are on the ':' line (or '/' or '?'), then clicking the left or right
|
|
||||||
mouse button will position the cursor on the ':' line (if 'mouse' contains
|
|
||||||
'c', 'a' or 'A').
|
|
||||||
|
|
||||||
In any situation the middle mouse button may be clicked to paste the current
|
|
||||||
selection.
|
|
||||||
|
|
||||||
|
|
||||||
3.2 Selection with Mouse *gui-mouse-select*
|
|
||||||
|
|
||||||
The mouse can be used to start a selection. How depends on the 'mousemodel'
|
|
||||||
option:
|
|
||||||
'mousemodel' is "extend": use the right mouse button
|
|
||||||
'mousemodel' is "popup": use the left mouse button, while keeping the Shift
|
|
||||||
key pressed.
|
|
||||||
|
|
||||||
If there was no selection yet, this starts a selection from the old cursor
|
|
||||||
position to the position pointed to with the mouse. If there already is a
|
|
||||||
selection then the closest end will be extended.
|
|
||||||
|
|
||||||
If 'selectmode' contains "mouse", then the selection will be in Select mode.
|
|
||||||
This means that typing normal text will replace the selection. See
|
|
||||||
|Select-mode|. Otherwise, the selection will be in Visual mode.
|
|
||||||
|
|
||||||
Double clicking may be done to make the selection word-wise, triple clicking
|
|
||||||
makes it line-wise, and quadruple clicking makes it rectangular block-wise.
|
|
||||||
|
|
||||||
See |gui-selections| on how the selection is used.
|
|
||||||
|
|
||||||
|
|
||||||
3.3 Other Text Selection with Mouse *gui-mouse-modeless*
|
|
||||||
*modeless-selection*
|
|
||||||
A different kind of selection is used when:
|
|
||||||
- in Command-line mode
|
|
||||||
- in the Command-line window and pointing in another window
|
|
||||||
- at the |hit-enter| prompt
|
|
||||||
- whenever the current mode is not in the 'mouse' option
|
|
||||||
- when holding the CTRL and SHIFT keys in the GUI
|
|
||||||
|
|
||||||
Since Vim continues like the selection isn't there, and there is no mode
|
|
||||||
associated with the selection, this is called modeless selection. Any text in
|
|
||||||
the Vim window can be selected. Select the text by pressing the left mouse
|
|
||||||
button at the start, drag to the end and release. To extend the selection,
|
|
||||||
use the right mouse button when 'mousemodel' is "extend", or the left mouse
|
|
||||||
button with the shift key pressed when 'mousemodel' is "popup".
|
|
||||||
The selection is removed when the selected text is scrolled or changed.
|
|
||||||
|
|
||||||
On the command line CTRL-Y can be used to copy the selection into the
|
|
||||||
clipboard. To do this from Insert mode, use CTRL-O : CTRL-Y <CR>. When
|
|
||||||
'guioptions' contains a or A (default on X11), the selection is automatically
|
|
||||||
copied to the "* register.
|
|
||||||
|
|
||||||
The middle mouse button can then paste the text. On non-X11 systems, you can
|
|
||||||
use CTRL-R +.
|
|
||||||
|
|
||||||
|
|
||||||
3.4 Using Mouse on Status Lines *gui-mouse-status*
|
|
||||||
|
|
||||||
Clicking the left or right mouse button on the status line below a Vim
|
|
||||||
window makes that window the current window. This actually happens on button
|
|
||||||
release (to be able to distinguish a click from a drag action).
|
|
||||||
|
|
||||||
With the left mouse button a status line can be dragged up and down, thus
|
|
||||||
resizing the windows above and below it. This does not change window focus.
|
|
||||||
|
|
||||||
The same can be used on the vertical separator: click to give the window left
|
|
||||||
of it focus, drag left and right to make windows wider and narrower.
|
|
||||||
|
|
||||||
|
|
||||||
3.5 Various Mouse Clicks *gui-mouse-various*
|
|
||||||
|
|
||||||
<S-LeftMouse> Search forward for the word under the mouse click.
|
|
||||||
When 'mousemodel' is "popup" this starts or extends a
|
|
||||||
selection.
|
|
||||||
<S-RightMouse> Search backward for the word under the mouse click.
|
|
||||||
<C-LeftMouse> Jump to the tag name under the mouse click.
|
|
||||||
<C-RightMouse> Jump back to position before the previous tag jump
|
|
||||||
(same as "CTRL-T")
|
|
||||||
|
|
||||||
|
|
||||||
3.6 Mouse Mappings *gui-mouse-mapping*
|
|
||||||
|
|
||||||
The mouse events, complete with modifiers, may be mapped. Eg: >
|
|
||||||
:map <S-LeftMouse> <RightMouse>
|
|
||||||
:map <S-LeftDrag> <RightDrag>
|
|
||||||
:map <S-LeftRelease> <RightRelease>
|
|
||||||
:map <2-S-LeftMouse> <2-RightMouse>
|
|
||||||
:map <2-S-LeftDrag> <2-RightDrag>
|
|
||||||
:map <2-S-LeftRelease> <2-RightRelease>
|
|
||||||
:map <3-S-LeftMouse> <3-RightMouse>
|
|
||||||
:map <3-S-LeftDrag> <3-RightDrag>
|
|
||||||
:map <3-S-LeftRelease> <3-RightRelease>
|
|
||||||
:map <4-S-LeftMouse> <4-RightMouse>
|
|
||||||
:map <4-S-LeftDrag> <4-RightDrag>
|
|
||||||
:map <4-S-LeftRelease> <4-RightRelease>
|
|
||||||
These mappings make selection work the way it probably should in a Motif
|
|
||||||
application, with shift-left mouse allowing for extending the visual area
|
|
||||||
rather than the right mouse button.
|
|
||||||
|
|
||||||
Mouse mapping with modifiers does not work for modeless selection.
|
|
||||||
|
|
||||||
|
|
||||||
3.7 Drag and drop *drag-n-drop*
|
|
||||||
|
|
||||||
You can drag and drop one or more files into the Vim window, where they will
|
You can drag and drop one or more files into the Vim window, where they will
|
||||||
be opened as if a |:drop| command was used.
|
be opened as if a |:drop| command was used.
|
||||||
@ -334,47 +174,12 @@ names with any Ex command. Special characters (space, tab, double quote and
|
|||||||
'|'; backslash on non-MS-Windows systems) will be escaped.
|
'|'; backslash on non-MS-Windows systems) will be escaped.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
4. Making GUI Selections *gui-selections*
|
Menus *menus*
|
||||||
|
|
||||||
*quotestar*
|
|
||||||
You may make selections with the mouse (see |gui-mouse-select|), or by using
|
|
||||||
Vim's Visual mode (see |v|). If 'a' is present in 'guioptions', then
|
|
||||||
whenever a selection is started (Visual or Select mode), or when the selection
|
|
||||||
is changed, Vim becomes the owner of the windowing system's primary selection
|
|
||||||
(on MS-Windows the |clipboard| is used).
|
|
||||||
|
|
||||||
*primary-selection*
|
|
||||||
There is a special register for storing this selection, it is the "*
|
|
||||||
register. Nothing is put in here unless the information about what text is
|
|
||||||
selected is about to change (e.g. with a left mouse click somewhere), or when
|
|
||||||
another application wants to paste the selected text. Then the text is put
|
|
||||||
in the "* register. For example, to cut a line and make it the current
|
|
||||||
selection/put it on the clipboard: >
|
|
||||||
|
|
||||||
"*dd
|
|
||||||
|
|
||||||
Similarly, when you want to paste a selection from another application, e.g.,
|
|
||||||
by clicking the middle mouse button, the selection is put in the "* register
|
|
||||||
first, and then 'put' like any other register. For example, to put the
|
|
||||||
selection (contents of the clipboard): >
|
|
||||||
|
|
||||||
"*p
|
|
||||||
|
|
||||||
Note that when pasting text from one Vim into another separate Vim, the type
|
|
||||||
of selection (character, line, or block) will also be copied. For other
|
|
||||||
applications the type is always character.
|
|
||||||
|
|
||||||
When the "unnamed" string is included in the 'clipboard' option, the unnamed
|
|
||||||
register is the same as the "* register. Thus you can yank to and paste the
|
|
||||||
selection without prepending "* to commands.
|
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
5. Menus *menus*
|
|
||||||
|
|
||||||
For an introduction see |usr_42.txt| in the user manual.
|
For an introduction see |usr_42.txt| in the user manual.
|
||||||
|
|
||||||
|
|
||||||
5.1 Using Menus *using-menus*
|
Using Menus *using-menus*
|
||||||
|
|
||||||
Basically, menus can be used just like mappings. You can define your own
|
Basically, menus can be used just like mappings. You can define your own
|
||||||
menus, as many as you like.
|
menus, as many as you like.
|
||||||
@ -420,7 +225,7 @@ Pressing <F4> will start the menu. You can now use the cursor keys to select
|
|||||||
a menu entry. Hit <Enter> to execute it. Hit <Esc> if you want to cancel.
|
a menu entry. Hit <Enter> to execute it. Hit <Esc> if you want to cancel.
|
||||||
This does require the |+menu| feature enabled at compile time.
|
This does require the |+menu| feature enabled at compile time.
|
||||||
|
|
||||||
5.2 Creating New Menus *creating-menus*
|
Creating New Menus *creating-menus*
|
||||||
|
|
||||||
*:me* *:menu* *:noreme* *:noremenu*
|
*:me* *:menu* *:noreme* *:noremenu*
|
||||||
*:am* *:amenu* *:an* *:anoremenu*
|
*:am* *:amenu* *:an* *:anoremenu*
|
||||||
@ -662,7 +467,7 @@ when the right mouse button is pressed, if 'mousemodel' is set to popup or
|
|||||||
popup_setpos.
|
popup_setpos.
|
||||||
|
|
||||||
|
|
||||||
5.3 Showing What Menus Are Mapped To *showing-menus*
|
Showing What Menus Are Mapped To *showing-menus*
|
||||||
|
|
||||||
To see what an existing menu is mapped to, use just one argument after the
|
To see what an existing menu is mapped to, use just one argument after the
|
||||||
menu commands (just like you would with the ":map" commands). If the menu
|
menu commands (just like you would with the ":map" commands). If the menu
|
||||||
@ -680,7 +485,7 @@ Note that hitting <Tab> while entering a menu name after a menu command may
|
|||||||
be used to complete the name of the menu item.
|
be used to complete the name of the menu item.
|
||||||
|
|
||||||
|
|
||||||
5.4 Executing Menus *execute-menus*
|
Executing Menus *execute-menus*
|
||||||
|
|
||||||
*:em* *:emenu* *E334* *E335*
|
*:em* *:emenu* *E334* *E335*
|
||||||
:[range]em[enu] {menu} Execute {menu} from the command line.
|
:[range]em[enu] {menu} Execute {menu} from the command line.
|
||||||
@ -700,7 +505,7 @@ When using a range, if the lines match with '<,'>, then the menu is executed
|
|||||||
using the last visual selection.
|
using the last visual selection.
|
||||||
|
|
||||||
|
|
||||||
5.5 Deleting Menus *delete-menus*
|
Deleting Menus *delete-menus*
|
||||||
|
|
||||||
*:unme* *:unmenu*
|
*:unme* *:unmenu*
|
||||||
*:aun* *:aunmenu*
|
*:aun* *:aunmenu*
|
||||||
@ -730,7 +535,7 @@ If you want to get rid of the menu bar: >
|
|||||||
:set guioptions-=m
|
:set guioptions-=m
|
||||||
|
|
||||||
|
|
||||||
5.6 Disabling Menus *disable-menus*
|
Disabling Menus *disable-menus*
|
||||||
|
|
||||||
*:menu-disable* *:menu-enable*
|
*:menu-disable* *:menu-enable*
|
||||||
If you do not want to remove a menu, but disable it for a moment, this can be
|
If you do not want to remove a menu, but disable it for a moment, this can be
|
||||||
@ -746,7 +551,7 @@ When the argument is "*", all menus are affected. Otherwise the given menu
|
|||||||
name and all existing submenus below it are affected.
|
name and all existing submenus below it are affected.
|
||||||
|
|
||||||
|
|
||||||
5.7 Examples for Menus *menu-examples*
|
Examples for Menus *menu-examples*
|
||||||
|
|
||||||
Here is an example on how to add menu items with menu's! You can add a menu
|
Here is an example on how to add menu items with menu's! You can add a menu
|
||||||
item for the keyword under the cursor. The register "z" is used. >
|
item for the keyword under the cursor. The register "z" is used. >
|
||||||
@ -763,7 +568,7 @@ mappings, or put these lines in your gvimrc; "<C-R>" is CTRL-R, "<CR>" is
|
|||||||
the <CR> key. |<>|)
|
the <CR> key. |<>|)
|
||||||
|
|
||||||
|
|
||||||
5.8 Tooltips & Menu tips
|
Tooltips & Menu tips
|
||||||
|
|
||||||
See section |42.4| in the user manual.
|
See section |42.4| in the user manual.
|
||||||
|
|
||||||
@ -833,22 +638,5 @@ This creates a popup menu that doesn't exist on the main menu-bar.
|
|||||||
|
|
||||||
Note that a menu that starts with ']' will not be displayed.
|
Note that a menu that starts with ']' will not be displayed.
|
||||||
|
|
||||||
==============================================================================
|
|
||||||
6. Extras *gui-extras*
|
|
||||||
|
|
||||||
This section describes other features which are related to the GUI.
|
vim:tw=78:sw=4:ts=8:noet:ft=help:norl:
|
||||||
|
|
||||||
- With the GUI, there is no wait for one second after hitting escape, because
|
|
||||||
the key codes don't start with <Esc>.
|
|
||||||
|
|
||||||
- Typing ^V followed by a special key in the GUI will insert "<Key>", since
|
|
||||||
the internal string used is meaningless. Modifiers may also be held down to
|
|
||||||
get "<Modifiers-Key>".
|
|
||||||
|
|
||||||
- In the GUI, the modifiers SHIFT, CTRL, and ALT (or META) may be used within
|
|
||||||
mappings of special keys and mouse events. E.g.: :map <M-LeftDrag> <LeftDrag>
|
|
||||||
|
|
||||||
- In the GUI, several normal keys may have modifiers in mappings etc, these
|
|
||||||
are <Space>, <Tab>, <NL>, <CR>, <Esc>.
|
|
||||||
|
|
||||||
vim:tw=78:sw=4:ts=8:ft=help:norl:
|
|
||||||
|
@ -134,4 +134,4 @@ The result is that all Hebrew characters are displayed as ~x. To solve this
|
|||||||
problem, set isprint=@,128-255.
|
problem, set isprint=@,128-255.
|
||||||
|
|
||||||
|
|
||||||
vim:tw=78:ts=8:ft=help:norl:
|
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||||
|
@ -150,6 +150,7 @@ GUI ~
|
|||||||
|
|
||||||
Interfaces ~
|
Interfaces ~
|
||||||
|if_cscop.txt| using Cscope with Vim
|
|if_cscop.txt| using Cscope with Vim
|
||||||
|
|if_lua.txt| Lua interface
|
||||||
|if_pyth.txt| Python interface
|
|if_pyth.txt| Python interface
|
||||||
|if_ruby.txt| Ruby interface
|
|if_ruby.txt| Ruby interface
|
||||||
|sign.txt| debugging signs
|
|sign.txt| debugging signs
|
||||||
@ -160,6 +161,9 @@ Versions ~
|
|||||||
*standard-plugin-list*
|
*standard-plugin-list*
|
||||||
Standard plugins ~
|
Standard plugins ~
|
||||||
|pi_gzip.txt| Reading and writing compressed files
|
|pi_gzip.txt| Reading and writing compressed files
|
||||||
|
|pi_health.txt| Healthcheck framework
|
||||||
|
|pi_matchit.txt| Extended "%" matching
|
||||||
|
|pi_msgpack.txt| msgpack utilities
|
||||||
|pi_netrw.txt| Reading and writing files over a network
|
|pi_netrw.txt| Reading and writing files over a network
|
||||||
|pi_paren.txt| Highlight matching parens
|
|pi_paren.txt| Highlight matching parens
|
||||||
|pi_spec.txt| Filetype plugin to work with rpm spec files
|
|pi_spec.txt| Filetype plugin to work with rpm spec files
|
||||||
@ -182,4 +186,4 @@ will try to find help for it. Especially for options in single quotes, e.g.
|
|||||||
'hlsearch'.
|
'hlsearch'.
|
||||||
|
|
||||||
------------------------------------------------------------------------------
|
------------------------------------------------------------------------------
|
||||||
vim:tw=78:fo=tcq2:isk=!-~,^*,^\|,^\":ts=8:ft=help:norl:
|
vim:tw=78:isk=!-~,^*,^\|,^\":ts=8:noet:ft=help:norl:
|
||||||
|
@ -364,4 +364,4 @@ highlighting. So do these:
|
|||||||
|
|
||||||
You can find the details in $VIMRUNTIME/syntax/help.vim
|
You can find the details in $VIMRUNTIME/syntax/help.vim
|
||||||
|
|
||||||
vim:tw=78:ts=8:ft=help:norl:
|
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||||
|
@ -371,4 +371,4 @@ Cscope Home Page (http://cscope.sourceforge.net/): >
|
|||||||
\:vert scs find a <C-R>=expand("<cword>")<CR><CR>
|
\:vert scs find a <C-R>=expand("<cword>")<CR><CR>
|
||||||
<
|
<
|
||||||
|
|
||||||
vim:tw=78:ts=8:ft=help:norl:
|
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||||
|
@ -229,8 +229,7 @@ shared between command calls. All Lua default libraries are available. In
|
|||||||
addition, Lua "print" function has its output redirected to the Nvim message
|
addition, Lua "print" function has its output redirected to the Nvim message
|
||||||
area, with arguments separated by a white space instead of a tab.
|
area, with arguments separated by a white space instead of a tab.
|
||||||
|
|
||||||
Lua uses the "vim" module (see |lua-vim|) to issue commands to Nvim
|
Lua uses the "vim" module (see |lua-vim|) to issue commands to Nvim. However,
|
||||||
and manage buffers (|lua-buffer|) and windows (|lua-window|). However,
|
|
||||||
procedures that alter buffer content, open new buffers, and change cursor
|
procedures that alter buffer content, open new buffers, and change cursor
|
||||||
position are restricted when the command is executed in the |sandbox|.
|
position are restricted when the command is executed in the |sandbox|.
|
||||||
|
|
||||||
@ -261,7 +260,7 @@ vim.stricmp(a, b) *lua-vim.stricmp*
|
|||||||
greater then b or a is lesser then b respectively.
|
greater then b or a is lesser then b respectively.
|
||||||
|
|
||||||
vim.type_idx *lua-vim.type_idx*
|
vim.type_idx *lua-vim.type_idx*
|
||||||
Type index for use in |lua-special-tables|. Specifying one of the
|
Type index for use in |lua-special-tbl|. Specifying one of the
|
||||||
values from |lua-vim.types| allows typing the empty table (it is
|
values from |lua-vim.types| allows typing the empty table (it is
|
||||||
unclear whether empty lua table represents empty list or empty array)
|
unclear whether empty lua table represents empty list or empty array)
|
||||||
and forcing integral numbers to be |Float|. See |lua-special-tbl| for
|
and forcing integral numbers to be |Float|. See |lua-special-tbl| for
|
||||||
@ -310,14 +309,22 @@ semantically equivalent in Lua to:
|
|||||||
return chunk(arg) -- return typval
|
return chunk(arg) -- return typval
|
||||||
end
|
end
|
||||||
|
|
||||||
Note that "_A" receives the argument to "luaeval". Lua nils, numbers, strings,
|
Lua nils, numbers, strings, tables and booleans are converted to their
|
||||||
tables and booleans are converted to their respective VimL types. An error is
|
respective VimL types. An error is thrown if conversion of any other Lua types
|
||||||
thrown if conversion of any of the remaining Lua types is attempted.
|
is attempted.
|
||||||
|
|
||||||
Note 2: lua tables are used as both dictionaries and lists, thus making it
|
The magic global "_A" contains the second argument to luaeval().
|
||||||
impossible to determine whether empty table is meant to be empty list or empty
|
|
||||||
dictionary. Additionally lua does not have integer numbers. To distinguish
|
Example: >
|
||||||
between these cases there is the following agreement:
|
:echo luaeval('_A[1] + _A[2]', [40, 2])
|
||||||
|
42
|
||||||
|
:echo luaeval('string.match(_A, "[a-z]+")', 'XYXfoo123')
|
||||||
|
foo
|
||||||
|
|
||||||
|
Lua tables are used as both dictionaries and lists, so it is impossible to
|
||||||
|
determine whether empty table is meant to be empty list or empty dictionary.
|
||||||
|
Additionally lua does not have integer numbers. To distinguish between these
|
||||||
|
cases there is the following agreement:
|
||||||
|
|
||||||
0. Empty table is empty list.
|
0. Empty table is empty list.
|
||||||
1. Table with N incrementally growing integral numbers, starting from 1 and
|
1. Table with N incrementally growing integral numbers, starting from 1 and
|
||||||
|
@ -4,9 +4,9 @@
|
|||||||
VIM REFERENCE MANUAL by Paul Moore
|
VIM REFERENCE MANUAL by Paul Moore
|
||||||
|
|
||||||
|
|
||||||
The Python Interface to Vim *python* *Python*
|
The Python Interface to Vim *if_pyth* *python* *Python*
|
||||||
|
|
||||||
See |provider-python| for more information. {Nvim}
|
See |provider-python| for more information.
|
||||||
|
|
||||||
Type |gO| to see the table of contents.
|
Type |gO| to see the table of contents.
|
||||||
|
|
||||||
@ -42,9 +42,10 @@ Example: >
|
|||||||
endfunction
|
endfunction
|
||||||
|
|
||||||
To see what version of Python you have: >
|
To see what version of Python you have: >
|
||||||
:python import sys
|
|
||||||
:python print(sys.version)
|
:python print(sys.version)
|
||||||
|
|
||||||
|
There is no need to import sys, it's done by default.
|
||||||
|
|
||||||
Note: Python is very sensitive to the indenting. Make sure the "class" line
|
Note: Python is very sensitive to the indenting. Make sure the "class" line
|
||||||
and "EOF" do not have any indent.
|
and "EOF" do not have any indent.
|
||||||
|
|
||||||
@ -62,6 +63,18 @@ Examples:
|
|||||||
>
|
>
|
||||||
:pydo return "%s\t%d" % (line[::-1], len(line))
|
:pydo return "%s\t%d" % (line[::-1], len(line))
|
||||||
:pydo if line: return "%4d: %s" % (linenr, line)
|
:pydo if line: return "%4d: %s" % (linenr, line)
|
||||||
|
<
|
||||||
|
One can use `:pydo` in possible conjunction with `:py` to filter a range using
|
||||||
|
python. For example: >
|
||||||
|
|
||||||
|
:py3 << EOF
|
||||||
|
needle = vim.eval('@a')
|
||||||
|
replacement = vim.eval('@b')
|
||||||
|
|
||||||
|
def py_vim_string_replace(str):
|
||||||
|
return str.replace(needle, replacement)
|
||||||
|
EOF
|
||||||
|
:'<,'>py3do return py_vim_string_replace(line)
|
||||||
<
|
<
|
||||||
*:pyfile* *:pyf*
|
*:pyfile* *:pyf*
|
||||||
:[range]pyf[ile] {file}
|
:[range]pyf[ile] {file}
|
||||||
@ -79,7 +92,6 @@ Python commands cannot be used in the |sandbox|.
|
|||||||
|
|
||||||
To pass arguments you need to set sys.argv[] explicitly. Example: >
|
To pass arguments you need to set sys.argv[] explicitly. Example: >
|
||||||
|
|
||||||
:python import sys
|
|
||||||
:python sys.argv = ["foo", "bar"]
|
:python sys.argv = ["foo", "bar"]
|
||||||
:pyfile myscript.py
|
:pyfile myscript.py
|
||||||
|
|
||||||
@ -118,7 +130,7 @@ Instead, put the Python command in a function and call that function:
|
|||||||
Note that "EOF" must be at the start of the line.
|
Note that "EOF" must be at the start of the line.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
2. The vim module *python-vim*
|
2. The vim module *python-vim* *python2*
|
||||||
|
|
||||||
Python code gets all of its access to vim (with one exception - see
|
Python code gets all of its access to vim (with one exception - see
|
||||||
|python-output| below) via the "vim" module. The vim module implements two
|
|python-output| below) via the "vim" module. The vim module implements two
|
||||||
@ -705,12 +717,10 @@ Raising SystemExit exception in python isn't endorsed way to quit vim, use: >
|
|||||||
You can test what Python version is available with: >
|
You can test what Python version is available with: >
|
||||||
if has('python')
|
if has('python')
|
||||||
echo 'there is Python 2.x'
|
echo 'there is Python 2.x'
|
||||||
elseif has('python3')
|
endif
|
||||||
|
if has('python3')
|
||||||
echo 'there is Python 3.x'
|
echo 'there is Python 3.x'
|
||||||
endif
|
endif
|
||||||
|
|
||||||
Note however, that if Python 2 and 3 are both available, but not loaded,
|
|
||||||
these has() calls will try to load them.
|
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
vim:tw=78:ts=8:ft=help:norl:
|
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
|
|
||||||
VIM REFERENCE MANUAL by Shugo Maeda
|
VIM REFERENCE MANUAL by Shugo Maeda
|
||||||
|
|
||||||
The Ruby Interface to Vim *ruby* *Ruby*
|
The Ruby Interface to Vim *if_ruby* *ruby* *Ruby*
|
||||||
|
|
||||||
*E266* *E267* *E268* *E269* *E270* *E271* *E272* *E273*
|
*E266* *E267* *E268* *E269* *E270* *E271* *E272* *E273*
|
||||||
|
|
||||||
@ -180,4 +180,4 @@ $curwin The current window object.
|
|||||||
$curbuf The current buffer object.
|
$curbuf The current buffer object.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
vim:tw=78:ts=8:ft=help:norl:
|
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||||
|
@ -410,10 +410,10 @@ The examples below assume a 'shiftwidth' of 4.
|
|||||||
*cino-(*
|
*cino-(*
|
||||||
(N When in unclosed parentheses, indent N characters from the line
|
(N When in unclosed parentheses, indent N characters from the line
|
||||||
with the unclosed parentheses. Add a 'shiftwidth' for every
|
with the unclosed parentheses. Add a 'shiftwidth' for every
|
||||||
unclosed parentheses. When N is 0 or the unclosed parentheses
|
extra unclosed parentheses. When N is 0 or the unclosed
|
||||||
is the first non-white character in its line, line up with the
|
parentheses is the first non-white character in its line, line
|
||||||
next non-white character after the unclosed parentheses.
|
up with the next non-white character after the unclosed
|
||||||
(default 'shiftwidth' * 2).
|
parentheses. (default 'shiftwidth' * 2).
|
||||||
|
|
||||||
cino= cino=(0 >
|
cino= cino=(0 >
|
||||||
if (c1 && (c2 || if (c1 && (c2 ||
|
if (c1 && (c2 || if (c1 && (c2 ||
|
||||||
@ -424,7 +424,8 @@ The examples below assume a 'shiftwidth' of 4.
|
|||||||
{ {
|
{ {
|
||||||
<
|
<
|
||||||
*cino-u*
|
*cino-u*
|
||||||
uN Same as (N, but for one level deeper. (default 'shiftwidth').
|
uN Same as (N, but for one nesting level deeper.
|
||||||
|
(default 'shiftwidth').
|
||||||
|
|
||||||
cino= cino=u2 >
|
cino= cino=u2 >
|
||||||
if (c123456789 if (c123456789
|
if (c123456789 if (c123456789
|
||||||
@ -902,6 +903,25 @@ In PHP braces are not required inside 'case/default' blocks therefore 'case:'
|
|||||||
and 'default:' are indented at the same level than the 'switch()' to avoid
|
and 'default:' are indented at the same level than the 'switch()' to avoid
|
||||||
meaningless indentation. You can use the above option to return to the
|
meaningless indentation. You can use the above option to return to the
|
||||||
traditional way.
|
traditional way.
|
||||||
|
-------------
|
||||||
|
|
||||||
|
*PHP_noArrowMatching*
|
||||||
|
By default the indent script will indent multi-line chained calls by matching
|
||||||
|
the position of the '->': >
|
||||||
|
|
||||||
|
$user_name_very_long->name()
|
||||||
|
->age()
|
||||||
|
->info();
|
||||||
|
|
||||||
|
You can revert to the classic way of indenting by setting this option to 1: >
|
||||||
|
:let g:PHP_noArrowMatching = 1
|
||||||
|
|
||||||
|
You will obtain the following result: >
|
||||||
|
|
||||||
|
$user_name_very_long->name()
|
||||||
|
->age()
|
||||||
|
->info();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
PYTHON *ft-python-indent*
|
PYTHON *ft-python-indent*
|
||||||
@ -917,6 +937,11 @@ Indent after a nested paren: >
|
|||||||
Indent for a continuation line: >
|
Indent for a continuation line: >
|
||||||
let g:pyindent_continue = '&sw * 2'
|
let g:pyindent_continue = '&sw * 2'
|
||||||
|
|
||||||
|
The method uses searchpair() to look back for unclosed parenthesis. This can
|
||||||
|
sometimes be slow, thus it timeouts after 150 msec. If you notice the
|
||||||
|
indenting isn't correct, you can set a larger timeout in msec: >
|
||||||
|
let g:pyindent_searchpair_timeout = 500
|
||||||
|
|
||||||
|
|
||||||
R *ft-r-indent*
|
R *ft-r-indent*
|
||||||
|
|
||||||
@ -954,6 +979,11 @@ Below is an example of indentation with and without this option enabled:
|
|||||||
paste(x) paste(x)
|
paste(x) paste(x)
|
||||||
} }
|
} }
|
||||||
<
|
<
|
||||||
|
The code will be indented after lines that match the pattern
|
||||||
|
`'\(&\||\|+\|-\|\*\|/\|=\|\~\|%\|->\)\s*$'`. If you want indentation after
|
||||||
|
lines that match a different pattern, you should set the appropriate value of
|
||||||
|
`r_indent_op_pattern` in your |vimrc|.
|
||||||
|
|
||||||
|
|
||||||
SHELL *ft-sh-indent*
|
SHELL *ft-sh-indent*
|
||||||
|
|
||||||
@ -1132,4 +1162,4 @@ indent for a continuation line, a line that starts with a backslash: >
|
|||||||
Three times shiftwidth is the default value.
|
Three times shiftwidth is the default value.
|
||||||
|
|
||||||
|
|
||||||
vim:tw=78:ts=8:ft=help:norl:
|
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||||
|
@ -944,7 +944,7 @@ tag command note action in Visual mode ~
|
|||||||
|v_i{| i{ same as iB
|
|v_i{| i{ same as iB
|
||||||
|v_i}| i} same as iB
|
|v_i}| i} same as iB
|
||||||
|v_o| o move cursor to other corner of area
|
|v_o| o move cursor to other corner of area
|
||||||
|v_r| r 2 delete highlighted area and start insert
|
|v_r| r 2 replace highlighted area with a character
|
||||||
|v_s| s 2 delete highlighted area and start insert
|
|v_s| s 2 delete highlighted area and start insert
|
||||||
|v_u| u 2 make highlighted area lowercase
|
|v_u| u 2 make highlighted area lowercase
|
||||||
|v_v| v make Visual mode characterwise or stop
|
|v_v| v make Visual mode characterwise or stop
|
||||||
@ -1472,7 +1472,6 @@ tag command action ~
|
|||||||
|:sfind| :sf[ind] split current window and edit file in 'path'
|
|:sfind| :sf[ind] split current window and edit file in 'path'
|
||||||
|:sfirst| :sfir[st] split window and go to first file in the
|
|:sfirst| :sfir[st] split window and go to first file in the
|
||||||
argument list
|
argument list
|
||||||
|:simalt| :sim[alt] Win32 GUI: simulate Windows ALT key
|
|
||||||
|:sign| :sig[n] manipulate signs
|
|:sign| :sig[n] manipulate signs
|
||||||
|:silent| :sil[ent] run a command silently
|
|:silent| :sil[ent] run a command silently
|
||||||
|:sleep| :sl[eep] do nothing for a few seconds
|
|:sleep| :sl[eep] do nothing for a few seconds
|
||||||
@ -1615,4 +1614,4 @@ tag command action ~
|
|||||||
|:~| :~ repeat last ":substitute"
|
|:~| :~ repeat last ":substitute"
|
||||||
|
|
||||||
|
|
||||||
vim:tw=78:ts=8:ft=help:norl:
|
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||||
|
@ -411,11 +411,11 @@ An example for using CTRL-G U: >
|
|||||||
|
|
||||||
This makes it possible to use the cursor keys in Insert mode, without breaking
|
This makes it possible to use the cursor keys in Insert mode, without breaking
|
||||||
the undo sequence and therefore using |.| (redo) will work as expected.
|
the undo sequence and therefore using |.| (redo) will work as expected.
|
||||||
Also entering a text like (with the "(" mapping from above): >
|
Also entering a text like (with the "(" mapping from above):
|
||||||
|
|
||||||
Lorem ipsum (dolor
|
Lorem ipsum (dolor
|
||||||
|
|
||||||
will be repeatable by the |.|to the expected
|
will be repeatable by using |.| to the expected
|
||||||
|
|
||||||
Lorem ipsum (dolor)
|
Lorem ipsum (dolor)
|
||||||
|
|
||||||
@ -1026,13 +1026,13 @@ The function must return the column where the completion starts. It must be a
|
|||||||
number between zero and the cursor column "col('.')". This involves looking
|
number between zero and the cursor column "col('.')". This involves looking
|
||||||
at the characters just before the cursor and including those characters that
|
at the characters just before the cursor and including those characters that
|
||||||
could be part of the completed item. The text between this column and the
|
could be part of the completed item. The text between this column and the
|
||||||
cursor column will be replaced with the matches.
|
cursor column will be replaced with the matches. If the returned value is
|
||||||
|
larger than the cursor column, the cursor column is used.
|
||||||
|
|
||||||
Special return values:
|
Negative return values:
|
||||||
-1 If no completion can be done, the completion will be cancelled with an
|
|
||||||
error message.
|
|
||||||
-2 To cancel silently and stay in completion mode.
|
-2 To cancel silently and stay in completion mode.
|
||||||
-3 To cancel silently and leave completion mode.
|
-3 To cancel silently and leave completion mode.
|
||||||
|
Another negative value: completion starts at the cursor column
|
||||||
|
|
||||||
On the second invocation the arguments are:
|
On the second invocation the arguments are:
|
||||||
a:findstart 0
|
a:findstart 0
|
||||||
@ -1275,7 +1275,8 @@ it here: http://ctags.sourceforge.net/ Version 5.6 or later is recommended.
|
|||||||
For version 5.5.4 you should add a patch that adds the "typename:" field:
|
For version 5.5.4 you should add a patch that adds the "typename:" field:
|
||||||
ftp://ftp.vim.org/pub/vim/unstable/patches/ctags-5.5.4.patch
|
ftp://ftp.vim.org/pub/vim/unstable/patches/ctags-5.5.4.patch
|
||||||
A compiled .exe for MS-Windows can be found at:
|
A compiled .exe for MS-Windows can be found at:
|
||||||
http://georgevreilly.com/vim/ctags.html
|
http://ctags.sourceforge.net/
|
||||||
|
https://github.com/universal-ctags/ctags-win32
|
||||||
|
|
||||||
If you want to complete system functions you can do something like this. Use
|
If you want to complete system functions you can do something like this. Use
|
||||||
ctags to generate a tags file for all the system header files: >
|
ctags to generate a tags file for all the system header files: >
|
||||||
@ -1428,7 +1429,7 @@ automatically switch to HTML/CSS/JavaScript completion. Note: contrary to
|
|||||||
original HTML files completion of tags (and only tags) isn't context aware.
|
original HTML files completion of tags (and only tags) isn't context aware.
|
||||||
|
|
||||||
|
|
||||||
RUBY *ft-ruby-omni* {Nvim}
|
RUBY *ft-ruby-omni*
|
||||||
|
|
||||||
NOTE: |compl-omni| for Ruby code requires |provider-ruby| to be installed.
|
NOTE: |compl-omni| for Ruby code requires |provider-ruby| to be installed.
|
||||||
|
|
||||||
@ -1508,9 +1509,9 @@ groups are included by default with the PHP: phpEnvVar, phpIntVar,
|
|||||||
phpFunctions.
|
phpFunctions.
|
||||||
|
|
||||||
If you wish non-filetype syntax items to also be included, you can use a
|
If you wish non-filetype syntax items to also be included, you can use a
|
||||||
regular expression syntax (added in version 13.0 of autoload\syntaxcomplete.vim)
|
regular expression syntax (added in version 13.0 of
|
||||||
to add items. Looking at the output from ":syntax list" while editing a PHP file
|
autoload/syntaxcomplete.vim) to add items. Looking at the output from
|
||||||
I can see some of these entries: >
|
":syntax list" while editing a PHP file I can see some of these entries: >
|
||||||
htmlArg,htmlTag,htmlTagName,javaScriptStatement,javaScriptGlobalObjects
|
htmlArg,htmlTag,htmlTagName,javaScriptStatement,javaScriptGlobalObjects
|
||||||
|
|
||||||
To pick up any JavaScript and HTML keyword syntax groups while editing a PHP
|
To pick up any JavaScript and HTML keyword syntax groups while editing a PHP
|
||||||
@ -1557,15 +1558,15 @@ SQL file (:e syntax.sql) you can use the ":syntax list" command to see the
|
|||||||
various groups and syntax items. For example: >
|
various groups and syntax items. For example: >
|
||||||
syntax list
|
syntax list
|
||||||
|
|
||||||
Yields data similar to this: >
|
Yields data similar to this:
|
||||||
sqlOperator xxx some prior all like and any escape exists in is not
|
sqlOperator xxx some prior all like and any escape exists in is not ~
|
||||||
or intersect minus between distinct
|
or intersect minus between distinct ~
|
||||||
links to Operator
|
links to Operator ~
|
||||||
sqlType xxx varbit varchar nvarchar bigint int uniqueidentifier
|
sqlType xxx varbit varchar nvarchar bigint int uniqueidentifier ~
|
||||||
date money long tinyint unsigned xml text smalldate
|
date money long tinyint unsigned xml text smalldate ~
|
||||||
double datetime nchar smallint numeric time bit char
|
double datetime nchar smallint numeric time bit char ~
|
||||||
varbinary binary smallmoney
|
varbinary binary smallmoney ~
|
||||||
image float integer timestamp real decimal
|
image float integer timestamp real decimal ~
|
||||||
|
|
||||||
There are two syntax groups listed here: sqlOperator and sqlType. To retrieve
|
There are two syntax groups listed here: sqlOperator and sqlType. To retrieve
|
||||||
a List of syntax items you can call OmniSyntaxList a number of different
|
a List of syntax items you can call OmniSyntaxList a number of different
|
||||||
@ -1586,7 +1587,6 @@ From within a plugin, you would typically assign the output to a List: >
|
|||||||
let myKeywords = OmniSyntaxList( ['sqlKeyword'] )
|
let myKeywords = OmniSyntaxList( ['sqlKeyword'] )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
SQL *ft-sql-omni*
|
SQL *ft-sql-omni*
|
||||||
|
|
||||||
Completion for the SQL language includes statements, functions, keywords.
|
Completion for the SQL language includes statements, functions, keywords.
|
||||||
@ -1972,4 +1972,4 @@ self explanatory. Using the long or the short version depends on the
|
|||||||
[READ ERRORS] not all of the file could be read
|
[READ ERRORS] not all of the file could be read
|
||||||
|
|
||||||
|
|
||||||
vim:tw=78:ts=8:ft=help:norl:
|
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
*intro.txt* Nvim
|
*intro.txt* Nvim
|
||||||
|
|
||||||
|
|
||||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
NVIM REFERENCE MANUAL
|
||||||
|
|
||||||
|
|
||||||
Introduction to Vim *ref* *reference*
|
Introduction to Vim *ref* *reference*
|
||||||
@ -9,7 +9,7 @@ Introduction to Vim *ref* *reference*
|
|||||||
Type |gO| to see the table of contents.
|
Type |gO| to see the table of contents.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
1. Introduction *intro*
|
Introduction *intro*
|
||||||
|
|
||||||
Vim stands for Vi IMproved. It used to be Vi IMitation, but there are so many
|
Vim stands for Vi IMproved. It used to be Vi IMitation, but there are so many
|
||||||
improvements that a name change was appropriate. Vim is a text editor which
|
improvements that a name change was appropriate. Vim is a text editor which
|
||||||
@ -28,8 +28,8 @@ is not located in the default place. You can jump to subjects like with tags:
|
|||||||
Use CTRL-] to jump to a subject under the cursor, use CTRL-T to jump back.
|
Use CTRL-] to jump to a subject under the cursor, use CTRL-T to jump back.
|
||||||
|
|
||||||
*pronounce*
|
*pronounce*
|
||||||
Vim is pronounced as one word, like Jim, not vi-ai-em. It's written with a
|
Vim is pronounced as one word, like Jim. Nvim is pronounced as N-vim, or,
|
||||||
capital, since it's a name, again like Jim.
|
continuing with the Jim simile, N-Jim, which sounds like Ninja.
|
||||||
|
|
||||||
This manual is a reference for all the Vim commands and options. This is not
|
This manual is a reference for all the Vim commands and options. This is not
|
||||||
an introduction to the use of Vi or Vim, it gets a bit complicated here and
|
an introduction to the use of Vi or Vim, it gets a bit complicated here and
|
||||||
@ -37,134 +37,67 @@ there. For beginners, there is a hands-on |tutor|. To learn using Vim, read
|
|||||||
the user manual |usr_toc.txt|.
|
the user manual |usr_toc.txt|.
|
||||||
|
|
||||||
*book*
|
*book*
|
||||||
There are many books on Vi that contain a section for beginners. There are
|
There are many books on Vi and Vim. We recommend these books:
|
||||||
two books I can recommend:
|
|
||||||
|
"Practical Vim" by Drew Neil
|
||||||
|
"Modern Vim" by Drew Neil
|
||||||
|
https://vimcasts.org/publications/
|
||||||
|
|
||||||
|
"Practical Vim" is a popular because of its focus on quickly learning common
|
||||||
|
editing tasks with Vim. "Modern Vim" explores new features introduced by Nvim
|
||||||
|
and Vim 8.
|
||||||
|
|
||||||
"Vim - Vi Improved" by Steve Oualline
|
"Vim - Vi Improved" by Steve Oualline
|
||||||
|
|
||||||
This is the very first book completely dedicated to Vim. It is very good for
|
This is the first book dedicated to Vim. Parts of it were included in the
|
||||||
beginners. The most often used commands are explained with pictures and
|
user manual. |frombook| ISBN: 0735710015
|
||||||
examples. The less often used commands are also explained, the more advanced
|
|
||||||
features are summarized. There is a comprehensive index and a quick
|
|
||||||
reference. Parts of this book have been included in the user manual
|
|
||||||
|frombook|.
|
|
||||||
Published by New Riders Publishing. ISBN: 0735710015
|
|
||||||
For more information try one of these:
|
For more information try one of these:
|
||||||
http://iccf-holland.org/click5.html
|
https://iccf-holland.org/click5.html
|
||||||
http://www.vim.org/iccf/click5.html
|
https://www.vim.org/iccf/click5.html
|
||||||
|
|
||||||
"Learning the Vi editor" by Linda Lamb and Arnold Robbins
|
|
||||||
|
|
||||||
This is a book about Vi that includes a chapter on Vim (in the sixth edition).
|
|
||||||
The first steps in Vi are explained very well. The commands that Vim adds are
|
|
||||||
only briefly mentioned. There is also a German translation.
|
|
||||||
Published by O'Reilly. ISBN: 1-56592-426-6.
|
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
2. Vim on the internet *internet*
|
Nvim on the interwebs *internet*
|
||||||
|
|
||||||
*www* *WWW* *faq* *FAQ* *distribution* *download*
|
*www* *WWW* *faq* *FAQ* *distribution* *download*
|
||||||
The Vim pages contain the most recent information about Vim. They also
|
|
||||||
contain links to the most recent version of Vim. The FAQ is a list of
|
|
||||||
Frequently Asked Questions. Read this if you have problems.
|
|
||||||
|
|
||||||
Vim home page: http://www.vim.org/
|
Nvim home page: https://neovim.io/
|
||||||
Vim FAQ: http://vimdoc.sf.net/
|
Nvim FAQ: https://github.com/neovim/neovim/wiki/FAQ
|
||||||
Downloading: ftp://ftp.vim.org/pub/vim/MIRRORS
|
Downloads: https://github.com/neovim/neovim/releases
|
||||||
|
Vim FAQ: https://vimhelp.appspot.com/vim_faq.txt.html
|
||||||
|
Vim home page: https://www.vim.org/
|
||||||
Usenet News group where Vim is discussed: *news* *usenet*
|
|
||||||
comp.editors
|
|
||||||
This group is also for other editors. If you write about Vim, don't forget to
|
|
||||||
mention that.
|
|
||||||
|
|
||||||
*mail-list* *maillist*
|
|
||||||
There are several mailing lists for Vim:
|
|
||||||
<vim@vim.org> *vim-use* *vim_use*
|
|
||||||
For discussions about using existing versions of Vim: Useful mappings,
|
|
||||||
questions, answers, where to get a specific version, etc. There are
|
|
||||||
quite a few people watching this list and answering questions, also
|
|
||||||
for beginners. Don't hesitate to ask your question here.
|
|
||||||
<vim-dev@vim.org> *vim-dev* *vim_dev* *vimdev*
|
|
||||||
For discussions about changing Vim: New features, porting, patches,
|
|
||||||
beta-test versions, etc.
|
|
||||||
<vim-announce@vim.org> *vim-announce* *vim_announce*
|
|
||||||
Announcements about new versions of Vim; also for beta-test versions
|
|
||||||
and ports to different systems. This is a read-only list.
|
|
||||||
<vim-mac@vim.org> *vim-mac* *vim_mac*
|
|
||||||
For discussions about using and improving the Macintosh version of
|
|
||||||
Vim.
|
|
||||||
|
|
||||||
See http://www.vim.org/maillist.php for the latest information.
|
|
||||||
|
|
||||||
NOTE:
|
|
||||||
- You can only send messages to these lists if you have subscribed!
|
|
||||||
- You need to send the messages from the same location as where you subscribed
|
|
||||||
from (to avoid spam mail).
|
|
||||||
- Maximum message size is 40000 characters.
|
|
||||||
|
|
||||||
*subscribe-maillist*
|
|
||||||
If you want to join, send a message to
|
|
||||||
<vim-subscribe@vim.org>
|
|
||||||
Make sure that your "From:" address is correct. Then the list server will
|
|
||||||
give you help on how to subscribe.
|
|
||||||
|
|
||||||
*maillist-archive*
|
|
||||||
For more information and archives look on the Vim maillist page:
|
|
||||||
http://www.vim.org/maillist.php
|
|
||||||
|
|
||||||
|
|
||||||
Bug reports: *bugs* *bug-reports* *bugreport.vim*
|
Bug reports: *bugs* *bug-reports* *bugreport.vim*
|
||||||
|
|
||||||
Report bugs on GitHub: https://github.com/neovim/neovim/issues
|
Report bugs on GitHub: https://github.com/neovim/neovim/issues
|
||||||
|
|
||||||
Please be brief; all the time that is spent on answering mail is subtracted
|
Be brief, yet complete. Always give a reproducible example and try to find
|
||||||
from the time that is spent on improving Vim! Always give a reproducible
|
out which settings or other things trigger the bug.
|
||||||
example and try to find out which settings or other things trigger the bug.
|
|
||||||
|
|
||||||
Preferably start Vim with: >
|
If Nvim crashes, try to get a backtrace. See |debug.txt|.
|
||||||
vim --clean -u reproduce.vim
|
|
||||||
Where reproduce.vim is a script that reproduces the problem. Try different
|
|
||||||
machines, if relevant (is this an MS-Windows specific bug perhaps?).
|
|
||||||
|
|
||||||
Send me patches if you can!
|
|
||||||
|
|
||||||
It will help to include information about the version of Vim you are using and
|
|
||||||
your setup. You can get the information with this command: >
|
|
||||||
:so $VIMRUNTIME/bugreport.vim
|
|
||||||
This will create a file "bugreport.txt" in the current directory, with a lot
|
|
||||||
of information of your environment. Before sending this out, check if it
|
|
||||||
doesn't contain any confidential information!
|
|
||||||
|
|
||||||
If Vim crashes, please try to find out where. You can find help on this here:
|
|
||||||
|debug.txt|.
|
|
||||||
|
|
||||||
In case of doubt or when you wonder if the problem has already been fixed but
|
|
||||||
you can't find a fix for it, become a member of the vim-dev maillist and ask
|
|
||||||
your question there. |maillist|
|
|
||||||
|
|
||||||
*year-2000* *Y2K*
|
|
||||||
Since Vim internally doesn't use dates for editing, there is no year 2000
|
|
||||||
problem to worry about. Vim does use the time in the form of seconds since
|
|
||||||
January 1st 1970. It is used for a time-stamp check of the edited file and
|
|
||||||
the swap file, which is not critical and should only cause warning messages.
|
|
||||||
|
|
||||||
There might be a year 2038 problem, when the seconds don't fit in a 32 bit int
|
|
||||||
anymore. This depends on the compiler, libraries and operating system.
|
|
||||||
Specifically, time_t and the ctime() function are used. And the time_t is
|
|
||||||
stored in four bytes in the swap file. But that's only used for printing a
|
|
||||||
file date/time for recovery, it will never affect normal editing.
|
|
||||||
|
|
||||||
The Vim strftime() function directly uses the strftime() system function.
|
|
||||||
localtime() uses the time() system function. getftime() uses the time
|
|
||||||
returned by the stat() system function. If your system libraries are year
|
|
||||||
2000 compliant, Vim is too.
|
|
||||||
|
|
||||||
The user may create scripts for Vim that use external commands. These might
|
|
||||||
introduce Y2K problems, but those are not really part of Vim itself.
|
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
3. Credits *credits* *author* *Bram* *Moolenaar*
|
Sponsor Vim/Nvim development *sponsor* *register*
|
||||||
|
|
||||||
|
Fixing bugs and adding new features takes a lot of time and effort. To show
|
||||||
|
your appreciation for the work and motivate Bram and others to continue
|
||||||
|
working on Vim please send a donation.
|
||||||
|
|
||||||
|
Since Bram is back to a paid job the money will now be used to help children
|
||||||
|
in Uganda. See |uganda|. But at the same time donations increase Bram's
|
||||||
|
motivation to keep working on Vim!
|
||||||
|
|
||||||
|
For the most recent information about sponsoring look on the Vim web site:
|
||||||
|
|
||||||
|
https://www.vim.org/sponsor/
|
||||||
|
|
||||||
|
|
||||||
|
Neovim development is funded separately from Vim:
|
||||||
|
|
||||||
|
https://neovim.io/#sponsor
|
||||||
|
|
||||||
|
==============================================================================
|
||||||
|
Credits *credits* *author* *Bram* *Moolenaar*
|
||||||
|
|
||||||
Most of Vim was written by Bram Moolenaar <Bram@vim.org>.
|
Most of Vim was written by Bram Moolenaar <Bram@vim.org>.
|
||||||
|
|
||||||
@ -273,7 +206,7 @@ Elvis Another Vi clone, made by Steve Kirkendall. Very compact but isn't
|
|||||||
freely available.
|
freely available.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
4. Notation *notation*
|
Notation *notation*
|
||||||
|
|
||||||
When syntax highlighting is used to read this, text that is not typed
|
When syntax highlighting is used to read this, text that is not typed
|
||||||
literally is often highlighted with the Special group. These are items in [],
|
literally is often highlighted with the Special group. These are items in [],
|
||||||
@ -439,7 +372,7 @@ notation meaning equivalent decimal value(s) ~
|
|||||||
<k0> - <k9> keypad 0 to 9 *keypad-0* *keypad-9*
|
<k0> - <k9> keypad 0 to 9 *keypad-0* *keypad-9*
|
||||||
<S-...> shift-key *shift* *<S-*
|
<S-...> shift-key *shift* *<S-*
|
||||||
<C-...> control-key *control* *ctrl* *<C-*
|
<C-...> control-key *control* *ctrl* *<C-*
|
||||||
<M-...> alt-key or meta-key *META* *meta* *alt* *<M-*
|
<M-...> alt-key or meta-key *META* *ALT* *<M-*
|
||||||
<A-...> same as <M-...> *<A-*
|
<A-...> same as <M-...> *<A-*
|
||||||
<D-...> command-key or "super" key *<D-*
|
<D-...> command-key or "super" key *<D-*
|
||||||
-----------------------------------------------------------------------
|
-----------------------------------------------------------------------
|
||||||
@ -494,7 +427,7 @@ examples and use them directly. Or type them literally, including the '<' and
|
|||||||
":autocmd"!
|
":autocmd"!
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
5. Modes, introduction *vim-modes-intro* *vim-modes*
|
Modes, introduction *vim-modes-intro* *vim-modes*
|
||||||
|
|
||||||
Vim has seven BASIC modes:
|
Vim has seven BASIC modes:
|
||||||
|
|
||||||
@ -559,9 +492,9 @@ Virtual Replace mode Virtual Replace mode is similar to Replace mode, but
|
|||||||
If the 'showmode' option is on "-- VREPLACE --" is
|
If the 'showmode' option is on "-- VREPLACE --" is
|
||||||
shown at the bottom of the window.
|
shown at the bottom of the window.
|
||||||
|
|
||||||
Insert Normal mode Entered when CTRL-O given in Insert mode. This is
|
Insert Normal mode Entered when CTRL-O is typed in Insert mode (see
|
||||||
like Normal mode, but after executing one command Vim
|
|i_CTRL-O|). This is like Normal mode, but after
|
||||||
returns to Insert mode.
|
executing one command Vim returns to Insert mode.
|
||||||
If the 'showmode' option is on "-- (insert) --" is
|
If the 'showmode' option is on "-- (insert) --" is
|
||||||
shown at the bottom of the window.
|
shown at the bottom of the window.
|
||||||
|
|
||||||
@ -579,7 +512,7 @@ Insert Select mode Entered when starting Select mode from Insert mode.
|
|||||||
is shown at the bottom of the window.
|
is shown at the bottom of the window.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
6. Switching from mode to mode *mode-switching*
|
Switching from mode to mode *mode-switching*
|
||||||
|
|
||||||
If for any reason you do not know which mode you are in, you can always get
|
If for any reason you do not know which mode you are in, you can always get
|
||||||
back to Normal mode by typing <Esc> twice. This doesn't work for Ex mode
|
back to Normal mode by typing <Esc> twice. This doesn't work for Ex mode
|
||||||
@ -642,28 +575,15 @@ The command CTRL-\ CTRL-G or <C-\><C-G> can be used to go to Insert mode when
|
|||||||
make sure Vim is in the mode indicated by 'insertmode', without knowing in
|
make sure Vim is in the mode indicated by 'insertmode', without knowing in
|
||||||
what mode Vim currently is.
|
what mode Vim currently is.
|
||||||
|
|
||||||
*Q* *mode-Ex* *Ex-mode* *Ex* *EX* *E501*
|
*gQ* *Q* *mode-Ex* *Ex-mode* *Ex* *EX* *E501*
|
||||||
Q Switch to "Ex" mode. This is a bit like typing ":"
|
Q or gQ Switch to Ex mode. This is like typing ":" commands
|
||||||
commands one after another, except:
|
one after another, except:
|
||||||
- You don't have to keep pressing ":".
|
- You don't have to keep pressing ":".
|
||||||
- The screen doesn't get updated after each command.
|
- The screen doesn't get updated after each command.
|
||||||
- There is no normal command-line editing.
|
Use the ":vi" command |:visual| to exit this mode.
|
||||||
- Mappings and abbreviations are not used.
|
|
||||||
In fact, you are editing the lines with the "standard"
|
|
||||||
line-input editing commands (<Del> or <BS> to erase,
|
|
||||||
CTRL-U to kill the whole line).
|
|
||||||
Vim will enter this mode by default if it's invoked as
|
|
||||||
"ex" on the command-line.
|
|
||||||
Use the ":vi" command |:visual| to exit "Ex" mode.
|
|
||||||
|
|
||||||
*gQ*
|
|
||||||
gQ Switch to "Ex" mode like with "Q", but really behave
|
|
||||||
like typing ":" commands after another. All command
|
|
||||||
line editing, completion etc. is available.
|
|
||||||
Use the ":vi" command |:visual| to exit "Ex" mode.
|
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
7. The window contents *window-contents*
|
The window contents *window-contents*
|
||||||
|
|
||||||
In Normal mode and Insert/Replace mode the screen window will show the current
|
In Normal mode and Insert/Replace mode the screen window will show the current
|
||||||
contents of the buffer: What You See Is What You Get. There are two
|
contents of the buffer: What You See Is What You Get. There are two
|
||||||
@ -782,18 +702,15 @@ window. You may make the window as small as you like, but if it gets too
|
|||||||
small not a single line will fit in it. Make it at least 40 characters wide
|
small not a single line will fit in it. Make it at least 40 characters wide
|
||||||
to be able to read most messages on the last line.
|
to be able to read most messages on the last line.
|
||||||
|
|
||||||
On most Unix systems, resizing the window is recognized and handled correctly
|
|
||||||
by Vim.
|
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
8. Definitions *definitions*
|
Definitions *definitions* *jargon*
|
||||||
|
|
||||||
buffer Contains lines of text, usually read from a file.
|
buffer Contains lines of text, usually from a file.
|
||||||
screen The whole area that Vim uses to work in. This can be
|
screen The whole area that Nvim uses to display things.
|
||||||
a terminal emulator window. Also called "the Vim
|
|
||||||
window".
|
|
||||||
window A view on a buffer. There can be multiple windows for
|
window A view on a buffer. There can be multiple windows for
|
||||||
one buffer.
|
one buffer.
|
||||||
|
frame Windows are kept in a tree of frames. Each frame
|
||||||
|
contains a column, row, or window ("leaf" frame).
|
||||||
|
|
||||||
A screen contains one or more windows, separated by status lines and with the
|
A screen contains one or more windows, separated by status lines and with the
|
||||||
command line at the bottom.
|
command line at the bottom.
|
||||||
@ -826,7 +743,7 @@ A difference is made between four types of lines:
|
|||||||
lines with wrapping, line breaks, etc. applied. They
|
lines with wrapping, line breaks, etc. applied. They
|
||||||
can only be as long as the width of the window allows,
|
can only be as long as the width of the window allows,
|
||||||
longer lines are wrapped or truncated.
|
longer lines are wrapped or truncated.
|
||||||
screen lines The lines of the screen that Vim uses. Consists of
|
screen lines The lines of the screen that Nvim uses. Consists of
|
||||||
the window lines of all windows, with status lines
|
the window lines of all windows, with status lines
|
||||||
and the command line added. They can only be as long
|
and the command line added. They can only be as long
|
||||||
as the width of the screen allows. When the command
|
as the width of the screen allows. When the command
|
||||||
@ -850,5 +767,27 @@ buffer lines logical lines window lines screen lines ~
|
|||||||
5. ddd 13. (command line)
|
5. ddd 13. (command line)
|
||||||
6. ~
|
6. ~
|
||||||
|
|
||||||
|
|
||||||
|
API client ~
|
||||||
|
All external UIs and remote plugins (as opposed to regular Vim plugins) are
|
||||||
|
"clients" in general; but we call something an "API client" if its purpose is
|
||||||
|
to abstract or wrap the RPC API for the convenience of other applications
|
||||||
|
(just like a REST client or SDK such as boto3 for AWS: you can speak AWS REST
|
||||||
|
using an HTTP client like curl, but boto3 wraps that in a convenient python
|
||||||
|
interface). For example, the Nvim lua-client is an API client:
|
||||||
|
https://github.com/neovim/lua-client
|
||||||
|
|
||||||
|
|
||||||
|
Host ~
|
||||||
|
A plugin "host" is both a client (of the Nvim API) and a server (of an
|
||||||
|
external platform, e.g. python). It is a remote plugin that hosts other
|
||||||
|
plugins.
|
||||||
|
|
||||||
|
|
||||||
|
Remote plugin ~
|
||||||
|
Arbitrary code registered via |:UpdateRemotePlugins|, that runs in a separate
|
||||||
|
process and communicates with Nvim via the |api|.
|
||||||
|
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
vim:tw=78:ts=8:ft=help:norl:
|
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||||
|
@ -16,12 +16,14 @@ Concepts
|
|||||||
|
|
||||||
Job Id *job-id*
|
Job Id *job-id*
|
||||||
|
|
||||||
When a job starts it is assigned a number, unique for the life of the current
|
Each job is identified by an integer id, unique for the life of the current
|
||||||
Nvim session. Functions like |jobstart()| return job ids. Functions like
|
Nvim session. Each job-id is a valid |channel-id|: they share the same "key
|
||||||
|
space". 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
|
Job stdio streams form a |channel| which can send and receive raw bytes or
|
||||||
and recieve raw bytes, or use |msgpack-rpc|.
|
|msgpack-rpc| messages.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
Usage *job-control-usage*
|
Usage *job-control-usage*
|
||||||
|
|
||||||
|
@ -135,11 +135,11 @@ NR == 1 { nf=split(FILENAME,f,".")
|
|||||||
# common case - Latin1
|
# common case - Latin1
|
||||||
print "<META HTTP-EQUIV=\"Content-type\" content=\"text/html; charset=ISO-8859-1\">";
|
print "<META HTTP-EQUIV=\"Content-type\" content=\"text/html; charset=ISO-8859-1\">";
|
||||||
}
|
}
|
||||||
print "<TITLE>Vim documentation: " f[1] "</TITLE>";
|
print "<TITLE>Nvim documentation: " f[1] "</TITLE>";
|
||||||
print "</HEAD>";
|
print "</HEAD>";
|
||||||
|
|
||||||
print "<BODY BGCOLOR=\"#ffffff\">";
|
print "<BODY BGCOLOR=\"#ffffff\">";
|
||||||
print "<H1>Vim documentation: " f[1] "</H1>";
|
print "<H1>Nvim documentation: " f[1] "</H1>";
|
||||||
print "<A NAME=\"top\"></A>";
|
print "<A NAME=\"top\"></A>";
|
||||||
if ( FILENAME != "help.txt" ) {
|
if ( FILENAME != "help.txt" ) {
|
||||||
print "<A HREF=\"index.html\">main help file</A>\n";
|
print "<A HREF=\"index.html\">main help file</A>\n";
|
||||||
|
@ -286,6 +286,9 @@ current mode (instead of always going to normal-mode). Visual-mode is
|
|||||||
preserved, so tricks with |gv| are not needed. Commands can be invoked
|
preserved, so tricks with |gv| are not needed. Commands can be invoked
|
||||||
directly in cmdline-mode (which otherwise would require timer hacks).
|
directly in cmdline-mode (which otherwise would require timer hacks).
|
||||||
|
|
||||||
|
Because <Cmd> avoids mode-changes (unlike ":") it does not trigger
|
||||||
|
|CmdlineEnter| and |CmdlineLeave| events. This helps performance.
|
||||||
|
|
||||||
Unlike <expr> mappings, there are no special restrictions on the <Cmd>
|
Unlike <expr> mappings, there are no special restrictions on the <Cmd>
|
||||||
command: it is executed as if an (unrestricted) |autocmd| was invoked or an
|
command: it is executed as if an (unrestricted) |autocmd| was invoked or an
|
||||||
async event event was processed.
|
async event event was processed.
|
||||||
@ -371,8 +374,9 @@ several modes. In Vim you can use the ":nmap", ":vmap", ":omap", ":cmap" and
|
|||||||
|
|
||||||
*omap-info*
|
*omap-info*
|
||||||
Operator-pending mappings can be used to define a movement command that can be
|
Operator-pending mappings can be used to define a movement command that can be
|
||||||
used with any operator. Simple example: ":omap { w" makes "y{" work like "yw"
|
used with any operator. Simple example: >
|
||||||
and "d{" like "dw".
|
:omap { w
|
||||||
|
makes "y{" work like "yw" and "d{" like "dw".
|
||||||
|
|
||||||
To ignore the starting cursor position and select different text, you can have
|
To ignore the starting cursor position and select different text, you can have
|
||||||
the omap start Visual mode to select the text to be operated upon. Example
|
the omap start Visual mode to select the text to be operated upon. Example
|
||||||
@ -383,9 +387,11 @@ Normal mode commands find the first '(' character and select the first word
|
|||||||
before it. That usually is the function name.
|
before it. That usually is the function name.
|
||||||
|
|
||||||
To enter a mapping for Normal and Visual mode, but not Operator-pending mode,
|
To enter a mapping for Normal and Visual mode, but not Operator-pending mode,
|
||||||
first define it for all three modes, then unmap it for Operator-pending mode:
|
first define it for all three modes, then unmap it for
|
||||||
|
Operator-pending mode: >
|
||||||
:map xx something-difficult
|
:map xx something-difficult
|
||||||
:ounmap xx
|
:ounmap xx
|
||||||
|
|
||||||
Likewise for a mapping for Visual and Operator-pending mode or Normal and
|
Likewise for a mapping for Visual and Operator-pending mode or Normal and
|
||||||
Operator-pending mode.
|
Operator-pending mode.
|
||||||
|
|
||||||
@ -866,7 +872,9 @@ an additional rule:
|
|||||||
full-id In front of the match is a non-keyword character, or this is where
|
full-id In front of the match is a non-keyword character, or this is where
|
||||||
the line or insertion starts. Exception: When the abbreviation is
|
the line or insertion starts. Exception: When the abbreviation is
|
||||||
only one character, it is not recognized if there is a non-keyword
|
only one character, it is not recognized if there is a non-keyword
|
||||||
character in front of it, other than a space or a tab.
|
character in front of it, other than a space or a tab. However, for
|
||||||
|
the command line "'<,'>" (or any other marks) is ignored, as if the
|
||||||
|
command line starts after it.
|
||||||
|
|
||||||
end-id In front of the match is a keyword character, or a space or a tab,
|
end-id In front of the match is a keyword character, or a space or a tab,
|
||||||
or this is where the line or insertion starts.
|
or this is where the line or insertion starts.
|
||||||
@ -1208,6 +1216,7 @@ By default, the arguments of user defined commands do not undergo completion.
|
|||||||
However, by specifying one or the other of the following attributes, argument
|
However, by specifying one or the other of the following attributes, argument
|
||||||
completion can be enabled:
|
completion can be enabled:
|
||||||
|
|
||||||
|
-complete=arglist file names in argument list
|
||||||
-complete=augroup autocmd groups
|
-complete=augroup autocmd groups
|
||||||
-complete=buffer buffer names
|
-complete=buffer buffer names
|
||||||
-complete=behave :behave suboptions
|
-complete=behave :behave suboptions
|
||||||
@ -1227,6 +1236,7 @@ completion can be enabled:
|
|||||||
-complete=highlight highlight groups
|
-complete=highlight highlight groups
|
||||||
-complete=history :history suboptions
|
-complete=history :history suboptions
|
||||||
-complete=locale locale names (as output of locale -a)
|
-complete=locale locale names (as output of locale -a)
|
||||||
|
-complete=mapclear buffer argument
|
||||||
-complete=mapping mapping name
|
-complete=mapping mapping name
|
||||||
-complete=menu menus
|
-complete=menu menus
|
||||||
-complete=messages |:messages| suboptions
|
-complete=messages |:messages| suboptions
|
||||||
@ -1363,6 +1373,8 @@ The valid escape sequences are
|
|||||||
<line1> The starting line of the command range.
|
<line1> The starting line of the command range.
|
||||||
*<line2>*
|
*<line2>*
|
||||||
<line2> The final line of the command range.
|
<line2> The final line of the command range.
|
||||||
|
*<range>*
|
||||||
|
<range> The number of items in the command range: 0, 1 or 2
|
||||||
*<count>*
|
*<count>*
|
||||||
<count> Any count supplied (as described for the '-range'
|
<count> Any count supplied (as described for the '-range'
|
||||||
and '-count' attributes).
|
and '-count' attributes).
|
||||||
@ -1483,4 +1495,4 @@ local to the script and use mappings local to the script. When the user
|
|||||||
invokes the user command, it will run in the context of the script it was
|
invokes the user command, it will run in the context of the script it was
|
||||||
defined in. This matters if |<SID>| is used in a command.
|
defined in. This matters if |<SID>| is used in a command.
|
||||||
|
|
||||||
vim:tw=78:ts=8:ft=help:norl:
|
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||||
|
@ -1059,8 +1059,7 @@ widespread as file format.
|
|||||||
A composing or combining character is used to change the meaning of the
|
A composing or combining character is used to change the meaning of the
|
||||||
character before it. The combining characters are drawn on top of the
|
character before it. The combining characters are drawn on top of the
|
||||||
preceding character.
|
preceding character.
|
||||||
Up to two combining characters can be used by default. This can be changed
|
Up to six combining characters can be displayed.
|
||||||
with the 'maxcombine' option.
|
|
||||||
When editing text a composing character is mostly considered part of the
|
When editing text a composing character is mostly considered part of the
|
||||||
preceding character. For example "x" will delete a character and its
|
preceding character. For example "x" will delete a character and its
|
||||||
following composing characters by default.
|
following composing characters by default.
|
||||||
@ -1186,4 +1185,4 @@ Contributions specifically for the multi-byte features by:
|
|||||||
Taro Muraoka <koron@tka.att.ne.jp>
|
Taro Muraoka <koron@tka.att.ne.jp>
|
||||||
Yasuhiro Matsumoto <mattn@mail.goo.ne.jp>
|
Yasuhiro Matsumoto <mattn@mail.goo.ne.jp>
|
||||||
|
|
||||||
vim:tw=78:ts=8:ft=help:norl:
|
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||||
|
@ -69,7 +69,7 @@ See `:messages` above.
|
|||||||
LIST OF MESSAGES
|
LIST OF MESSAGES
|
||||||
*E222* *E228* *E232* *E256* *E293* *E298* *E304* *E317*
|
*E222* *E228* *E232* *E256* *E293* *E298* *E304* *E317*
|
||||||
*E318* *E356* *E438* *E439* *E440* *E316* *E320* *E322*
|
*E318* *E356* *E438* *E439* *E440* *E316* *E320* *E322*
|
||||||
*E323* *E341* *E473* *E570* *E685* >
|
*E323* *E341* *E473* *E570* *E685* *E950* >
|
||||||
Add to read buffer
|
Add to read buffer
|
||||||
makemap: Illegal mode
|
makemap: Illegal mode
|
||||||
Cannot create BalloonEval with both message and callback
|
Cannot create BalloonEval with both message and callback
|
||||||
@ -90,6 +90,7 @@ LIST OF MESSAGES
|
|||||||
Internal error
|
Internal error
|
||||||
Internal error: {function}
|
Internal error: {function}
|
||||||
fatal error in cs_manage_matches
|
fatal error in cs_manage_matches
|
||||||
|
Invalid count for del_bytes(): {N}
|
||||||
|
|
||||||
This is an internal error. If you can reproduce it, please send in a bug
|
This is an internal error. If you can reproduce it, please send in a bug
|
||||||
report. |bugs|
|
report. |bugs|
|
||||||
@ -513,15 +514,6 @@ command. The script can then again read another script. This can continue
|
|||||||
for about 14 levels. When more nesting is done, Vim assumes that there is a
|
for about 14 levels. When more nesting is done, Vim assumes that there is a
|
||||||
recursive loop somewhere and stops with this error message.
|
recursive loop somewhere and stops with this error message.
|
||||||
|
|
||||||
*E319* >
|
|
||||||
The command is not available in this version
|
|
||||||
|
|
||||||
You have used a command that is not present in the version of Vim you are
|
|
||||||
using. When compiling Vim, many different features can be enabled or
|
|
||||||
disabled. This depends on how big Vim has chosen to be and the operating
|
|
||||||
system. See |+feature-list| for when which feature is available. The
|
|
||||||
|:version| command shows which feature Vim was compiled with.
|
|
||||||
|
|
||||||
*E300* >
|
*E300* >
|
||||||
Swap file already exists (symlink attack?)
|
Swap file already exists (symlink attack?)
|
||||||
|
|
||||||
@ -843,4 +835,4 @@ The |g<| command can be used to see the last page of previous command output.
|
|||||||
This is especially useful if you accidentally typed <Space> at the hit-enter
|
This is especially useful if you accidentally typed <Space> at the hit-enter
|
||||||
prompt.
|
prompt.
|
||||||
|
|
||||||
vim:tw=78:ts=8:ft=help:norl:
|
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||||
|
@ -203,4 +203,4 @@ a message adapt to language preferences of the user, >
|
|||||||
:endif
|
:endif
|
||||||
<
|
<
|
||||||
|
|
||||||
vim:tw=78:sw=4:ts=8:ft=help:norl:
|
vim:tw=78:sw=4:ts=8:noet:ft=help:norl:
|
||||||
|
@ -986,12 +986,13 @@ These commands are not marks themselves, but jump to a mark:
|
|||||||
==============================================================================
|
==============================================================================
|
||||||
8. Jumps *jump-motions*
|
8. Jumps *jump-motions*
|
||||||
|
|
||||||
A "jump" is one of the following commands: "'", "`", "G", "/", "?", "n",
|
A "jump" is a command that normally moves the cursor several lines away. If
|
||||||
"N", "%", "(", ")", "[[", "]]", "{", "}", ":s", ":tag", "L", "M", "H" and
|
you make the cursor "jump" the position of the cursor before the jump is
|
||||||
the commands that start editing a new file. If you make the cursor "jump"
|
|
||||||
with one of these commands, the position of the cursor before the jump is
|
|
||||||
remembered. You can return to that position with the "''" and "``" command,
|
remembered. You can return to that position with the "''" and "``" command,
|
||||||
unless the line containing that position was changed or deleted.
|
unless the line containing that position was changed or deleted. The
|
||||||
|
following commands are "jump" commands: "'", "`", "G", "/", "?", "n", "N",
|
||||||
|
"%", "(", ")", "[[", "]]", "{", "}", ":s", ":tag", "L", "M", "H" and the
|
||||||
|
commands that start editing a new file.
|
||||||
|
|
||||||
*CTRL-O*
|
*CTRL-O*
|
||||||
CTRL-O Go to [count] Older cursor position in jump list
|
CTRL-O Go to [count] Older cursor position in jump list
|
||||||
@ -1117,7 +1118,7 @@ remembered.
|
|||||||
*:changes*
|
*:changes*
|
||||||
:changes Print the change list. A ">" character indicates the
|
:changes Print the change list. A ">" character indicates the
|
||||||
current position. Just after a change it is below the
|
current position. Just after a change it is below the
|
||||||
newest entry, indicating that "g;" takes you to the
|
newest entry, indicating that `g;` takes you to the
|
||||||
newest entry position. The first column indicates the
|
newest entry position. The first column indicates the
|
||||||
count needed to take you to this position. Example:
|
count needed to take you to this position. Example:
|
||||||
|
|
||||||
@ -1127,8 +1128,8 @@ remembered.
|
|||||||
1 14 54 the latest changed line
|
1 14 54 the latest changed line
|
||||||
>
|
>
|
||||||
|
|
||||||
The "3g;" command takes you to line 9. Then the
|
The `3g;` command takes you to line 9. Then the
|
||||||
output of ":changes is:
|
output of `:changes` is:
|
||||||
|
|
||||||
change line col text ~
|
change line col text ~
|
||||||
> 0 9 8 bla bla bla
|
> 0 9 8 bla bla bla
|
||||||
@ -1271,7 +1272,10 @@ the current line is included. You can then use "%" to go to the matching line.
|
|||||||
H To line [count] from top (Home) of window (default:
|
H To line [count] from top (Home) of window (default:
|
||||||
first line on the window) on the first non-blank
|
first line on the window) on the first non-blank
|
||||||
character |linewise|. See also 'startofline' option.
|
character |linewise|. See also 'startofline' option.
|
||||||
Cursor is adjusted for 'scrolloff' option.
|
Cursor is adjusted for 'scrolloff' option, unless an
|
||||||
|
operator is pending, in which case the text may
|
||||||
|
scroll. E.g. "yH" yanks from the first visible line
|
||||||
|
until the cursor line (inclusive).
|
||||||
|
|
||||||
*M*
|
*M*
|
||||||
M To Middle line of window, on the first non-blank
|
M To Middle line of window, on the first non-blank
|
||||||
@ -1281,11 +1285,14 @@ M To Middle line of window, on the first non-blank
|
|||||||
L To line [count] from bottom of window (default: Last
|
L To line [count] from bottom of window (default: Last
|
||||||
line on the window) on the first non-blank character
|
line on the window) on the first non-blank character
|
||||||
|linewise|. See also 'startofline' option.
|
|linewise|. See also 'startofline' option.
|
||||||
Cursor is adjusted for 'scrolloff' option.
|
Cursor is adjusted for 'scrolloff' option, unless an
|
||||||
|
operator is pending, in which case the text may
|
||||||
|
scroll. E.g. "yL" yanks from the cursor to the last
|
||||||
|
visible line.
|
||||||
|
|
||||||
<LeftMouse> Moves to the position on the screen where the mouse
|
<LeftMouse> Moves to the position on the screen where the mouse
|
||||||
click is |exclusive|. See also |<LeftMouse>|. If the
|
click is |exclusive|. See also |<LeftMouse>|. If the
|
||||||
position is in a status line, that window is made the
|
position is in a status line, that window is made the
|
||||||
active window and the cursor is not moved.
|
active window and the cursor is not moved.
|
||||||
|
|
||||||
vim:tw=78:ts=8:ft=help:norl:
|
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||||
|
@ -61,18 +61,15 @@ To get a formatted dump of the API using python (requires the `pyyaml` and
|
|||||||
3. Connecting *rpc-connecting*
|
3. Connecting *rpc-connecting*
|
||||||
|
|
||||||
See |channel-intro|, for various ways to open a channel. Most of the channel
|
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.
|
opening functions take an `rpc` key in the options dictionary, to enable RPC.
|
||||||
|
|
||||||
Additionally, rpc channels can be opened by other processes connecting to
|
Additionally, RPC channels can be opened by other processes connecting to
|
||||||
TCP/IP sockets or named pipes listened to by nvim.
|
TCP/IP sockets or named pipes listened to by nvim.
|
||||||
|
|
||||||
An rpc socket is automatically created with each instance. The socket
|
Nvim creates a default RPC socket at |startup|, given by |v:servername|. To
|
||||||
location is stored in |v:servername|. By default this is a named pipe
|
start with a TCP/IP socket instead, use |--listen| with a TCP-style address: >
|
||||||
with an automatically generated address. See |XXX|.
|
|
||||||
|
|
||||||
To make Nvim listen on a TCP/IP socket instead, specify |--listen|: >
|
|
||||||
nvim --listen 127.0.0.1:6666
|
nvim --listen 127.0.0.1:6666
|
||||||
<Also, more sockets and named pipes can be listened on using |serverstart()|.
|
Additional sockets and named pipes can be started with |serverstart()|.
|
||||||
|
|
||||||
Note that localhost TCP sockets are generally less secure than named pipes,
|
Note that localhost TCP sockets are generally less secure than named pipes,
|
||||||
and can lead to vunerabilities like remote code execution.
|
and can lead to vunerabilities like remote code execution.
|
||||||
|
@ -8,7 +8,9 @@ Nvim *nvim* *nvim-intro*
|
|||||||
|
|
||||||
Nvim is based on Vim by Bram Moolenaar.
|
Nvim is based on Vim by Bram Moolenaar.
|
||||||
|
|
||||||
If you are new to Vim see |help.txt|, or type ":Tutor".
|
If you are new to Vim, try the 30-minute tutorial: >
|
||||||
|
:Tutor<Enter>
|
||||||
|
|
||||||
If you already use Vim see |nvim-from-vim| for a quickstart.
|
If you already use Vim see |nvim-from-vim| for a quickstart.
|
||||||
|
|
||||||
Nvim is emphatically a fork of Vim, not a clone: compatibility with Vim is
|
Nvim is emphatically a fork of Vim, not a clone: compatibility with Vim is
|
||||||
@ -20,29 +22,24 @@ differences from Vim.
|
|||||||
==============================================================================
|
==============================================================================
|
||||||
Transitioning from Vim *nvim-from-vim*
|
Transitioning from Vim *nvim-from-vim*
|
||||||
|
|
||||||
To start the transition, create init.vim in the correct directory for your
|
1. To start the transition, create your |init.vim| (user config) file: >
|
||||||
platform.
|
|
||||||
|
|
||||||
For Linux, macOS and other Unixes, create the file at ~/.config/nvim/init.vim.
|
:call mkdir(stdpath('config'), 'p')
|
||||||
|
:exe 'edit '.stdpath('config').'/init.vim'
|
||||||
|
|
||||||
For Windows, create the file at %LOCALAPPDATA%\nvim\init.vim. `%LOCALAPPDATA%`
|
2. Add these contents to the file: >
|
||||||
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
|
||||||
<
|
|
||||||
|
3. Restart Nvim, your existing Vim config will be loaded.
|
||||||
|
|
||||||
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.
|
||||||
|
|
||||||
Your Vim configuration might not be entirely compatible with Nvim. For a
|
Your Vim configuration might not be entirely Nvim-compatible.
|
||||||
full list of differences between Vim and Nvim see |vim-differences|.
|
See |vim-differences| for the full list of changes.
|
||||||
|
|
||||||
The |'ttymouse'| option, for example, was removed from Nvim (mouse support
|
The |'ttymouse'| option, for example, was removed from Nvim (mouse support
|
||||||
should work without it). If you use the same |vimrc| for Vim and Nvim,
|
should work without it). If you use the same |vimrc| for Vim and Nvim,
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -282,6 +282,14 @@ the "#" is under your left hand middle finger (search to the left and up) and
|
|||||||
the "*" is under your right hand middle finger (search to the right and down).
|
the "*" is under your right hand middle finger (search to the right and down).
|
||||||
(this depends on your keyboard layout though).
|
(this depends on your keyboard layout though).
|
||||||
|
|
||||||
|
*E956*
|
||||||
|
In very rare cases a regular expression is used recursively. This can happen
|
||||||
|
when executing a pattern takes a long time and when checkig for messages on
|
||||||
|
channels a callback is invoked that also uses a pattern or an autocommand is
|
||||||
|
triggered. In most cases this should be fine, but if a pattern is in use when
|
||||||
|
it's used again it fails. Usually this means there is something wrong with
|
||||||
|
the pattern.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
2. The definition of a pattern *search-pattern* *pattern* *[pattern]*
|
2. The definition of a pattern *search-pattern* *pattern* *[pattern]*
|
||||||
*regular-expression* *regexp* *Pattern*
|
*regular-expression* *regexp* *Pattern*
|
||||||
@ -888,7 +896,7 @@ $ At end of pattern or in front of "\|", "\)" or "\n" ('magic' on):
|
|||||||
becomes invalid. Vim doesn't automatically update the matches.
|
becomes invalid. Vim doesn't automatically update the matches.
|
||||||
Similar to moving the cursor for "\%#" |/\%#|.
|
Similar to moving the cursor for "\%#" |/\%#|.
|
||||||
|
|
||||||
*/\%l* */\%>l* */\%<l*
|
*/\%l* */\%>l* */\%<l* *E951*
|
||||||
\%23l Matches in a specific line.
|
\%23l Matches in a specific line.
|
||||||
\%<23l Matches above a specific line (lower line number).
|
\%<23l Matches above a specific line (lower line number).
|
||||||
\%>23l Matches below a specific line (higher line number).
|
\%>23l Matches below a specific line (higher line number).
|
||||||
@ -1148,7 +1156,8 @@ x A single character, with no special meaning, matches itself
|
|||||||
- Matching with a collection can be slow, because each character in
|
- Matching with a collection can be slow, because each character in
|
||||||
the text has to be compared with each character in the collection.
|
the text has to be compared with each character in the collection.
|
||||||
Use one of the other atoms above when possible. Example: "\d" is
|
Use one of the other atoms above when possible. Example: "\d" is
|
||||||
much faster than "[0-9]" and matches the same characters.
|
much faster than "[0-9]" and matches the same characters. However,
|
||||||
|
the new |NFA| regexp engine deals with this better than the old one.
|
||||||
|
|
||||||
*/\%[]* *E69* *E70* *E369*
|
*/\%[]* *E69* *E70* *E369*
|
||||||
\%[] A sequence of optionally matched atoms. This always matches.
|
\%[] A sequence of optionally matched atoms. This always matches.
|
||||||
@ -1390,4 +1399,4 @@ Finally, these constructs are unique to Perl:
|
|||||||
":2match" for another plugin.
|
":2match" for another plugin.
|
||||||
|
|
||||||
|
|
||||||
vim:tw=78:ts=8:ft=help:norl:
|
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||||
|
@ -38,4 +38,4 @@ compression. Thus editing the patchmode file will not give you the automatic
|
|||||||
decompression. You have to rename the file if you want this.
|
decompression. You have to rename the file if you want this.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
vim:tw=78:ts=8:ft=help:norl:
|
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
*pi_msgpack.txt* Nvim
|
*pi_msgpack.txt* msgpack utilities
|
||||||
|
|
||||||
Author: Nikolay Pavlov <kp-pav@yandex.ru>
|
Author: Nikolay Pavlov <kp-pav@yandex.ru>
|
||||||
Copyright: (c) 2015 by Nikolay Pavlov
|
Copyright: (c) 2015 by Nikolay Pavlov
|
||||||
@ -49,7 +49,7 @@ does not check whether argument matches its description.
|
|||||||
|
|
||||||
*{msgpack-value}* Either |msgpack-special-dict| or a regular value, but
|
*{msgpack-value}* Either |msgpack-special-dict| or a regular value, but
|
||||||
not function reference.
|
not function reference.
|
||||||
*{msgpack-integer}* Any value for which |msgpack#type| will return
|
*{msgpack-integer}* Any value for which |msgpack#type()| will return
|
||||||
"integer".
|
"integer".
|
||||||
*{msgpack-special-int}* |msgpack-special-dict| representing integer.
|
*{msgpack-special-int}* |msgpack-special-dict| representing integer.
|
||||||
|
|
||||||
|
@ -3719,8 +3719,6 @@ netrw:
|
|||||||
or
|
or
|
||||||
http://vim.sourceforge.net/scripts/script.php?script_id=120
|
http://vim.sourceforge.net/scripts/script.php?script_id=120
|
||||||
|
|
||||||
Decho.vim is provided as a "vimball"; see |vimball-intro|.
|
|
||||||
|
|
||||||
2. Edit the <netrw.vim> file by typing: >
|
2. Edit the <netrw.vim> file by typing: >
|
||||||
|
|
||||||
vim netrw.vim
|
vim netrw.vim
|
||||||
@ -4100,4 +4098,4 @@ netrw:
|
|||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
Modelines: {{{1
|
Modelines: {{{1
|
||||||
vim:tw=78:ts=8:ft=help:norl:fdm=marker
|
vim:tw=78:ts=8:noet:ft=help:norl:fdm=marker
|
||||||
|
@ -56,4 +56,4 @@ used. This plugin also helps to skip matches in comments. This is unrelated
|
|||||||
to the matchparen highlighting, they use a different mechanism.
|
to the matchparen highlighting, they use a different mechanism.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
vim:tw=78:ts=8:ft=help:norl:
|
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||||
|
@ -108,4 +108,4 @@ If you don't like the release updating feature and don't want to answer
|
|||||||
|
|
||||||
Good luck!!
|
Good luck!!
|
||||||
|
|
||||||
vim:tw=78:ts=8:ft=help:norl:
|
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||||
|
@ -148,4 +148,4 @@ Copyright 2005-2012: *tar-copyright*
|
|||||||
v1 (original) * Michael Toren (see http://michael.toren.net/code/)
|
v1 (original) * Michael Toren (see http://michael.toren.net/code/)
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
vim:tw=78:ts=8:ft=help
|
vim:tw=78:ts=8:noet:ft=help
|
||||||
|
@ -149,4 +149,4 @@ Copyright: Copyright (C) 2005-2015 Charles E Campbell *zip-copyright*
|
|||||||
v1 Sep 15, 2005 * Initial release, had browsing, reading, and writing
|
v1 Sep 15, 2005 * Initial release, had browsing, reading, and writing
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
vim:tw=78:ts=8:ft=help:fdm=marker
|
vim:tw=78:ts=8:noet:ft=help:fdm=marker
|
||||||
|
@ -36,6 +36,8 @@ Note: If you have problems printing with |:hardcopy|, an alternative is to use
|
|||||||
'printexpr' through |v:cmdarg|. Otherwise [arguments]
|
'printexpr' through |v:cmdarg|. Otherwise [arguments]
|
||||||
is ignored. 'printoptions' can be used to specify
|
is ignored. 'printoptions' can be used to specify
|
||||||
paper size, duplex, etc.
|
paper size, duplex, etc.
|
||||||
|
Note: If you want PDF, there are tools such as
|
||||||
|
"ps2pdf" that can convert the PostScript to PDF.
|
||||||
|
|
||||||
:[range]ha[rdcopy][!] >{filename}
|
:[range]ha[rdcopy][!] >{filename}
|
||||||
As above, but write the resulting PostScript in file
|
As above, but write the resulting PostScript in file
|
||||||
@ -729,4 +731,4 @@ to adjust the number of lines before a formfeed character to prevent
|
|||||||
accidental blank pages.
|
accidental blank pages.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
vim:tw=78:ts=8:ft=help:norl:
|
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||||
|
@ -6,53 +6,58 @@
|
|||||||
|
|
||||||
Providers *provider*
|
Providers *provider*
|
||||||
|
|
||||||
Nvim delegates some features to dynamic "providers".
|
Nvim delegates some features to dynamic "providers". This document describes
|
||||||
|
the providers and how to install them.
|
||||||
|
*E319*
|
||||||
|
Use of a feature requiring a missing provider is an error: >
|
||||||
|
|
||||||
|
E319: No "foo" provider found. Run ":checkhealth provider"
|
||||||
|
|
||||||
|
Run the |:checkhealth| command, and review the sections below.
|
||||||
|
|
||||||
Type |gO| to see the table of contents.
|
Type |gO| to see the table of contents.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
Python integration *provider-python*
|
Python integration *provider-python*
|
||||||
|
|
||||||
Nvim supports the Vim legacy |python-vim| and |python3| interfaces via
|
Nvim supports Python |remote-plugin|s and the Vim legacy |python2| and
|
||||||
external Python interpreters connected via |RPC|.
|
|python3| interfaces (which are implemented as remote-plugins).
|
||||||
Note: Only the Vim 7.3 API is supported; bindeval (Vim 7.4) is not.
|
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
|
Install the "pynvim" Python package:
|
||||||
required `neovim` Python package. Run |:checkhealth| to verify.
|
|
||||||
|
|
||||||
Following are steps to install the package with Python `pip`.
|
- Run |:checkhealth| to see if you already have the package (some package
|
||||||
|
managers install the "pynvim" Python package with Nvim itself).
|
||||||
|
|
||||||
|
- For Python 2 plugins, make sure Python 2.7 is available in your $PATH, then
|
||||||
|
install the package systemwide: >
|
||||||
|
sudo pip2 install --upgrade pynvim
|
||||||
|
< or for the current user: >
|
||||||
|
pip2 install --user --upgrade pynvim
|
||||||
|
< If "pip2" is missing, try "pip".
|
||||||
|
|
||||||
|
- For Python 3 plugins, make sure Python 3.4+ is available in your $PATH, then
|
||||||
|
install the package systemwide: >
|
||||||
|
sudo pip3 install --upgrade pynvim
|
||||||
|
< or for the current user: >
|
||||||
|
pip3 install --user --upgrade pynvim
|
||||||
|
< If "pip3" is missing, try "pip".
|
||||||
|
|
||||||
- For Python 2 plugins, make sure Python 2.7 is available in your `$PATH`,
|
- The `--upgrade` flag ensures you have the latest version even if a previous
|
||||||
then install the `neovim` Python package systemwide: >
|
version was already installed.
|
||||||
sudo pip2 install --upgrade neovim
|
|
||||||
<
|
|
||||||
or for the current user: >
|
|
||||||
pip2 install --user --upgrade neovim
|
|
||||||
<
|
|
||||||
- For Python 3 plugins, make sure Python 3.4+ is available in your `$PATH`,
|
|
||||||
then install the `neovim` Python package systemwide: >
|
|
||||||
sudo pip3 install --upgrade neovim
|
|
||||||
<
|
|
||||||
or for the current user: >
|
|
||||||
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
|
|
||||||
a previous version was already installed.
|
|
||||||
|
|
||||||
PYTHON PROVIDER CONFIGURATION ~
|
PYTHON PROVIDER CONFIGURATION ~
|
||||||
*g:python_host_prog*
|
*g:python_host_prog*
|
||||||
|
Path to Python 2 interpreter. Setting this makes startup faster. Also useful
|
||||||
|
for working with virtualenvs. >
|
||||||
|
let g:python_host_prog = '/path/to/python' " Python 2
|
||||||
|
<
|
||||||
*g:python3_host_prog*
|
*g:python3_host_prog*
|
||||||
Program to use for evaluating Python code. Setting this makes startup faster.
|
Path to Python 3 interpreter. Setting this makes startup faster. Also useful
|
||||||
Also useful for working with virtualenvs. >
|
for working with virtualenvs. >
|
||||||
let g:python_host_prog = '/path/to/python'
|
let g:python3_host_prog = '/path/to/python3' " Python 3
|
||||||
let g:python3_host_prog = '/path/to/python3'
|
|
||||||
<
|
<
|
||||||
*g:loaded_python_provider*
|
*g:loaded_python_provider*
|
||||||
To disable Python 2 support: >
|
To disable Python 2 support: >
|
||||||
@ -64,74 +69,74 @@ To disable Python 3 support: >
|
|||||||
|
|
||||||
PYTHON VIRTUALENVS ~
|
PYTHON VIRTUALENVS ~
|
||||||
|
|
||||||
If you plan to use per-project virtualenvs often, you should assign
|
If you plan to use per-project virtualenvs often, you should assign one
|
||||||
a virtualenv for Neovim and hard-code the interpreter path via
|
virtualenv for Neovim and hard-code the interpreter path via
|
||||||
|g:python_host_prog| (or |g:python3_host_prog|) so that the "neovim" python
|
|g:python3_host_prog| (or |g:python_host_prog|) so that the "pynvim" package
|
||||||
package is not required for each Environment. Example using pyenv: >
|
is not required for each virtualenv.
|
||||||
|
|
||||||
|
Example using pyenv: >
|
||||||
pyenv install 3.4.4
|
pyenv install 3.4.4
|
||||||
pyenv virtualenv 3.4.4 py3neovim
|
pyenv virtualenv 3.4.4 py3nvim
|
||||||
pyenv activate py3neovim
|
pyenv activate py3nvim
|
||||||
pip install neovim
|
pip install pynvim
|
||||||
pyenv which python # Note the path
|
pyenv which python # Note the path
|
||||||
|
The last command reports the interpreter path, add it to your init.vim: >
|
||||||
|
let g:python3_host_prog = '/path/to/py3nvim/bin/python'
|
||||||
|
|
||||||
The last command reports the interpreter path. Add it to your init.vim: >
|
See also: https://github.com/zchee/deoplete-jedi/wiki/Setting-up-Python-for-Neovim
|
||||||
let g:python3_host_prog = '/full/path/to/py3neovim/bin/python'
|
|
||||||
|
|
||||||
More information:
|
|
||||||
https://github.com/zchee/deoplete-jedi/wiki/Setting-up-Python-for-Neovim
|
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
Ruby integration *provider-ruby*
|
Ruby integration *provider-ruby*
|
||||||
|
|
||||||
Nvim supports the Vim legacy |ruby-vim| interface via external Ruby
|
Nvim supports Ruby |remote-plugin|s and the Vim legacy |ruby-vim| interface
|
||||||
interpreters connected via |RPC|.
|
(which is itself implemented as a Nvim remote-plugin).
|
||||||
|
|
||||||
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 Ruby plugins with Nvim, install the latest "neovim" RubyGem: >
|
||||||
gem install neovim
|
gem install neovim
|
||||||
|
|
||||||
|
Run |:checkhealth| to see if your system is up-to-date.
|
||||||
|
|
||||||
RUBY PROVIDER CONFIGURATION ~
|
RUBY PROVIDER CONFIGURATION ~
|
||||||
*g:loaded_ruby_provider*
|
*g:loaded_ruby_provider*
|
||||||
To disable Ruby support: >
|
To disable Ruby support: >
|
||||||
let g:loaded_ruby_provider = 1
|
let g:loaded_ruby_provider = 1
|
||||||
<
|
<
|
||||||
*g:ruby_host_prog*
|
*g:ruby_host_prog*
|
||||||
Command to start the Ruby host. By default this is `neovim-ruby-host`. For users
|
Command to start the Ruby host. By default this is "neovim-ruby-host". With
|
||||||
who use per-project Ruby versions with tools like RVM or rbenv, setting this can
|
project-local Ruby versions (via tools like RVM or rbenv) setting this can
|
||||||
prevent the need to install the `neovim` gem in every project.
|
avoid the need to install the "neovim" gem in every project.
|
||||||
|
|
||||||
To use an absolute path (e.g. to an rbenv installation): >
|
To use an absolute path (e.g. to an rbenv installation): >
|
||||||
let g:ruby_host_prog = '~/.rbenv/versions/2.4.1/bin/neovim-ruby-host'
|
let g:ruby_host_prog = '~/.rbenv/versions/2.4.1/bin/neovim-ruby-host'
|
||||||
<
|
|
||||||
|
|
||||||
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*
|
Node.js integration *provider-nodejs*
|
||||||
|
|
||||||
Nvim supports Node.js |remote-plugin|s.
|
Nvim supports Node.js |remote-plugin|s.
|
||||||
https://github.com/neovim/node-client/
|
https://github.com/neovim/node-client/
|
||||||
https://nodejs.org/
|
|
||||||
|
|
||||||
NODEJS QUICKSTART~
|
NODEJS QUICKSTART~
|
||||||
|
|
||||||
To use javascript remote-plugins with Nvim, install the `neovim` npm package: >
|
To use javascript remote-plugins with Nvim, install the "neovim" npm package: >
|
||||||
npm install -g neovim
|
npm install -g neovim
|
||||||
<
|
|
||||||
|
Run |:checkhealth| to see if your system is up-to-date.
|
||||||
|
|
||||||
NODEJS PROVIDER CONFIGURATION~
|
NODEJS PROVIDER CONFIGURATION~
|
||||||
*g:loaded_node_provider*
|
*g:loaded_node_provider*
|
||||||
To disable Node support: >
|
To disable Node.js support: >
|
||||||
:let g:loaded_node_provider = 1
|
:let g:loaded_node_provider = 1
|
||||||
<
|
<
|
||||||
*g:node_host_prog*
|
*g:node_host_prog*
|
||||||
Command to start the Node host. Setting this makes startup faster.
|
Command to start the Node.js host. Setting this makes startup faster.
|
||||||
|
|
||||||
By default, Nvim searches for `neovim-node-host` using "npm root -g", which
|
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: >
|
can be slow. To avoid this, set g:node_host_prog to the host path: >
|
||||||
let g:node_host_prog = '/usr/local/bin/neovim-node-host'
|
let g:node_host_prog = '/usr/local/bin/neovim-node-host'
|
||||||
<
|
<
|
||||||
==============================================================================
|
==============================================================================
|
||||||
@ -143,9 +148,8 @@ system clipboard or any other clipboard "backend".
|
|||||||
|
|
||||||
To ALWAYS use the clipboard for ALL operations (instead of interacting with
|
To ALWAYS use the clipboard for ALL operations (instead of interacting with
|
||||||
the '+' and/or '*' registers explicitly): >
|
the '+' and/or '*' registers explicitly): >
|
||||||
|
|
||||||
set clipboard+=unnamedplus
|
set clipboard+=unnamedplus
|
||||||
<
|
|
||||||
See 'clipboard' for details and options.
|
See 'clipboard' for details and options.
|
||||||
|
|
||||||
*clipboard-tool*
|
*clipboard-tool*
|
||||||
@ -153,16 +157,19 @@ The presence of a working clipboard tool implicitly enables the '+' and '*'
|
|||||||
registers. Nvim looks for these clipboard tools, in order of priority:
|
registers. Nvim looks for these clipboard tools, in order of priority:
|
||||||
|
|
||||||
- |g:clipboard|
|
- |g:clipboard|
|
||||||
- pbcopy/pbpaste (macOS)
|
- pbcopy, pbpaste (macOS)
|
||||||
- xsel (if $DISPLAY is set)
|
- wl-copy, wl-paste (if $WAYLAND_DISPLAY is set)
|
||||||
- xclip (if $DISPLAY is set)
|
- xclip (if $DISPLAY is set)
|
||||||
|
- xsel (if $DISPLAY is set)
|
||||||
- lemonade (for SSH) https://github.com/pocke/lemonade
|
- lemonade (for SSH) https://github.com/pocke/lemonade
|
||||||
- doitclient (for SSH) http://www.chiark.greenend.org.uk/~sgtatham/doit/
|
- doitclient (for SSH) http://www.chiark.greenend.org.uk/~sgtatham/doit/
|
||||||
- win32yank (Windows)
|
- win32yank (Windows)
|
||||||
- tmux (if $TMUX is set)
|
- tmux (if $TMUX is set)
|
||||||
|
|
||||||
*g:clipboard*
|
*g:clipboard*
|
||||||
To configure a custom clipboard tool, set `g:clipboard` to a dictionary: >
|
To configure a custom clipboard tool, set g:clipboard to a dictionary.
|
||||||
|
For example this configuration integrates the tmux clipboard: >
|
||||||
|
|
||||||
let g:clipboard = {
|
let g:clipboard = {
|
||||||
\ 'name': 'myClipboard',
|
\ 'name': 'myClipboard',
|
||||||
\ 'copy': {
|
\ 'copy': {
|
||||||
@ -176,9 +183,28 @@ To configure a custom clipboard tool, set `g:clipboard` to a dictionary: >
|
|||||||
\ 'cache_enabled': 1,
|
\ 'cache_enabled': 1,
|
||||||
\ }
|
\ }
|
||||||
|
|
||||||
If `cache_enabled` is |TRUE| then when a selection is copied, Nvim will cache
|
If "cache_enabled" is |TRUE| then when a selection is copied Nvim will cache
|
||||||
the selection until the copy command process dies. When pasting, if the copy
|
the selection until the copy command process dies. When pasting, if the copy
|
||||||
process has not died, the cached selection is applied.
|
process has not died the cached selection is applied.
|
||||||
|
|
||||||
|
g:clipboard can also use functions (see |lambda|) instead of strings.
|
||||||
|
For example this configuration uses the g:foo variable as a fake clipboard: >
|
||||||
|
|
||||||
|
let g:clipboard = {
|
||||||
|
\ 'name': 'myClipboard',
|
||||||
|
\ 'copy': {
|
||||||
|
\ '+': {lines, regtype -> extend(g:, {'foo': [lines, regtype]}) },
|
||||||
|
\ '*': {lines, regtype -> extend(g:, {'foo': [lines, regtype]}) },
|
||||||
|
\ },
|
||||||
|
\ 'paste': {
|
||||||
|
\ '+': {-> get(g:, 'foo', [])},
|
||||||
|
\ '*': {-> get(g:, 'foo', [])},
|
||||||
|
\ },
|
||||||
|
\ }
|
||||||
|
|
||||||
|
The "copy" function stores a list of lines and the register type. The "paste"
|
||||||
|
function returns the clipboard as a `[lines, regtype]` list, where `lines` is
|
||||||
|
a list of lines and `regtype` is a register type conforming to |setreg()|.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
X11 selection mechanism *clipboard-x11* *x11-selection*
|
X11 selection mechanism *clipboard-x11* *x11-selection*
|
||||||
@ -189,15 +215,15 @@ The contents of selections are held by the originating application (e.g., upon
|
|||||||
a copy), and only passed to another application when that other application
|
a copy), and only passed to another application when that other application
|
||||||
requests them (e.g., upon a paste).
|
requests them (e.g., upon a paste).
|
||||||
|
|
||||||
*quoteplus* *quote+*
|
*primary-selection* *quotestar* *quoteplus* *quote+*
|
||||||
|
|
||||||
There are three documented X11 selections: `PRIMARY`, `SECONDARY`, and `CLIPBOARD`.
|
There are three documented X11 selections: PRIMARY, SECONDARY, and CLIPBOARD.
|
||||||
`CLIPBOARD` is typically used in X11 applications for copy/paste operations
|
CLIPBOARD is typically used in X11 applications for copy/paste operations
|
||||||
(`Ctrl-c`/`v`), while `PRIMARY` is used for the last selected text, which is
|
(CTRL-c/CTRL-v), while PRIMARY is used for the last selected text, which is
|
||||||
generally inserted with the middle mouse button.
|
generally inserted with the middle mouse button.
|
||||||
|
|
||||||
Nvim's X11 clipboard providers only utilize the `PRIMARY` and `CLIPBOARD`
|
Nvim's X11 clipboard providers only use the PRIMARY and CLIPBOARD selections,
|
||||||
selections, used for the '*' and '+' registers, respectively.
|
for the "*" and "+" registers, respectively.
|
||||||
|
|
||||||
==============================================================================
|
==============================================================================
|
||||||
vim:tw=78:ts=8:noet:ft=help:norl:
|
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||||
|
@ -33,7 +33,7 @@ compiler (see |errorformat| below).
|
|||||||
|
|
||||||
*quickfix-ID*
|
*quickfix-ID*
|
||||||
Each quickfix list has a unique identifier called the quickfix ID and this
|
Each quickfix list has a unique identifier called the quickfix ID and this
|
||||||
number will not change within a Vim session. The getqflist() function can be
|
number will not change within a Vim session. The |getqflist()| function can be
|
||||||
used to get the identifier assigned to a list. There is also a quickfix list
|
used to get the identifier assigned to a list. There is also a quickfix list
|
||||||
number which may change whenever more than ten lists are added to a quickfix
|
number which may change whenever more than ten lists are added to a quickfix
|
||||||
stack.
|
stack.
|
||||||
@ -51,6 +51,14 @@ When a window with a location list is split, the new window gets a copy of the
|
|||||||
location list. When there are no longer any references to a location list,
|
location list. When there are no longer any references to a location list,
|
||||||
the location list is destroyed.
|
the location list is destroyed.
|
||||||
|
|
||||||
|
*quickfix-changedtick*
|
||||||
|
Every quickfix and location list has a read-only changedtick variable that
|
||||||
|
tracks the total number of changes made to the list. Every time the quickfix
|
||||||
|
list is modified, this count is incremented. This can be used to perform an
|
||||||
|
action only when the list has changed. The |getqflist()| and |getloclist()|
|
||||||
|
functions can be used to query the current value of changedtick. You cannot
|
||||||
|
change the changedtick variable.
|
||||||
|
|
||||||
The following quickfix commands can be used. The location list commands are
|
The following quickfix commands can be used. The location list commands are
|
||||||
similar to the quickfix commands, replacing the 'c' prefix in the quickfix
|
similar to the quickfix commands, replacing the 'c' prefix in the quickfix
|
||||||
command with 'l'.
|
command with 'l'.
|
||||||
@ -281,6 +289,10 @@ processing a quickfix or location list command, it will be aborted.
|
|||||||
from the last error backwards, -1 being the last error.
|
from the last error backwards, -1 being the last error.
|
||||||
The 'switchbuf' settings are respected when jumping
|
The 'switchbuf' settings are respected when jumping
|
||||||
to a buffer.
|
to a buffer.
|
||||||
|
The |:filter| command can be used to display only the
|
||||||
|
quickfix entries matching a supplied pattern. The
|
||||||
|
pattern is matched against the filename, module name,
|
||||||
|
pattern and text of the entry.
|
||||||
|
|
||||||
:cl[ist] +{count} List the current and next {count} valid errors. This
|
:cl[ist] +{count} List the current and next {count} valid errors. This
|
||||||
is similar to ":clist from from+count", where "from"
|
is similar to ":clist from from+count", where "from"
|
||||||
@ -299,8 +311,7 @@ processing a quickfix or location list command, it will be aborted.
|
|||||||
8386: ^ ~
|
8386: ^ ~
|
||||||
8387: symbol: method Fmainx() ~
|
8387: symbol: method Fmainx() ~
|
||||||
|
|
||||||
*:lli* *:llist*
|
:lli[st] [from] [, [to]] *:lli* *:llist*
|
||||||
:lli[st] [from] [, [to]]
|
|
||||||
Same as ":clist", except the location list for the
|
Same as ":clist", except the location list for the
|
||||||
current window is used instead of the quickfix list.
|
current window is used instead of the quickfix list.
|
||||||
|
|
||||||
@ -333,6 +344,51 @@ use this code: >
|
|||||||
au QuickfixCmdPost make call QfMakeConv()
|
au QuickfixCmdPost make call QfMakeConv()
|
||||||
Another option is using 'makeencoding'.
|
Another option is using 'makeencoding'.
|
||||||
|
|
||||||
|
*quickfix-title*
|
||||||
|
Every quickfix and location list has a title. By default the title is set to
|
||||||
|
the command that created the list. The |getqflist()| and |getloclist()|
|
||||||
|
functions can be used to get the title of a quickfix and a location list
|
||||||
|
respectively. The |setqflist()| and |setloclist()| functions can be used to
|
||||||
|
modify the title of a quickfix and location list respectively. Examples: >
|
||||||
|
call setqflist([], 'a', {'title' : 'Cmd output'})
|
||||||
|
echo getqflist({'title' : 1})
|
||||||
|
call setloclist(3, [], 'a', {'title' : 'Cmd output'})
|
||||||
|
echo getloclist(3, {'title' : 1})
|
||||||
|
<
|
||||||
|
*quickfix-size*
|
||||||
|
You can get the number of entries (size) in a quickfix and a location list
|
||||||
|
using the |getqflist()| and |getloclist()| functions respectively. Examples: >
|
||||||
|
echo getqflist({'size' : 1})
|
||||||
|
echo getloclist(5, {'size' : 1})
|
||||||
|
<
|
||||||
|
*quickfix-context*
|
||||||
|
Any Vim type can be associated as a context with a quickfix or location list.
|
||||||
|
The |setqflist()| and the |setloclist()| functions can be used to associate a
|
||||||
|
context with a quickfix and a location list respectively. The |getqflist()|
|
||||||
|
and the |getloclist()| functions can be used to retrieve the context of a
|
||||||
|
quickfix and a location list respectively. This is useful for a Vim plugin
|
||||||
|
dealing with multiple quickfix/location lists.
|
||||||
|
Examples: >
|
||||||
|
|
||||||
|
let somectx = {'name' : 'Vim', 'type' : 'Editor'}
|
||||||
|
call setqflist([], 'a', {'context' : somectx})
|
||||||
|
echo getqflist({'context' : 1})
|
||||||
|
|
||||||
|
let newctx = ['red', 'green', 'blue']
|
||||||
|
call setloclist(2, [], 'a', {'id' : qfid, 'context' : newctx})
|
||||||
|
echo getloclist(2, {'id' : qfid, 'context' : 1})
|
||||||
|
<
|
||||||
|
*quickfix-parse*
|
||||||
|
You can parse a list of lines using 'errorformat' without creating or
|
||||||
|
modifying a quickfix list using the |getqflist()| function. Examples: >
|
||||||
|
echo getqflist({'lines' : ["F1:10:Line10", "F2:20:Line20"]})
|
||||||
|
echo getqflist({'lines' : systemlist('grep -Hn quickfix *')})
|
||||||
|
This returns a dictionary where the 'items' key contains the list of quickfix
|
||||||
|
entries parsed from lines. The following shows how to use a custom
|
||||||
|
'errorformat' to parse the lines without modifying the 'errorformat' option: >
|
||||||
|
echo getqflist({'efm' : '%f#%l#%m', 'lines' : ['F1#10#Line']})
|
||||||
|
<
|
||||||
|
|
||||||
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*
|
||||||
:cdo[!] {cmd} Execute {cmd} in each valid entry in the quickfix list.
|
:cdo[!] {cmd} Execute {cmd} in each valid entry in the quickfix list.
|
||||||
@ -358,8 +414,7 @@ EXECUTE A COMMAND IN ALL THE BUFFERS IN QUICKFIX OR LOCATION LIST:
|
|||||||
autocommand event is disabled by adding it to
|
autocommand event is disabled by adding it to
|
||||||
'eventignore'. This considerably speeds up editing
|
'eventignore'. This considerably speeds up editing
|
||||||
each buffer.
|
each buffer.
|
||||||
{not in Vi} {not available when compiled without the
|
{not in Vi}
|
||||||
|+listcmds| feature}
|
|
||||||
Also see |:bufdo|, |:tabdo|, |:argdo|, |:windo|,
|
Also see |:bufdo|, |:tabdo|, |:argdo|, |:windo|,
|
||||||
|:ldo|, |:cfdo| and |:lfdo|.
|
|:ldo|, |:cfdo| and |:lfdo|.
|
||||||
|
|
||||||
@ -372,8 +427,7 @@ EXECUTE A COMMAND IN ALL THE BUFFERS IN QUICKFIX OR LOCATION LIST:
|
|||||||
:{cmd}
|
:{cmd}
|
||||||
etc.
|
etc.
|
||||||
< Otherwise it works the same as `:cdo`.
|
< Otherwise it works the same as `:cdo`.
|
||||||
{not in Vi} {not available when compiled without the
|
{not in Vi}
|
||||||
|+listcmds| feature}
|
|
||||||
|
|
||||||
*:ldo*
|
*:ldo*
|
||||||
:ld[o][!] {cmd} Execute {cmd} in each valid entry in the location list
|
:ld[o][!] {cmd} Execute {cmd} in each valid entry in the location list
|
||||||
@ -386,8 +440,7 @@ EXECUTE A COMMAND IN ALL THE BUFFERS IN QUICKFIX OR LOCATION LIST:
|
|||||||
etc.
|
etc.
|
||||||
< Only valid entries in the location list are used.
|
< Only valid entries in the location list are used.
|
||||||
Otherwise it works the same as `:cdo`.
|
Otherwise it works the same as `:cdo`.
|
||||||
{not in Vi} {not available when compiled without the
|
{not in Vi}
|
||||||
|+listcmds| feature}
|
|
||||||
|
|
||||||
*:lfdo*
|
*:lfdo*
|
||||||
:lfdo[!] {cmd} Execute {cmd} in each file in the location list for
|
:lfdo[!] {cmd} Execute {cmd} in each file in the location list for
|
||||||
@ -399,8 +452,7 @@ EXECUTE A COMMAND IN ALL THE BUFFERS IN QUICKFIX OR LOCATION LIST:
|
|||||||
:{cmd}
|
:{cmd}
|
||||||
etc.
|
etc.
|
||||||
< Otherwise it works the same as `:ldo`.
|
< Otherwise it works the same as `:ldo`.
|
||||||
{not in Vi} {not available when compiled without the
|
{not in Vi}
|
||||||
|+listcmds| feature}
|
|
||||||
|
|
||||||
=============================================================================
|
=============================================================================
|
||||||
2. The error window *quickfix-window*
|
2. The error window *quickfix-window*
|
||||||
@ -423,7 +475,9 @@ EXECUTE A COMMAND IN ALL THE BUFFERS IN QUICKFIX OR LOCATION LIST:
|
|||||||
which will indicate the command that produced the
|
which will indicate the command that produced the
|
||||||
quickfix list. This can be used to compose a custom
|
quickfix list. This can be used to compose a custom
|
||||||
status line if the value of 'statusline' is adjusted
|
status line if the value of 'statusline' is adjusted
|
||||||
properly.
|
properly. Whenever this buffer is modified by a
|
||||||
|
quickfix command or function, the |b:changedtick|
|
||||||
|
variable is incremented.
|
||||||
|
|
||||||
*:lop* *:lopen*
|
*:lop* *:lopen*
|
||||||
:lop[en] [height] Open a window to show the location list for the
|
:lop[en] [height] Open a window to show the location list for the
|
||||||
@ -531,6 +585,117 @@ In all of the above cases, if the location list for the selected window is not
|
|||||||
yet set, then it is set to the location list displayed in the location list
|
yet set, then it is set to the location list displayed in the location list
|
||||||
window.
|
window.
|
||||||
|
|
||||||
|
*quickfix-window-ID*
|
||||||
|
You can use the |getqflist()| and |getloclist()| functions to obtain the
|
||||||
|
window ID of the quickfix window and location list window respectively (if
|
||||||
|
present). Examples: >
|
||||||
|
echo getqflist({'winid' : 1}).winid
|
||||||
|
echo getloclist(2, {'winid' : 1}).winid
|
||||||
|
<
|
||||||
|
*getqflist-examples*
|
||||||
|
The |getqflist()| and |getloclist()| functions can be used to get the various
|
||||||
|
attributes of a quickfix and location list respectively. Some examples for
|
||||||
|
using these functions are below:
|
||||||
|
>
|
||||||
|
" get the title of the current quickfix list
|
||||||
|
:echo getqflist({'title' : 0}).title
|
||||||
|
|
||||||
|
" get the identifier of the current quickfix list
|
||||||
|
:let qfid = getqflist({'id' : 0}).id
|
||||||
|
|
||||||
|
" get the identifier of the fourth quickfix list in the stack
|
||||||
|
:let qfid = getqflist({'nr' : 4, 'id' : 0}).id
|
||||||
|
|
||||||
|
" check whether a quickfix list with a specific identifier exists
|
||||||
|
:if getqflist({'id' : qfid}).id == qfid
|
||||||
|
|
||||||
|
" get the index of the current quickfix list in the stack
|
||||||
|
:let qfnum = getqflist({'nr' : 0}).nr
|
||||||
|
|
||||||
|
" get the items of a quickfix list specified by an identifier
|
||||||
|
:echo getqflist({'id' : qfid, 'items' : 0}).items
|
||||||
|
|
||||||
|
" get the number of entries in a quickfix list specified by an id
|
||||||
|
:echo getqflist({'id' : qfid, 'size' : 0}).size
|
||||||
|
|
||||||
|
" get the context of the third quickfix list in the stack
|
||||||
|
:echo getqflist({'nr' : 3, 'context' : 0}).context
|
||||||
|
|
||||||
|
" get the number of quickfix lists in the stack
|
||||||
|
:echo getqflist({'nr' : '$'}).nr
|
||||||
|
|
||||||
|
" get the number of times the current quickfix list is changed
|
||||||
|
:echo getqflist({'changedtick' : 0}).changedtick
|
||||||
|
|
||||||
|
" get the current entry in a quickfix list specified by an identifier
|
||||||
|
:echo getqflist({'id' : qfid, 'idx' : 0}).idx
|
||||||
|
|
||||||
|
" get all the quickfix list attributes using an identifier
|
||||||
|
:echo getqflist({'id' : qfid, 'all' : 0})
|
||||||
|
|
||||||
|
" parse text from a List of lines and return a quickfix list
|
||||||
|
:let myList = ["a.java:10:L10", "b.java:20:L20"]
|
||||||
|
:echo getqflist({'lines' : myList}).items
|
||||||
|
|
||||||
|
" parse text using a custom 'efm' and return a quickfix list
|
||||||
|
:echo getqflist({'lines' : ['a.c#10#Line 10'], 'efm':'%f#%l#%m'}).items
|
||||||
|
|
||||||
|
" get the quickfix list window id
|
||||||
|
:echo getqflist({'winid' : 0}).winid
|
||||||
|
|
||||||
|
" get the context of the current location list
|
||||||
|
:echo getloclist(0, {'context' : 0}).context
|
||||||
|
|
||||||
|
" get the location list window id of the third window
|
||||||
|
:echo getloclist(3, {'winid' : 0}).winid
|
||||||
|
<
|
||||||
|
*setqflist-examples*
|
||||||
|
The |setqflist()| and |setloclist()| functions can be used to set the various
|
||||||
|
attributes of a quickfix and location list respectively. Some examples for
|
||||||
|
using these functions are below:
|
||||||
|
>
|
||||||
|
" create an empty quickfix list with a title and a context
|
||||||
|
:let t = 'Search results'
|
||||||
|
:let c = {'cmd' : 'grep'}
|
||||||
|
:call setqflist([], ' ', {'title' : t, 'context' : c})
|
||||||
|
|
||||||
|
" set the title of the current quickfix list
|
||||||
|
:call setqflist([], 'a', {'title' : 'Mytitle'})
|
||||||
|
|
||||||
|
" set the context of a quickfix list specified by an identifier
|
||||||
|
:call setqflist([], 'a', {'id' : qfid, 'context' : {'val' : 100}})
|
||||||
|
|
||||||
|
" create a new quickfix list from a command output
|
||||||
|
:call setqflist([], ' ', {'lines' : systemlist('grep -Hn main *.c')})
|
||||||
|
|
||||||
|
" parse text using a custom efm and add to a particular quickfix list
|
||||||
|
:call setqflist([], 'a', {'id' : qfid,
|
||||||
|
\ 'lines' : ["a.c#10#L10", "b.c#20#L20"], 'efm':'%f#%l#%m'})
|
||||||
|
|
||||||
|
" add items to the quickfix list specified by an identifier
|
||||||
|
:let newItems = [{'filename' : 'a.txt', 'lnum' : 10, 'text' : "Apple"},
|
||||||
|
\ {'filename' : 'b.txt', 'lnum' : 20, 'text' : "Orange"}]
|
||||||
|
:call setqflist([], 'a', {'id' : qfid, 'items' : newItems})
|
||||||
|
|
||||||
|
" empty a quickfix list specified by an identifier
|
||||||
|
:call setqflist([], 'r', {'id' : qfid, 'items' : []})
|
||||||
|
|
||||||
|
" free all the quickfix lists in the stack
|
||||||
|
:call setqflist([], 'f')
|
||||||
|
|
||||||
|
" set the title of the fourth quickfix list
|
||||||
|
:call setqflist([], 'a', {'nr' : 4, 'title' : 'SomeTitle'})
|
||||||
|
|
||||||
|
" create a new quickfix list at the end of the stack
|
||||||
|
:call setqflist([], ' ', {'nr' : '$',
|
||||||
|
\ 'lines' : systemlist('grep -Hn class *.java')})
|
||||||
|
|
||||||
|
" create a new location list from a command output
|
||||||
|
:call setloclist(0, [], ' ', {'lines' : systemlist('grep -Hn main *.c')})
|
||||||
|
|
||||||
|
" replace the location list entries for the third window
|
||||||
|
:call setloclist(3, [], 'r', {'items' : newItems})
|
||||||
|
<
|
||||||
=============================================================================
|
=============================================================================
|
||||||
3. Using more than one list of errors *quickfix-error-lists*
|
3. Using more than one list of errors *quickfix-error-lists*
|
||||||
|
|
||||||
@ -575,6 +740,14 @@ list, one newer list is overwritten. This is especially useful if you are
|
|||||||
browsing with ":grep" |grep|. If you want to keep the more recent error
|
browsing with ":grep" |grep|. If you want to keep the more recent error
|
||||||
lists, use ":cnewer 99" first.
|
lists, use ":cnewer 99" first.
|
||||||
|
|
||||||
|
To get the number of lists in the quickfix and location list stack, you can
|
||||||
|
use the |getqflist()| and |getloclist()| functions respectively with the list
|
||||||
|
number set to the special value '$'. Examples: >
|
||||||
|
echo getqflist({'nr' : '$'}).nr
|
||||||
|
echo getloclist(3, {'nr' : '$'}).nr
|
||||||
|
To get the number of the current list in the stack: >
|
||||||
|
echo getqflist({'nr' : 0}).nr
|
||||||
|
<
|
||||||
=============================================================================
|
=============================================================================
|
||||||
4. Using :make *:make_makeprg*
|
4. Using :make *:make_makeprg*
|
||||||
|
|
||||||
@ -1067,7 +1240,7 @@ or >
|
|||||||
to indicate the column of the error. This is to be used in a multi-line error
|
to indicate the column of the error. This is to be used in a multi-line error
|
||||||
message. See |errorformat-javac| for a useful example.
|
message. See |errorformat-javac| for a useful example.
|
||||||
|
|
||||||
The "%s" conversion specifies the text to search for to locate the error line.
|
The "%s" conversion specifies the text to search for, to locate the error line.
|
||||||
The text is used as a literal string. The anchors "^" and "$" are added to
|
The text is used as a literal string. The anchors "^" and "$" are added to
|
||||||
the text to locate the error line exactly matching the search text and the
|
the text to locate the error line exactly matching the search text and the
|
||||||
text is prefixed with the "\V" atom to make it "very nomagic". The "%s"
|
text is prefixed with the "\V" atom to make it "very nomagic". The "%s"
|
||||||
@ -1336,6 +1509,22 @@ The backslashes before the pipe character are required to avoid it to be
|
|||||||
recognized as a command separator. The backslash before each space is
|
recognized as a command separator. The backslash before each space is
|
||||||
required for the set command.
|
required for the set command.
|
||||||
|
|
||||||
|
*cfilter-plugin* *Cfilter* *Lfilter*
|
||||||
|
If you have too many matching messages, you can use the cfilter plugin to
|
||||||
|
reduce the number of entries. Load the plugin with: >
|
||||||
|
packadd cfilter
|
||||||
|
|
||||||
|
Then you can use these command: >
|
||||||
|
:Cfilter[!] /{pat}/
|
||||||
|
:Lfilter[!] /{pat}/
|
||||||
|
|
||||||
|
:Cfilter creates a new quickfix list from entries matching {pat} in the
|
||||||
|
current quickfix list. Both the file name and the text of the entries are
|
||||||
|
matched against {pat}. If ! is supplied, then entries not matching {pat} are
|
||||||
|
used.
|
||||||
|
|
||||||
|
:Lfilter does the same as :Cfilter but operates on the current location list.
|
||||||
|
|
||||||
=============================================================================
|
=============================================================================
|
||||||
8. The directory stack *quickfix-directory-stack*
|
8. The directory stack *quickfix-directory-stack*
|
||||||
|
|
||||||
@ -1573,4 +1762,4 @@ by Vim.
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
vim:noet:tw=78:ts=8:ft=help:norl:
|
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||||
|
@ -614,7 +614,8 @@ Short explanation of each option: *option-list*
|
|||||||
'backupext' 'bex' extension used for the backup file
|
'backupext' 'bex' extension used for the backup file
|
||||||
'backupskip' 'bsk' no backup for files that match these patterns
|
'backupskip' 'bsk' no backup for files that match these patterns
|
||||||
'balloondelay' 'bdlay' delay in mS before a balloon may pop up
|
'balloondelay' 'bdlay' delay in mS before a balloon may pop up
|
||||||
'ballooneval' 'beval' switch on balloon evaluation
|
'ballooneval' 'beval' switch on balloon evaluation in the GUI
|
||||||
|
'balloonevalterm' 'bevalterm' switch on balloon evaluation in the terminal
|
||||||
'balloonexpr' 'bexpr' expression to show in balloon
|
'balloonexpr' 'bexpr' expression to show in balloon
|
||||||
'belloff' 'bo' do not ring the bell for these reasons
|
'belloff' 'bo' do not ring the bell for these reasons
|
||||||
'binary' 'bin' read/write/edit file in binary mode
|
'binary' 'bin' read/write/edit file in binary mode
|
||||||
@ -809,6 +810,7 @@ Short explanation of each option: *option-list*
|
|||||||
'printoptions' 'popt' controls the format of :hardcopy output
|
'printoptions' 'popt' controls the format of :hardcopy output
|
||||||
'prompt' 'prompt' enable prompt in Ex mode
|
'prompt' 'prompt' enable prompt in Ex mode
|
||||||
'pumheight' 'ph' maximum height of the popup menu
|
'pumheight' 'ph' maximum height of the popup menu
|
||||||
|
'pumwidth' 'pw' minimum width of the popup menu
|
||||||
'pythondll' name of the Python 2 dynamic library
|
'pythondll' name of the Python 2 dynamic library
|
||||||
'pythonthreedll' name of the Python 3 dynamic library
|
'pythonthreedll' name of the Python 3 dynamic library
|
||||||
'quoteescape' 'qe' escape characters used in a string
|
'quoteescape' 'qe' escape characters used in a string
|
||||||
@ -906,6 +908,8 @@ Short explanation of each option: *option-list*
|
|||||||
'undoreload' 'ur' max nr of lines to save for undo on a buffer reload
|
'undoreload' 'ur' max nr of lines to save for undo on a buffer reload
|
||||||
'updatecount' 'uc' after this many characters flush swap file
|
'updatecount' 'uc' after this many characters flush swap file
|
||||||
'updatetime' 'ut' after this many milliseconds flush swap file
|
'updatetime' 'ut' after this many milliseconds flush swap file
|
||||||
|
'varsofttabstop' 'vsts' a list of number of spaces when typing <Tab>
|
||||||
|
'vartabstop' 'vts' a list of number of spaces for <Tab>s
|
||||||
'verbose' 'vbs' give informative messages
|
'verbose' 'vbs' give informative messages
|
||||||
'verbosefile' 'vfile' file to write messages in
|
'verbosefile' 'vfile' file to write messages in
|
||||||
'viewdir' 'vdir' directory where to store files with :mkview
|
'viewdir' 'vdir' directory where to store files with :mkview
|
||||||
@ -1372,4 +1376,4 @@ Context-sensitive completion on the command-line:
|
|||||||
|zN| zN fold normal set 'foldenable'
|
|zN| zN fold normal set 'foldenable'
|
||||||
|zi| zi invert 'foldenable'
|
|zi| zi invert 'foldenable'
|
||||||
|
|
||||||
vim:tw=78:ts=8:ft=help:norl:
|
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||||
|
@ -27,6 +27,9 @@ You can see the name of the current swap file being used with the command:
|
|||||||
|
|
||||||
:sw[apname] *:sw* *:swapname*
|
:sw[apname] *:sw* *:swapname*
|
||||||
|
|
||||||
|
Or you can use the |swapname()| function, which also allows for seeing the
|
||||||
|
swap file name of other buffers.
|
||||||
|
|
||||||
The name of the swap file is normally the same as the file you are editing,
|
The name of the swap file is normally the same as the file you are editing,
|
||||||
with the extension ".swp".
|
with the extension ".swp".
|
||||||
- On Unix, a '.' is prepended to swap file names in the same directory as the
|
- On Unix, a '.' is prepended to swap file names in the same directory as the
|
||||||
@ -170,4 +173,4 @@ Once you are sure the recovery is ok delete the swap file. Otherwise, you
|
|||||||
will continue to get warning messages that the ".swp" file already exists.
|
will continue to get warning messages that the ".swp" file already exists.
|
||||||
|
|
||||||
|
|
||||||
vim:tw=78:ts=8:ft=help:norl:
|
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||||
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user