mirror of
https://github.com/neovim/neovim.git
synced 2025-09-06 19:38:20 +00:00
Compare commits
1288 Commits
Author | SHA1 | Date | |
---|---|---|---|
![]() |
2ccc716c4a | ||
![]() |
4e23f3e180 | ||
![]() |
8b3113ce7a | ||
![]() |
a597ab8d1b | ||
![]() |
d7b3ac029c | ||
![]() |
60e3cf6247 | ||
![]() |
edeb19d5e9 | ||
![]() |
0dd89cda9c | ||
![]() |
fc6e8a4db8 | ||
![]() |
2fbe28bc05 | ||
![]() |
b5de158fdf | ||
![]() |
e53e56d5e5 | ||
![]() |
f3260129ad | ||
![]() |
340d853585 | ||
![]() |
57e0a578f0 | ||
![]() |
83fca0ab13 | ||
![]() |
fb815bd7b7 | ||
![]() |
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
|
||||
AlignEscapedNewlinesLeft: false
|
||||
AllowShortFunctionsOnASingleLine: false
|
||||
AlignTrailingComments: true
|
||||
SpacesBeforeTrailingComments: 2
|
||||
PenaltyReturnTypeOnItsOwnLine: 200
|
||||
AllowAllParametersOfDeclarationOnNextLine: false
|
||||
@@ -15,4 +16,5 @@ AllowShortIfStatementsOnASingleLine: false
|
||||
AllowShortLoopsOnASingleLine: false
|
||||
BinPackParameters: false
|
||||
BreakBeforeBinaryOperators: true
|
||||
BreakBeforeTernaryOperators: true
|
||||
ContinuationIndentWidth: 4
|
@@ -5,12 +5,8 @@ indent_style = space
|
||||
indent_size = 2
|
||||
end_of_line = lf
|
||||
insert_final_newline = true
|
||||
charset = utf_8
|
||||
charset = utf-8
|
||||
|
||||
[runtime/doc/*.txt]
|
||||
[{Makefile,**/Makefile,runtime/doc/*.txt}]
|
||||
indent_style = tab
|
||||
indent_size = 8
|
||||
|
||||
[Makefile]
|
||||
indent_style = tab
|
||||
tab_width = 4
|
||||
|
37
.travis.yml
37
.travis.yml
@@ -1,5 +1,5 @@
|
||||
dist: trusty
|
||||
sudo: false
|
||||
dist: xenial
|
||||
|
||||
language: c
|
||||
|
||||
env:
|
||||
@@ -25,7 +25,7 @@ env:
|
||||
-DBUSTED_OUTPUT_TYPE=nvim
|
||||
-DDEPS_PREFIX=$DEPS_BUILD_DIR/usr
|
||||
-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.
|
||||
- CMAKE_FLAGS_32BIT="-DCMAKE_SYSTEM_LIBRARY_PATH=/lib32:/usr/lib32:/usr/local/lib32
|
||||
-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"
|
||||
- TSAN_OPTIONS="log_path=$LOG_DIR/tsan"
|
||||
- UBSAN_OPTIONS="print_stacktrace=1 log_path=$LOG_DIR/ubsan"
|
||||
- ASAN_SYMBOLIZE=asan_symbolize
|
||||
# Environment variables for Valgrind.
|
||||
- VALGRIND_LOG="$LOG_DIR/valgrind-%p.log"
|
||||
# If this file exists, the cache is valid (compile was successful).
|
||||
@@ -50,12 +51,12 @@ jobs:
|
||||
include:
|
||||
- stage: normal builds
|
||||
os: linux
|
||||
compiler: clang
|
||||
compiler: clang-4.0
|
||||
# Use Lua so that ASAN can test our embedded Lua support. 8fec4d53d0f6
|
||||
env: >
|
||||
CLANG_SANITIZER=ASAN_UBSAN
|
||||
# Use Lua so that ASAN can test our embedded Lua support. 8fec4d53d0f6
|
||||
CMAKE_FLAGS="$CMAKE_FLAGS -DPREFER_LUA=ON"
|
||||
sudo: true
|
||||
ASAN_SYMBOLIZE=asan_symbolize-4.0
|
||||
- os: linux
|
||||
compiler: gcc
|
||||
env: >
|
||||
@@ -69,11 +70,12 @@ jobs:
|
||||
env: BUILD_32BIT=ON
|
||||
- os: osx
|
||||
compiler: clang
|
||||
osx_image: xcode7.3 # macOS 10.11
|
||||
osx_image: xcode9.4 # macOS 10.13
|
||||
- os: osx
|
||||
compiler: gcc
|
||||
osx_image: xcode7.3 # macOS 10.11
|
||||
- os: linux
|
||||
osx_image: xcode9.4 # macOS 10.13
|
||||
- if: branch = master
|
||||
os: linux
|
||||
env: CI_TARGET=lint
|
||||
- stage: Flaky builds
|
||||
os: linux
|
||||
@@ -96,29 +98,36 @@ before_cache: ci/before_cache.sh
|
||||
addons:
|
||||
apt:
|
||||
packages:
|
||||
- apport
|
||||
- autoconf
|
||||
- automake
|
||||
- apport
|
||||
- build-essential
|
||||
- clang
|
||||
- clang-4.0
|
||||
- cmake
|
||||
- cscope
|
||||
- g++-multilib
|
||||
- gcc-multilib
|
||||
- gdb
|
||||
- gperf
|
||||
- language-pack-tr
|
||||
- libc6-dev-i386
|
||||
- libtool
|
||||
- libtool-bin
|
||||
- locales
|
||||
- ninja-build
|
||||
- pkg-config
|
||||
- unzip
|
||||
- valgrind
|
||||
- xclip
|
||||
homebrew:
|
||||
update: true
|
||||
packages:
|
||||
- ccache
|
||||
- ninja
|
||||
|
||||
branches:
|
||||
except:
|
||||
- nightly
|
||||
only:
|
||||
- master
|
||||
- /^release-\d+\.\d+$/
|
||||
|
||||
cache:
|
||||
apt: true
|
||||
|
164
CMakeLists.txt
164
CMakeLists.txt
@@ -2,11 +2,14 @@
|
||||
# intro: https://codingnest.com/basic-cmake/
|
||||
# best practices (3.0+): https://gist.github.com/mbinna/c61dbb39bca0e4fb7d1f73b0d66a4fd1
|
||||
|
||||
cmake_minimum_required(VERSION 2.8.7)
|
||||
project(nvim)
|
||||
cmake_minimum_required(VERSION 2.8.12)
|
||||
project(nvim C)
|
||||
|
||||
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()
|
||||
|
||||
# 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.
|
||||
include(PreventInTreeBuilds)
|
||||
|
||||
set_property(GLOBAL PROPERTY USE_FOLDERS ON)
|
||||
|
||||
# Prefer our bundled versions of dependencies.
|
||||
if(DEFINED ENV{DEPS_BUILD_DIR})
|
||||
set(DEPS_PREFIX "$ENV{DEPS_BUILD_DIR}/usr" CACHE PATH "Path prefix for finding dependencies")
|
||||
else()
|
||||
set(DEPS_PREFIX "${CMAKE_CURRENT_SOURCE_DIR}/.deps/usr" CACHE PATH "Path prefix for finding dependencies")
|
||||
# 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()
|
||||
|
||||
if(CMAKE_CROSSCOMPILING AND NOT UNIX)
|
||||
list(INSERT CMAKE_FIND_ROOT_PATH 0 ${DEPS_PREFIX})
|
||||
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)
|
||||
set(CMAKE_INCLUDE_SYSTEM_FLAG_C "-isystem ")
|
||||
endif()
|
||||
if(CMAKE_COMPILER_IS_GNUCXX)
|
||||
set(CMAKE_INCLUDE_SYSTEM_FLAG_CXX "-isystem ")
|
||||
endif()
|
||||
endif()
|
||||
|
||||
if(WIN32 OR CMAKE_SYSTEM_NAME STREQUAL "Darwin")
|
||||
@@ -59,11 +88,19 @@ endif()
|
||||
|
||||
option(ENABLE_LIBINTL "enable libintl" 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.
|
||||
if(NOT CMAKE_BUILD_TYPE)
|
||||
message(STATUS "CMAKE_BUILD_TYPE not given, defaulting to 'Debug'.")
|
||||
set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Choose the type of build." FORCE)
|
||||
message(STATUS "CMAKE_BUILD_TYPE not given, defaulting to 'Debug'")
|
||||
set(CMAKE_BUILD_TYPE "Debug" CACHE STRING "Choose the type of build" FORCE)
|
||||
endif()
|
||||
|
||||
# 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`.
|
||||
set(NVIM_VERSION_MAJOR 0)
|
||||
set(NVIM_VERSION_MINOR 3)
|
||||
set(NVIM_VERSION_PATCH 0)
|
||||
set(NVIM_VERSION_PATCH 3)
|
||||
set(NVIM_VERSION_PRERELEASE "") # for package maintainers
|
||||
|
||||
# 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_PRERELEASE false)
|
||||
|
||||
@@ -103,7 +140,7 @@ set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
|
||||
|
||||
# Default to -O2 on release builds.
|
||||
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}")
|
||||
endif()
|
||||
|
||||
@@ -171,17 +208,16 @@ main(void)
|
||||
" 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).
|
||||
STRING(REGEX MATCH "[^\ ]+-D_FORTIFY_SOURCE" _FORTIFY_SOURCE_PREFIX "${CMAKE_C_FLAGS}")
|
||||
STRING(REPLACE "-D_FORTIFY_SOURCE" "" _FORTIFY_SOURCE_PREFIX "${_FORTIFY_SOURCE_PREFIX}" )
|
||||
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()
|
||||
# -U in add_definitions doesn't end up in the correct spot, so we add it to
|
||||
# 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_CXX_FLAGS "${CMAKE_CXX_FLAGS} ${_FORTIFY_SOURCE_PREFIX}-U_FORTIFY_SOURCE ${_FORTIFY_SOURCE_PREFIX}-D_FORTIFY_SOURCE=1")
|
||||
endif()
|
||||
|
||||
# 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
|
||||
CMAKE_SHARED_LINKER_FLAGS MATCHES "--sort-common" OR
|
||||
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_SHARED_LINKER_FLAGS "${CMAKE_SHARED_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)
|
||||
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.
|
||||
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=56273
|
||||
# 2. But _Pragma("...ignored") is broken (unresolved) in GCC 5+:
|
||||
@@ -276,10 +312,10 @@ if(CMAKE_CXX_COMPILER_ID STREQUAL "GNU")
|
||||
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)
|
||||
message(STATUS "Travis/QuickBuild CI build enabled.")
|
||||
message(STATUS "Travis/QuickBuild CI build enabled")
|
||||
add_definitions(-Werror)
|
||||
if(DEFINED ENV{BUILD_32BIT})
|
||||
# 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)
|
||||
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "Linux")
|
||||
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} -Wl,--no-undefined")
|
||||
set(CMAKE_SHARED_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS} -Wl,--no-undefined")
|
||||
set(CMAKE_MODULE_LINKER_FLAGS "${CMAKE_MODULE_LINKER_FLAGS} -Wl,--no-undefined")
|
||||
if(CMAKE_C_COMPILER_ID STREQUAL "GNU" OR CMAKE_C_COMPILER_ID STREQUAL "Clang")
|
||||
if(CMAKE_SYSTEM_NAME STREQUAL "SunOS")
|
||||
set(NO_UNDEFINED "-Wl,--no-undefined -lsocket")
|
||||
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
|
||||
# (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)
|
||||
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)
|
||||
# Required for luajit.
|
||||
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)
|
||||
|
||||
if(PREFER_LUA)
|
||||
find_package(Lua REQUIRED)
|
||||
find_package(Lua 5.1 REQUIRED)
|
||||
set(LUA_PREFERRED_INCLUDE_DIRS ${LUA_INCLUDE_DIR})
|
||||
set(LUA_PREFERRED_LIBRARIES ${LUA_LIBRARIES})
|
||||
# Passive (not REQUIRED): if LUAJIT_FOUND is not set, nvim-test is skipped.
|
||||
@@ -356,8 +392,9 @@ main(void)
|
||||
return MSGPACK_OBJECT_FLOAT32;
|
||||
}
|
||||
" MSGPACK_HAS_FLOAT32)
|
||||
unset(CMAKE_REQUIRED_LIBRARIES)
|
||||
if(MSGPACK_HAS_FLOAT32)
|
||||
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -DNVIM_MSGPACK_HAS_FLOAT32")
|
||||
add_definitions(-DNVIM_MSGPACK_HAS_FLOAT32)
|
||||
endif()
|
||||
|
||||
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));
|
||||
}
|
||||
" UNIBI_HAS_VAR_FROM)
|
||||
unset(CMAKE_REQUIRED_INCLUDES)
|
||||
unset(CMAKE_REQUIRED_LIBRARIES)
|
||||
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()
|
||||
|
||||
find_package(LibTermkey REQUIRED)
|
||||
find_package(LibTermkey 0.18 REQUIRED)
|
||||
include_directories(SYSTEM ${LIBTERMKEY_INCLUDE_DIRS})
|
||||
endif()
|
||||
|
||||
@@ -389,7 +428,7 @@ find_package(LibVterm REQUIRED)
|
||||
include_directories(SYSTEM ${LIBVTERM_INCLUDE_DIRS})
|
||||
|
||||
if(WIN32)
|
||||
find_package(Winpty REQUIRED)
|
||||
find_package(Winpty 0.4.3 REQUIRED)
|
||||
include_directories(SYSTEM ${WINPTY_INCLUDE_DIRS})
|
||||
endif()
|
||||
|
||||
@@ -400,11 +439,11 @@ option(CLANG_TSAN "Enable Clang thread sanitizer for nvim binary." OFF)
|
||||
if((CLANG_ASAN_UBSAN AND CLANG_MSAN)
|
||||
OR (CLANG_ASAN_UBSAN 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()
|
||||
|
||||
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()
|
||||
|
||||
if(CMAKE_SYSTEM_NAME MATCHES "OpenBSD|FreeBSD|Windows") # see #5318
|
||||
@@ -416,7 +455,7 @@ endif()
|
||||
|
||||
if(ENABLE_JEMALLOC)
|
||||
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()
|
||||
find_package(JeMalloc REQUIRED)
|
||||
include_directories(SYSTEM ${JEMALLOC_INCLUDE_DIRS})
|
||||
@@ -472,10 +511,10 @@ else()
|
||||
endif()
|
||||
|
||||
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()
|
||||
|
||||
message(STATUS "Using the Lua interpreter ${LUA_PRG}.")
|
||||
message(STATUS "Using Lua interpreter: ${LUA_PRG}")
|
||||
|
||||
# Setup busted.
|
||||
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.
|
||||
add_custom_target(unittest-prereqs
|
||||
DEPENDS ${UNITTEST_PREREQS})
|
||||
set_target_properties(unittest-prereqs PROPERTIES FOLDER test)
|
||||
|
||||
add_custom_target(functionaltest-prereqs
|
||||
DEPENDS ${FUNCTIONALTEST_PREREQS})
|
||||
@@ -569,35 +609,22 @@ if(BUSTED_PRG)
|
||||
-P ${PROJECT_SOURCE_DIR}/cmake/RunTests.cmake
|
||||
DEPENDS ${UNITTEST_PREREQS}
|
||||
${TEST_TARGET_ARGS})
|
||||
set_target_properties(unittest PROPERTIES FOLDER test)
|
||||
else()
|
||||
message(WARNING "disabling unit tests: no Luajit FFI in ${LUA_PRG}")
|
||||
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)
|
||||
if(LUA_HAS_FFI)
|
||||
set(TEST_LIBNVIM_PATH $<TARGET_FILE:nvim-test>)
|
||||
else()
|
||||
# To avoid duplicating paths.lua.in while we still support CMake < 2.8.12,
|
||||
# use configure_file() to add the generator expression and then generate
|
||||
# the final file
|
||||
if(LUA_HAS_FFI)
|
||||
set(TEST_LIBNVIM_PATH $<TARGET_FILE:nvim-test>)
|
||||
else()
|
||||
set(TEST_LIBNVIM_PATH "")
|
||||
endif()
|
||||
configure_file(
|
||||
${CMAKE_SOURCE_DIR}/test/config/paths.lua.in
|
||||
${CMAKE_BINARY_DIR}/test/config/paths.lua.gen)
|
||||
file(GENERATE
|
||||
OUTPUT ${CMAKE_BINARY_DIR}/test/config/paths.lua
|
||||
INPUT ${CMAKE_BINARY_DIR}/test/config/paths.lua.gen)
|
||||
set(TEST_LIBNVIM_PATH "")
|
||||
endif()
|
||||
configure_file(
|
||||
${CMAKE_SOURCE_DIR}/test/config/paths.lua.in
|
||||
${CMAKE_BINARY_DIR}/test/config/paths.lua.gen)
|
||||
file(GENERATE
|
||||
OUTPUT ${CMAKE_BINARY_DIR}/test/config/paths.lua
|
||||
INPUT ${CMAKE_BINARY_DIR}/test/config/paths.lua.gen)
|
||||
|
||||
add_custom_target(functionaltest
|
||||
COMMAND ${CMAKE_COMMAND}
|
||||
@@ -613,6 +640,8 @@ if(BUSTED_PRG)
|
||||
-P ${PROJECT_SOURCE_DIR}/cmake/RunTests.cmake
|
||||
DEPENDS ${FUNCTIONALTEST_PREREQS}
|
||||
${TEST_TARGET_ARGS})
|
||||
set_target_properties(functionaltest functionaltest-prereqs
|
||||
PROPERTIES FOLDER test)
|
||||
|
||||
add_custom_target(benchmark
|
||||
COMMAND ${CMAKE_COMMAND}
|
||||
@@ -628,6 +657,7 @@ if(BUSTED_PRG)
|
||||
-P ${PROJECT_SOURCE_DIR}/cmake/RunTests.cmake
|
||||
DEPENDS ${BENCHMARK_PREREQS}
|
||||
${TEST_TARGET_ARGS})
|
||||
set_target_properties(benchmark benchmark-prereqs PROPERTIES FOLDER test)
|
||||
endif()
|
||||
|
||||
if(BUSTED_LUA_PRG)
|
||||
@@ -645,6 +675,7 @@ if(BUSTED_LUA_PRG)
|
||||
-P ${PROJECT_SOURCE_DIR}/cmake/RunTests.cmake
|
||||
DEPENDS ${FUNCTIONALTEST_PREREQS}
|
||||
${TEST_TARGET_ARGS})
|
||||
set_target_properties(functionaltest-lua PROPERTIES FOLDER test)
|
||||
endif()
|
||||
|
||||
if(LUACHECK_PRG)
|
||||
@@ -657,7 +688,7 @@ if(LUACHECK_PRG)
|
||||
-P ${PROJECT_SOURCE_DIR}/cmake/RunLuacheck.cmake)
|
||||
|
||||
add_custom_target(
|
||||
blobcodelint
|
||||
lintbuiltinlua
|
||||
COMMAND
|
||||
${CMAKE_COMMAND}
|
||||
-DLUACHECK_PRG=${LUACHECK_PRG}
|
||||
@@ -666,10 +697,21 @@ if(LUACHECK_PRG)
|
||||
-DREAD_GLOBALS=vim
|
||||
-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
|
||||
add_custom_target(
|
||||
lualint
|
||||
DEPENDS blobcodelint
|
||||
DEPENDS lintruntimelua
|
||||
DEPENDS lintbuiltinlua
|
||||
)
|
||||
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
|
||||
CMAKE_EXTRA_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))
|
||||
BUNDLED_CMAKE_FLAG := -DUSE_BUNDLED=$(USE_BUNDLED_DEPS)
|
||||
ifneq (,$(USE_BUNDLED))
|
||||
BUNDLED_CMAKE_FLAG := -DUSE_BUNDLED=$(USE_BUNDLED)
|
||||
endif
|
||||
|
||||
ifneq (,$(findstring functionaltest-lua,$(MAKECMDGOALS)))
|
||||
@@ -76,12 +77,12 @@ build/.ran-cmake: | deps
|
||||
touch $@
|
||||
|
||||
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)
|
||||
endif
|
||||
|
||||
build/.ran-third-party-cmake:
|
||||
ifeq ($(call filter-true,$(USE_BUNDLED_DEPS)),)
|
||||
ifeq ($(call filter-true,$(USE_BUNDLED)),)
|
||||
mkdir -p $(DEPS_BUILD_DIR)
|
||||
cd $(DEPS_BUILD_DIR) && \
|
||||
$(CMAKE_PRG) -G '$(BUILD_TYPE)' $(BUNDLED_CMAKE_FLAG) $(BUNDLED_LUA_CMAKE_FLAG) \
|
||||
@@ -102,6 +103,10 @@ endif
|
||||
helptags: | nvim
|
||||
+$(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
|
||||
+$(BUILD_CMD) -C build functionaltest
|
||||
|
||||
@@ -142,6 +147,9 @@ clint-full: build/.ran-cmake
|
||||
check-single-includes: build/.ran-cmake
|
||||
+$(BUILD_CMD) -C build check-single-includes
|
||||
|
||||
generated-sources: build/.ran-cmake
|
||||
+$(BUILD_CMD) -C build generated-sources
|
||||
|
||||
appimage:
|
||||
bash scripts/genappimage.sh
|
||||
|
||||
|
99
README.md
99
README.md
@@ -6,12 +6,12 @@
|
||||
[Community](https://neovim.io/community/) |
|
||||
[Gitter **Chat**](https://gitter.im/neovim/neovim)
|
||||
|
||||
[](https://travis-ci.org/neovim/neovim)
|
||||
[](https://ci.appveyor.com/project/neovim/neovim/branch/master)
|
||||
[](https://codecov.io/gh/neovim/neovim)
|
||||
[](https://scan.coverity.com/projects/2227)
|
||||
[](https://neovim.io/doc/reports/clang)
|
||||
[](https://neovim.io/doc/reports/pvs/PVS-studio.html.d)
|
||||
[](https://travis-ci.org/neovim/neovim)
|
||||
[](https://ci.appveyor.com/project/neovim/neovim/branch/master)
|
||||
[](https://codecov.io/gh/neovim/neovim)
|
||||
[](https://scan.coverity.com/projects/2227)
|
||||
[](https://neovim.io/doc/reports/clang)
|
||||
[](https://neovim.io/doc/reports/pvs/PVS-studio.html.d)
|
||||
|
||||
[](https://repology.org/metapackage/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
|
||||
- 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.
|
||||
|
||||
[](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
|
||||
-------------------
|
||||
|
||||
@@ -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 install
|
||||
|
||||
To list all targets:
|
||||
To skip bundled (`third-party/*`) dependencies:
|
||||
|
||||
cmake --build build --target help
|
||||
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
|
||||
```
|
||||
|
||||
To skip "bundled" dependencies define `USE_BUNDLED_DEPS=NO` (CMake option: `USE_BUNDLED=NO`).
|
||||
CMake features:
|
||||
|
||||
See [the wiki](https://github.com/neovim/neovim/wiki/Building-Neovim) for details.
|
||||
- List all build targets:
|
||||
```
|
||||
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.
|
||||
|
||||
Install from package
|
||||
See the [Building Neovim](https://github.com/neovim/neovim/wiki/Building-Neovim) wiki page for details.
|
||||
|
||||
Transitioning from Vim
|
||||
--------------------
|
||||
|
||||
Pre-built packages for Windows, macOS, and Linux are found at 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)!
|
||||
See [`:help nvim-from-vim`](https://neovim.io/doc/user/nvim.html#nvim-from-vim) for instructions.
|
||||
|
||||
Project layout
|
||||
--------------
|
||||
@@ -63,34 +105,19 @@ Project layout
|
||||
├─ ci/ build automation
|
||||
├─ cmake/ build scripts
|
||||
├─ 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
|
||||
│ ├─ eval/ VimL subsystem
|
||||
│ ├─ event/ event-loop subsystem
|
||||
│ ├─ generators/ code generation (pre-compilation)
|
||||
│ ├─ lib/ generic data structures
|
||||
│ ├─ lua/ lua subsystem
|
||||
│ ├─ lua/ Lua subsystem
|
||||
│ ├─ msgpack_rpc/ RPC subsystem
|
||||
│ ├─ os/ low-level platform code
|
||||
│ └─ tui/ built-in UI
|
||||
├─ third-party/ cmake subproject to build dependencies
|
||||
├─ third-party/ CMake subproject to build dependencies
|
||||
└─ 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
|
||||
-------
|
||||
|
||||
@@ -124,7 +151,7 @@ See `LICENSE` for details.
|
||||
[Homebrew]: https://github.com/neovim/homebrew-neovim#installation
|
||||
[Debian]: https://packages.debian.org/testing/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
|
||||
[Gentoo]: https://packages.gentoo.org/packages/app-editors/neovim
|
||||
|
||||
|
@@ -18,6 +18,7 @@ build_script:
|
||||
- powershell ci\build.ps1
|
||||
cache:
|
||||
- C:\msys64\var\cache\pacman\pkg -> ci\build.ps1
|
||||
- .deps -> ci\build.ps1
|
||||
- .deps -> third-party\**
|
||||
artifacts:
|
||||
- path: build/Neovim.zip
|
||||
|
@@ -1,7 +1,8 @@
|
||||
-- TODO(jkeyes): remove this and use the upstream version as soon as it is
|
||||
-- available in a release of busted.
|
||||
-- TODO(jkeyes): Use the upstream version when busted releases it. (But how to
|
||||
-- inject our call to global_helpers.read_nvim_log() ?)
|
||||
|
||||
local pretty = require 'pl.pretty'
|
||||
local global_helpers = require('test.helpers')
|
||||
|
||||
return function(options)
|
||||
local busted = require 'busted'
|
||||
@@ -18,6 +19,7 @@ return function(options)
|
||||
end
|
||||
|
||||
handler.suiteEnd = function()
|
||||
io.write(global_helpers.read_nvim_log())
|
||||
print('1..' .. counter)
|
||||
io.flush()
|
||||
return nil, true
|
||||
|
@@ -1,6 +1,7 @@
|
||||
local s = require 'say'
|
||||
local pretty = require 'pl.pretty'
|
||||
local term = require 'term'
|
||||
local global_helpers = require('test.helpers')
|
||||
|
||||
local colors
|
||||
|
||||
@@ -200,6 +201,7 @@ return function(options)
|
||||
local tests = (testCount == 1 and 'test' or 'tests')
|
||||
local files = (fileCount == 1 and 'file' or 'files')
|
||||
io.write(globalTeardown)
|
||||
io.write(global_helpers.read_nvim_log())
|
||||
io.write(suiteEndString:format(testCount, tests, fileCount, files, elapsedTime_ms))
|
||||
io.write(getSummaryString())
|
||||
io.flush()
|
||||
|
@@ -7,10 +7,6 @@ if [[ "${CI_TARGET}" == lint ]]; then
|
||||
exit
|
||||
fi
|
||||
|
||||
if [[ "${TRAVIS_OS_NAME}" == osx ]]; then
|
||||
brew update
|
||||
fi
|
||||
|
||||
echo 'python info:'
|
||||
(
|
||||
2>&1 python --version || true
|
||||
@@ -24,17 +20,15 @@ echo 'python info:'
|
||||
) | sed 's/^/ /'
|
||||
|
||||
if [[ "${TRAVIS_OS_NAME}" == osx ]]; then
|
||||
echo "Upgrade Python 3."
|
||||
brew upgrade python
|
||||
echo "Upgrade Python 3 pip."
|
||||
pip3 -q install --user --upgrade pip
|
||||
echo "Upgrade Python 3 pip"
|
||||
python3 -m pip -q install --user --upgrade pip
|
||||
else
|
||||
echo "Upgrade Python 2 pip."
|
||||
pip2.7 -q install --user --upgrade pip
|
||||
echo "Upgrade Python 3 pip."
|
||||
echo "Upgrade Python 2 pip"
|
||||
python2.7 -m pip -q install --user --upgrade pip
|
||||
echo "Upgrade Python 3 pip"
|
||||
# Allow failure. pyenv pip3 on travis is broken:
|
||||
# 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
|
||||
|
||||
echo "Install node (LTS)"
|
||||
|
48
ci/build.ps1
48
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+))?$'
|
||||
$compiler = $Matches.compiler
|
||||
@@ -12,14 +13,16 @@ $nvimCmakeVars = @{
|
||||
CMAKE_BUILD_TYPE = $cmakeBuildType;
|
||||
BUSTED_OUTPUT_TYPE = 'nvim';
|
||||
}
|
||||
$uploadToCodeCov = $false
|
||||
|
||||
# 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
|
||||
}
|
||||
|
||||
function exitIfFailed() {
|
||||
if ($LastExitCode -ne 0) {
|
||||
Set-PSDebug -Off
|
||||
exit $LastExitCode
|
||||
}
|
||||
}
|
||||
@@ -38,15 +41,21 @@ if ($compiler -eq 'MINGW') {
|
||||
# These are native MinGW builds, but they use the toolchain inside
|
||||
# MSYS2, this allows using all the dependencies and tools available
|
||||
# in MSYS2, but we cannot build inside the MSYS2 shell.
|
||||
$cmakeGenerator = 'MinGW Makefiles'
|
||||
$cmakeGeneratorArgs = 'VERBOSE=1'
|
||||
$cmakeGenerator = 'Ninja'
|
||||
$cmakeGeneratorArgs = '-v'
|
||||
$mingwPackages = @('ninja', 'cmake', 'perl', 'diffutils', 'unibilium').ForEach({
|
||||
"mingw-w64-$arch-$_"
|
||||
})
|
||||
|
||||
# Add MinGW to the 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
|
||||
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') {
|
||||
$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)
|
||||
C:\Python27\python.exe -m pip install neovim ; exitIfFailed
|
||||
C:\Python35\python.exe -m pip install neovim ; exitIfFailed
|
||||
C:\Python27\python.exe -m pip install pynvim ; exitIfFailed
|
||||
C:\Python35\python.exe -m pip install pynvim ; exitIfFailed
|
||||
# Disambiguate python3
|
||||
move c:\Python35\python.exe c:\Python35\python3.exe
|
||||
$env:PATH = "C:\Python35;C:\Python27;$env:PATH"
|
||||
# Sanity check
|
||||
python -c "import neovim; print(str(neovim))" ; exitIfFailed
|
||||
python3 -c "import neovim; print(str(neovim))" ; exitIfFailed
|
||||
python -c "import pynvim; print(str(pynvim))" ; exitIfFailed
|
||||
python3 -c "import pynvim; print(str(pynvim))" ; exitIfFailed
|
||||
|
||||
$env:PATH = "C:\Ruby24\bin;$env:PATH"
|
||||
cmd /c gem.cmd install neovim ; exitIfFailed
|
||||
where.exe neovim-ruby-host.bat ; exitIfFailed
|
||||
gem.cmd install neovim
|
||||
Get-Command -CommandType Application neovim-ruby-host.bat
|
||||
|
||||
cmd /c npm.cmd install -g neovim ; exitIfFailed
|
||||
where.exe neovim-node-host.cmd ; exitIfFailed
|
||||
cmd /c npm link neovim
|
||||
npm.cmd install -g neovim
|
||||
Get-Command -CommandType Application neovim-node-host.cmd
|
||||
npm.cmd link neovim
|
||||
|
||||
function convertToCmakeArgs($vars) {
|
||||
return $vars.GetEnumerator() | foreach { "-D$($_.Key)=$($_.Value)" }
|
||||
}
|
||||
|
||||
mkdir .deps
|
||||
if (-Not (Test-Path -PathType container .deps)) {
|
||||
mkdir .deps
|
||||
}
|
||||
cd .deps
|
||||
cmake -G $cmakeGenerator $(convertToCmakeArgs($depsCmakeVars)) ..\third-party\ ; exitIfFailed
|
||||
cmake --build . --config $cmakeBuildType -- $cmakeGeneratorArgs ; exitIfFailed
|
||||
@@ -103,11 +111,11 @@ $failed = $false
|
||||
Set-PSDebug -Off
|
||||
cmake --build . --config $cmakeBuildType --target functionaltest -- $cmakeGeneratorArgs 2>&1 |
|
||||
foreach { $failed = $failed -or
|
||||
$_ -match 'Running functional tests failed with error'; $_ }
|
||||
Set-PSDebug -Trace 1
|
||||
$_ -match 'functional tests failed with error'; $_ }
|
||||
if ($failed) {
|
||||
exit $LastExitCode
|
||||
}
|
||||
Set-PSDebug -Strict -Trace 1
|
||||
|
||||
|
||||
if ($uploadToCodecov) {
|
||||
|
@@ -7,7 +7,7 @@ _stat() {
|
||||
}
|
||||
|
||||
top_make() {
|
||||
echo '================================================================================'
|
||||
printf '%78s\n' | tr ' ' '='
|
||||
# Travis has 1.5 virtual cores according to:
|
||||
# http://docs.travis-ci.com/user/speeding-up-the-build/#Paralellizing-your-build-on-one-VM
|
||||
ninja "$@"
|
||||
@@ -35,7 +35,7 @@ build_deps() {
|
||||
elif test -f "${CACHE_MARKER}" ; then
|
||||
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-downloads" "${DEPS_DOWNLOAD_DIR}"
|
||||
cp -r "${HOME}/.cache/nvim-deps-downloads"/. "${DEPS_DOWNLOAD_DIR}"
|
||||
fi
|
||||
|
||||
# Even if we're using cached dependencies, run CMake and make to
|
||||
|
@@ -39,13 +39,6 @@ enter_suite() {
|
||||
|
||||
exit_suite() {
|
||||
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}"
|
||||
if test $FAILED -ne 0 ; then
|
||||
echo "Suite ${NVIM_TEST_CURRENT_SUITE} failed, summary:"
|
||||
|
@@ -34,8 +34,10 @@ check_core_dumps() {
|
||||
local app="${1:-${BUILD_DIR}/bin/nvim}"
|
||||
if test "${TRAVIS_OS_NAME}" = osx ; then
|
||||
local cores="$(find /cores/ -type f -print)"
|
||||
local _sudo='sudo'
|
||||
else
|
||||
local cores="$(find ./ -type f -name 'core.*' -print)"
|
||||
local _sudo=
|
||||
fi
|
||||
|
||||
if test -z "${cores}" ; then
|
||||
@@ -45,7 +47,7 @@ check_core_dumps() {
|
||||
for core in $cores; do
|
||||
if test "$del" = "1" ; then
|
||||
print_core "$app" "$core" >&2
|
||||
rm "$core"
|
||||
"$_sudo" rm "$core"
|
||||
else
|
||||
print_core "$app" "$core"
|
||||
fi
|
||||
@@ -81,7 +83,7 @@ valgrind_check() {
|
||||
|
||||
asan_check() {
|
||||
if test "${CLANG_SANITIZER}" = "ASAN_UBSAN" ; then
|
||||
check_logs "${1}" "*san.*" | asan_symbolize
|
||||
check_logs "${1}" "*san.*" | $ASAN_SYMBOLIZE
|
||||
fi
|
||||
}
|
||||
|
||||
|
@@ -8,29 +8,25 @@ if [[ "${CI_TARGET}" == lint ]]; then
|
||||
fi
|
||||
|
||||
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"
|
||||
fi
|
||||
|
||||
echo "Install neovim module for Python 3."
|
||||
# Allow failure. pyenv pip3 on travis is broken:
|
||||
# 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
|
||||
# Update PATH for pip.
|
||||
export PATH="$(python2.7 -c 'import site; print(site.getuserbase())')/bin:$PATH"
|
||||
# Use default CC to avoid compilation problems when installing Python modules.
|
||||
echo "Install neovim module for Python 2."
|
||||
CC=cc pip2.7 -q install --user --upgrade neovim
|
||||
|
||||
echo "Install neovim RubyGem."
|
||||
gem install --no-document --version ">= 0.2.0" neovim
|
||||
CC=cc python2.7 -m pip -q install --user --upgrade neovim
|
||||
fi
|
||||
|
||||
echo "Install neovim RubyGem."
|
||||
gem install --no-document --version ">= 0.8.0" neovim
|
||||
|
||||
echo "Install neovim npm package"
|
||||
npm install -g neovim
|
||||
npm link neovim
|
||||
|
@@ -8,7 +8,7 @@ else()
|
||||
HELPTAGS_WORKING_DIRECTORY)
|
||||
endif()
|
||||
|
||||
message(STATUS "Generating helptags in ${HELPTAGS_WORKING_DIRECTORY}.")
|
||||
message(STATUS "Generating helptags in ${HELPTAGS_WORKING_DIRECTORY}")
|
||||
if(EXISTS ${HELPTAGS_WORKING_DIRECTORY}/)
|
||||
message(STATUS "${HELPTAGS_WORKING_DIRECTORY} already exists")
|
||||
# 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)
|
||||
# Check if the lua interpreter at the given path
|
||||
# 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})
|
||||
message(STATUS
|
||||
"[${LUA_PRG_PATH}] file not found")
|
||||
|
@@ -18,5 +18,5 @@ execute_process(
|
||||
|
||||
if(NOT res EQUAL 0)
|
||||
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()
|
||||
|
@@ -24,12 +24,12 @@ if(BUSTED_OUTPUT_TYPE STREQUAL junit)
|
||||
set(EXTRA_ARGS OUTPUT_FILE ${BUILD_DIR}/${TEST_TYPE}test-junit.xml)
|
||||
endif()
|
||||
|
||||
if(DEFINED ENV{TEST_TAG})
|
||||
if(DEFINED ENV{TEST_TAG} AND NOT "$ENV{TEST_TAG}" STREQUAL "")
|
||||
set(TEST_TAG "--tags=$ENV{TEST_TAG}")
|
||||
endif()
|
||||
|
||||
if(DEFINED ENV{TEST_FILTER})
|
||||
set(TEST_TAG "--filter=$ENV{TEST_FILTER}")
|
||||
if(DEFINED ENV{TEST_FILTER} AND NOT "$ENV{TEST_FILTER}" STREQUAL "")
|
||||
set(TEST_FILTER "--filter=$ENV{TEST_FILTER}")
|
||||
endif()
|
||||
|
||||
execute_process(COMMAND ${CMAKE_COMMAND} -E make_directory ${WORKING_DIR}/Xtest-tmpdir)
|
||||
@@ -38,7 +38,10 @@ set(ENV{SYSTEM_NAME} ${SYSTEM_NAME})
|
||||
execute_process(
|
||||
COMMAND ${BUSTED_PRG} ${TEST_TAG} ${TEST_FILTER} -v -o ${BUSTED_OUTPUT_TYPE}
|
||||
--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}
|
||||
ERROR_VARIABLE err
|
||||
RESULT_VARIABLE res
|
||||
@@ -50,5 +53,5 @@ file(REMOVE_RECURSE ${WORKING_DIR}/Xtest-tmpdir)
|
||||
|
||||
if(NOT res EQUAL 0)
|
||||
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()
|
||||
|
@@ -13,7 +13,9 @@ coverage:
|
||||
|
||||
status:
|
||||
project: yes
|
||||
patch: yes
|
||||
patch:
|
||||
default:
|
||||
threshold: 1
|
||||
changes: no
|
||||
|
||||
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 ..
|
||||
|
154
man/nvim.1
154
man/nvim.1
@@ -20,41 +20,51 @@
|
||||
.Sh DESCRIPTION
|
||||
.Nm
|
||||
is a text editor based on Vim.
|
||||
To enter commands in
|
||||
.Nm ,
|
||||
type a colon
|
||||
.Pq Sq \&:
|
||||
which is also used in this manual to denote commands.
|
||||
For more information, consult the online help with the
|
||||
.Ic :help
|
||||
command.
|
||||
Start
|
||||
.Nm
|
||||
followed by any number of options and/or files:
|
||||
.Pp
|
||||
.Dl nvim [options] [file ...]
|
||||
.Pp
|
||||
Commands in
|
||||
.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
|
||||
.It Ar file ...
|
||||
File(s) to edit.
|
||||
If none are specified, open an empty buffer.
|
||||
If multiple files are specified, open one buffer for each file.
|
||||
Opens one buffer per file.
|
||||
To switch between buffers, use the
|
||||
.Ic :next
|
||||
and
|
||||
.Ic :previous
|
||||
commands.
|
||||
.It Fl
|
||||
Read text from standard input until
|
||||
Reads text from standard input until
|
||||
.Dv EOF ,
|
||||
then open a buffer with that text.
|
||||
Commands are read from standard error, which should be a terminal.
|
||||
then opens a buffer with that text.
|
||||
User input is read from standard error, which should be a terminal.
|
||||
.Sh OPTIONS
|
||||
.Bl -tag -width Fl
|
||||
.It Fl t Ar tag
|
||||
The file to edit and the initial cursor position depends on a
|
||||
tag, a sort of goto label.
|
||||
Finds
|
||||
.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.
|
||||
If
|
||||
.Ar tag
|
||||
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" .
|
||||
Cursor is positioned at the tag location in the file.
|
||||
.Ic ":help tag-commands"
|
||||
.It Fl q Op Ar errorfile
|
||||
QuickFix mode.
|
||||
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
|
||||
.Ic :cnext
|
||||
command.
|
||||
See
|
||||
.Ic ":help quickfix" .
|
||||
.It There are a number of other options:
|
||||
.Ic ":help quickfix"
|
||||
.It Fl -
|
||||
Interpret all further arguments as files.
|
||||
Can be used to edit files starting with a hyphen
|
||||
End of options.
|
||||
Remaining arguments are treated as literal file names, including filenames starting with hyphen
|
||||
.Pq Sq - .
|
||||
.It Fl e
|
||||
Ex mode. Reads stdin as Ex commands.
|
||||
See
|
||||
.Ic ":help Ex-mode" .
|
||||
Ex mode, reading stdin as Ex commands.
|
||||
.Ic ":help Ex-mode"
|
||||
.It Fl E
|
||||
Ex mode, improved. Reads stdin as text.
|
||||
See
|
||||
.Ic :help gQ .
|
||||
Ex mode, reading stdin as text.
|
||||
.Ic :help Ex-mode
|
||||
.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
|
||||
Silent (batch) mode. Reads stdin as text.
|
||||
Silent/batch mode, reading stdin as text.
|
||||
.Ic :help silent-mode
|
||||
.It Fl d
|
||||
Diff mode.
|
||||
Show the difference between two to four files, similar to
|
||||
.Xr sdiff 1 .
|
||||
See
|
||||
.Ic ":help diff" .
|
||||
.Ic ":help diff"
|
||||
.It Fl R
|
||||
Read-only mode.
|
||||
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.
|
||||
To overwrite a file, add an exclamation mark to the relevant Ex command, such as
|
||||
.Ic :w! .
|
||||
See
|
||||
.Ic ":help 'readonly'" .
|
||||
.Ic ":help 'readonly'"
|
||||
.It Fl Z
|
||||
Restricted mode.
|
||||
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.
|
||||
.It Fl b
|
||||
Binary mode.
|
||||
See
|
||||
.Ic ":help edit-binary" .
|
||||
.Ic ":help edit-binary"
|
||||
.It Fl l
|
||||
Lisp mode.
|
||||
Sets the 'lisp' and 'showmatch' options.
|
||||
@@ -126,19 +131,20 @@ Hebrew mode.
|
||||
Sets the 'hkmap' and 'rightleft' options.
|
||||
.It Fl V Ns Oo Ar N Oc Ns Op Ar file
|
||||
Verbose mode.
|
||||
Print messages about which files are being sourced and for reading and
|
||||
writing a ShaDa file.
|
||||
Prints debug messages.
|
||||
.Ar N
|
||||
is the 'verbose' level; defaults to
|
||||
.Cm 10.
|
||||
is the 'verbose' level, defaults to
|
||||
.Cm 10 .
|
||||
If
|
||||
.Ar file
|
||||
is specified, append messages to
|
||||
.Ar file
|
||||
instead of printing them.
|
||||
.Ic ":help 'verbose'"
|
||||
.It Fl D
|
||||
Debugging mode.
|
||||
Debug mode for VimL (Vim script).
|
||||
Started when executing the first command from a script.
|
||||
:help debug-mode
|
||||
.It Fl n
|
||||
Disable the use of swap files.
|
||||
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
|
||||
.Sq .swp
|
||||
appended.
|
||||
See
|
||||
.Ic ":help recovery" .
|
||||
.Ic ":help recovery"
|
||||
.It Fl L Op Ar file
|
||||
Alias for
|
||||
.Fl r .
|
||||
@@ -177,8 +182,7 @@ If
|
||||
is
|
||||
.Cm NONE ,
|
||||
loading plugins is also skipped.
|
||||
See
|
||||
.Ic ":help initialization" .
|
||||
.Ic ":help initialization"
|
||||
.It Fl i Ar shada
|
||||
Use
|
||||
.Ar shada
|
||||
@@ -189,8 +193,7 @@ If
|
||||
is
|
||||
.Cm NONE ,
|
||||
do not read or write a ShaDa file.
|
||||
See
|
||||
.Ic ":help shada" .
|
||||
.Ic ":help shada"
|
||||
.It Fl -noplugin
|
||||
Skip loading plugins.
|
||||
Implied by
|
||||
@@ -243,17 +246,12 @@ and
|
||||
.Ic :/foo
|
||||
inside
|
||||
.Nm .
|
||||
See
|
||||
.Ic ":help search-pattern" .
|
||||
.It Fl c Ar command
|
||||
.Ic ":help search-pattern"
|
||||
.It \fB\+\fR\fI\,command\/\fR , Fl c Ar command
|
||||
Execute
|
||||
.Ar command
|
||||
after reading the first file.
|
||||
Up to 10 instances of
|
||||
.Fl c
|
||||
or
|
||||
.Cm +
|
||||
can be used.
|
||||
Up to 10 instances allowed.
|
||||
.Qq Cm +foo
|
||||
and
|
||||
.Cm -c \(dqfoo\(dq
|
||||
@@ -280,8 +278,7 @@ If
|
||||
is omitted then
|
||||
.Pa Session.vim
|
||||
is used, if found.
|
||||
See
|
||||
.Ic ":help session-file" .
|
||||
.Ic ":help session-file"
|
||||
.It Fl s Ar scriptin
|
||||
Read normal mode commands from
|
||||
.Ar scriptin .
|
||||
@@ -310,10 +307,12 @@ Can be used to diagnose slow startup times.
|
||||
Dump API metadata serialized to msgpack and exit.
|
||||
.It Fl -embed
|
||||
Use standard input and standard output as a msgpack-rpc channel.
|
||||
Implies
|
||||
.Fl -headless .
|
||||
:help --embed
|
||||
.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
|
||||
Start RPC server on this pipe or TCP socket.
|
||||
.It Fl h , -help
|
||||
@@ -324,11 +323,12 @@ Print version information and exit.
|
||||
.Sh ENVIRONMENT
|
||||
.Bl -tag -width Fl
|
||||
.It Ev NVIM_LOG_FILE
|
||||
Low-level log file, usually found at ~/.local/share/nvim/log. See :help
|
||||
$NVIM_LOG_FILE.
|
||||
Low-level log file, usually found at ~/.local/share/nvim/log.
|
||||
:help $NVIM_LOG_FILE
|
||||
.It Ev VIM
|
||||
Used to locate user files, such as init.vim.
|
||||
System-dependent, see :help $VIM.
|
||||
System-dependent.
|
||||
:help $VIM
|
||||
.It Ev VIMRUNTIME
|
||||
Used to locate runtime files (documentation, syntax highlighting, etc.).
|
||||
.It Ev XDG_CONFIG_HOME
|
||||
@@ -336,7 +336,7 @@ Path to the user-local configuration directory, see
|
||||
.Sx FILES .
|
||||
Defaults to
|
||||
.Pa ~/.config .
|
||||
See :help xdg.
|
||||
:help xdg
|
||||
.It Ev XDG_DATA_HOME
|
||||
Like
|
||||
.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.
|
||||
Defaults to
|
||||
.Pa ~/.local/share .
|
||||
See :help xdg.
|
||||
:help xdg
|
||||
.It Ev VIMINIT
|
||||
Ex commands to be executed at startup.
|
||||
For example, the command to quit is
|
||||
.Ic :q ,
|
||||
so to have
|
||||
.Nm
|
||||
quit immediately after starting, set
|
||||
.Ev VIMINIT
|
||||
to
|
||||
.Cm q .
|
||||
See
|
||||
.Ic ":help VIMINIT" .
|
||||
.Ic ":help VIMINIT"
|
||||
.It Ev SHELL
|
||||
Used to initialize the 'shell' option, which decides the default shell used by
|
||||
features like
|
||||
@@ -391,10 +382,9 @@ Nvim was started by
|
||||
Most of Vim was written by
|
||||
.An -nosplit
|
||||
.An Bram Moolenaar .
|
||||
See
|
||||
.Ic ":help credits" .
|
||||
Vim is based on Stevie, worked on by
|
||||
.An Tim Thompson ,
|
||||
.An Tony Andrews ,
|
||||
and
|
||||
.An G.R. (Fred) Walter .
|
||||
.Ic ":help credits"
|
||||
|
@@ -21,17 +21,13 @@ add_custom_command(OUTPUT ${GENERATED_SYN_VIM}
|
||||
${FUNCS_DATA}
|
||||
)
|
||||
|
||||
if(POLICY CMP0054)
|
||||
cmake_policy(SET CMP0054 OLD)
|
||||
endif()
|
||||
|
||||
file(GLOB PACKAGES ${PROJECT_SOURCE_DIR}/runtime/pack/dist/opt/*)
|
||||
|
||||
set(GENERATED_PACKAGE_TAGS)
|
||||
foreach(PACKAGE ${PACKAGES})
|
||||
get_filename_component(PACKNAME ${PACKAGE} NAME)
|
||||
file(GLOB "${PACKNAME}_DOC_FILES" ${PACKAGE}/doc/*.txt)
|
||||
if("${PACKNAME}_DOC_FILES")
|
||||
if(${PACKNAME}_DOC_FILES)
|
||||
file(MAKE_DIRECTORY ${GENERATED_PACKAGE_DIR}/${PACKNAME})
|
||||
add_custom_target("${PACKNAME}-tags"
|
||||
COMMAND ${CMAKE_COMMAND} -E copy_directory
|
||||
@@ -72,9 +68,9 @@ foreach(DF ${DOCFILES})
|
||||
endforeach()
|
||||
|
||||
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
|
||||
${PROJECT_SOURCE_DIR}/runtime/doc ${GENERATED_RUNTIME_DIR}/doc
|
||||
${PROJECT_SOURCE_DIR}/runtime/doc doc
|
||||
COMMAND "${PROJECT_BINARY_DIR}/bin/nvim"
|
||||
-u NONE -i NONE -e --headless -c "helptags ++t doc" -c quit
|
||||
DEPENDS
|
||||
@@ -91,7 +87,7 @@ add_custom_command(OUTPUT ${GENERATED_HELP_TAGS}
|
||||
add_custom_target(doc_html
|
||||
COMMAND make html
|
||||
DEPENDS
|
||||
${GENERATED_HELP_TAGS}
|
||||
helptags
|
||||
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
|
||||
" Language: C
|
||||
" Maintainer: Bram Moolenaar <Bram@vim.org>
|
||||
" Last Change: 2012 Jun 20
|
||||
" Last Change: 2018 Aug 20
|
||||
|
||||
let s:cpo_save = &cpo
|
||||
set cpo&vim
|
||||
@@ -72,8 +72,10 @@ function! ccomplete#Complete(findstart, base)
|
||||
" Split item in words, keep empty word after "." or "->".
|
||||
" "aa" -> ['aa'], "aa." -> ['aa', ''], "aa.bb" -> ['aa', 'bb'], etc.
|
||||
" We can't use split, because we need to skip nested [...].
|
||||
" "aa[...]" -> ['aa', '[...]'], "aa.bb[...]" -> ['aa', 'bb', '[...]'], etc.
|
||||
let items = []
|
||||
let s = 0
|
||||
let arrays = 0
|
||||
while 1
|
||||
let e = match(base, '\.\|->\|\[', s)
|
||||
if e < 0
|
||||
@@ -107,6 +109,7 @@ function! ccomplete#Complete(findstart, base)
|
||||
endwhile
|
||||
let e += 1
|
||||
call add(items, strpart(base, s, e - s))
|
||||
let arrays += 1
|
||||
let s = e
|
||||
endif
|
||||
endwhile
|
||||
@@ -161,15 +164,26 @@ function! ccomplete#Complete(findstart, base)
|
||||
endif
|
||||
endif
|
||||
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
|
||||
" Completing "var.", "var.something", etc.
|
||||
let res = s:Nextitem(strpart(line, 0, col), items[1:], 0, 1)
|
||||
endif
|
||||
endif
|
||||
|
||||
if len(items) == 1
|
||||
if len(items) == 1 || len(items) == arrays + 1
|
||||
" Only one part, no "." or "->": complete from tags file.
|
||||
let tags = taglist('^' . base)
|
||||
if len(items) == 1
|
||||
let tags = taglist('^' . base)
|
||||
else
|
||||
let tags = taglist('^' . items[0] . '$')
|
||||
endif
|
||||
|
||||
" Remove members, these can't appear without something in front.
|
||||
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
|
||||
|
||||
" 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[].
|
||||
let matches = []
|
||||
for l in qflist
|
||||
let memb = matchstr(l['text'], '[^\t]*')
|
||||
if memb =~ '^' . a:items[0]
|
||||
if memb =~ '^' . target
|
||||
" Skip matches local to another file.
|
||||
if match(l['text'], "\tfile:") < 0 || bufnr('%') == bufnr(matchstr(l['text'], '\t\zs[^\t]*'))
|
||||
let item = {'match': memb, 'tagline': l['text']}
|
||||
@@ -540,8 +567,8 @@ function! s:StructMembers(typename, items, all)
|
||||
endfor
|
||||
|
||||
if len(matches) > 0
|
||||
" Skip over [...] items
|
||||
let idx = 1
|
||||
" Skip over next [...] items
|
||||
let idx += 1
|
||||
while 1
|
||||
if idx >= len(a:items)
|
||||
return matches " No further items, return the result.
|
||||
|
@@ -4,7 +4,7 @@
|
||||
" plus CSS Speech Module <http://www.w3.org/TR/css3-speech/>
|
||||
" Maintainer: Kao, Wei-Ko(othree) ( othree AT gmail DOT com )
|
||||
" 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")
|
||||
|
||||
@@ -19,7 +19,6 @@ function! csscomplete#CompleteCSS(findstart, base)
|
||||
while start >= 0 && line[start - 1] =~ '\%(\k\|-\)'
|
||||
let start -= 1
|
||||
endwhile
|
||||
let b:after = line[compl_begin :]
|
||||
let b:compl_context = line[0:compl_begin]
|
||||
return start
|
||||
endif
|
||||
@@ -37,11 +36,14 @@ function! csscomplete#CompleteCSS(findstart, base)
|
||||
" 5. if @ complete at-rule
|
||||
" 6. if ! complete important
|
||||
if exists("b:compl_context")
|
||||
let line = getline('.')
|
||||
let compl_begin = col('.') - 2
|
||||
let after = line[compl_begin:]
|
||||
let line = b:compl_context
|
||||
let after = b:after
|
||||
unlet! b:compl_context
|
||||
else
|
||||
let line = a:base
|
||||
let after = ''
|
||||
endif
|
||||
|
||||
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
|
||||
"
|
||||
" 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
|
||||
" faster.
|
||||
@@ -618,7 +618,11 @@ func dist#ft#FTperl()
|
||||
setf perl
|
||||
return 1
|
||||
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
|
||||
return 1
|
||||
endif
|
||||
@@ -628,7 +632,7 @@ endfunc
|
||||
" Choose context, plaintex, or tex (LaTeX) based on these rules:
|
||||
" 1. Check the first line of the file for "%&<format>".
|
||||
" 2. Check the first 1000 non-comment lines for LaTeX or ConTeXt keywords.
|
||||
" 3. Default to "latex" or to g:tex_flavor, can be set in user's vimrc.
|
||||
" 3. Default to "plain" or to g:tex_flavor, can be set in user's vimrc.
|
||||
func dist#ft#FTtex()
|
||||
let firstline = getline(1)
|
||||
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
|
||||
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 !empty($VIM) && !filereadable($VIM.'/runtime/doc/nvim.txt')
|
||||
let ok = v:false
|
||||
|
@@ -37,7 +37,12 @@ endfunction
|
||||
|
||||
" Handler for s:system() function.
|
||||
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, '')
|
||||
elseif a:event ==# 'exit'
|
||||
let s:shell_error = a:data
|
||||
@@ -57,16 +62,15 @@ endfunction
|
||||
" Run a system command and timeout after 30 seconds.
|
||||
function! s:system(cmd, ...) abort
|
||||
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 opts = {
|
||||
\ 'ignore_stderr': a:0 > 1 ? a:2 : 0,
|
||||
\ 'output': '',
|
||||
\ 'stderr': '',
|
||||
\ 'on_stdout': function('s:system_handler'),
|
||||
\ 'on_stderr': 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)
|
||||
|
||||
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 jobstop(jobid)
|
||||
elseif s:shell_error != 0 && !ignore_error
|
||||
call health#report_error(printf("Command error (job=%d): `%s` (in %s)\nOutput: %s",
|
||||
\ jobid, s:shellify(a:cmd), string(getcwd()), opts.output))
|
||||
call health#report_error(printf("Command error (job=%d, exit code %d): `%s` (in %s)\nOutput: %s\nStderr: %s",
|
||||
\ jobid, s:shell_error, s:shellify(a:cmd), string(getcwd()), opts.output, opts.stderr))
|
||||
endif
|
||||
|
||||
return opts.output
|
||||
@@ -148,10 +152,10 @@ function! s:check_clipboard() abort
|
||||
endif
|
||||
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
|
||||
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)
|
||||
try
|
||||
let pypi_data = json_decode(pypi_response)
|
||||
@@ -289,22 +293,16 @@ function! s:check_python(version) abort
|
||||
|
||||
let [pyname, pythonx_errs] = provider#pythonx#Detect(a:version)
|
||||
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.')
|
||||
endif
|
||||
|
||||
if !empty(pyname)
|
||||
if exists('g:'.host_prog_var)
|
||||
let python_bin = exepath(pyname)
|
||||
endif
|
||||
let pyname = fnamemodify(pyname, ':t')
|
||||
elseif exists('g:'.host_prog_var)
|
||||
let python_bin = pyname
|
||||
endif
|
||||
|
||||
if !empty(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)
|
||||
call health#report_info(printf('`g:%s` is not set. Searching for '
|
||||
\ . '%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.', [
|
||||
\ printf('Create a virtualenv specifically '
|
||||
\ . '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)
|
||||
\ ])
|
||||
elseif !empty(venv)
|
||||
@@ -368,7 +366,7 @@ function! s:check_python(version) abort
|
||||
call health#report_warn('Your virtualenv is not set up optimally.', [
|
||||
\ printf('Create a virtualenv specifically '
|
||||
\ . '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)
|
||||
\ ])
|
||||
endif
|
||||
@@ -383,8 +381,10 @@ function! s:check_python(version) abort
|
||||
endif
|
||||
|
||||
" Check if $VIRTUAL_ENV is valid.
|
||||
if exists('$VIRTUAL_ENV')
|
||||
if !empty(pyname) && $VIRTUAL_ENV !=# matchstr(exepath(pyname), '^\V'.$VIRTUAL_ENV)
|
||||
if exists('$VIRTUAL_ENV') && !empty(python_bin)
|
||||
if $VIRTUAL_ENV ==# matchstr(python_bin, '^\V'.$VIRTUAL_ENV)
|
||||
call health#report_info('$VIRTUAL_ENV matches executable')
|
||||
else
|
||||
call health#report_warn(
|
||||
\ '$VIRTUAL_ENV exists but appears to be inactive. '
|
||||
\ . 'This could lead to unexpected results.',
|
||||
@@ -400,6 +400,8 @@ function! s:check_python(version) abort
|
||||
endfor
|
||||
endif
|
||||
|
||||
let pip = 'pip' . (a:version == 2 ? '' : '3')
|
||||
|
||||
if !empty(python_bin)
|
||||
let [pyversion, current, latest, status] = s:version_info(python_bin)
|
||||
if a:version != str2nr(pyversion)
|
||||
@@ -410,28 +412,36 @@ function! s:check_python(version) abort
|
||||
call health#report_warn('Python 3.3+ is recommended.')
|
||||
endif
|
||||
|
||||
call health#report_info('Python'.a:version.' version: ' . pyversion)
|
||||
call health#report_info('Python version: ' . pyversion)
|
||||
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))
|
||||
let [module_found, _msg] = provider#pythonx#CheckForModule(python_bin,
|
||||
\ 'pynvim', a:version)
|
||||
if status !=? '^outdated' && module_found
|
||||
" neovim module was not found, but pynvim was
|
||||
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
|
||||
else
|
||||
call health#report_info(printf('%s-neovim version: %s', pyname, current))
|
||||
call health#report_info(printf('pynvim version: %s', current))
|
||||
endif
|
||||
|
||||
if s:is_bad_response(current)
|
||||
call health#report_error(
|
||||
\ "Neovim Python client is not installed.\nError: ".current,
|
||||
\ ['Run in shell: pip' . a:version . ' install neovim'])
|
||||
\ "pynvim is not installed.\nError: ".current,
|
||||
\ ['Run in shell: '. pip .' install pynvim'])
|
||||
endif
|
||||
|
||||
if s:is_bad_response(latest)
|
||||
call health#report_warn('Could not contact PyPI to get latest version.')
|
||||
call health#report_error('HTTP request failed: '.latest)
|
||||
elseif s:is_bad_response(status)
|
||||
call health#report_warn(printf('Latest %s-neovim is NOT installed: %s',
|
||||
\ pyname, latest))
|
||||
call health#report_warn(printf('Latest pynvim is NOT installed: %s', latest))
|
||||
elseif !s:is_bad_response(current)
|
||||
call health#report_ok(printf('Latest %s-neovim is installed: %s',
|
||||
\ pyname, latest))
|
||||
call health#report_ok(printf('Latest pynvim is installed.'))
|
||||
endif
|
||||
endif
|
||||
|
||||
@@ -502,10 +512,10 @@ function! s:check_node() abort
|
||||
return
|
||||
endif
|
||||
|
||||
if !executable('node') || !executable('npm')
|
||||
if !executable('node') || (!executable('npm') && !executable('yarn'))
|
||||
call health#report_warn(
|
||||
\ '`node` and `npm` must be in $PATH.',
|
||||
\ ['Install Node.js and verify that `node` and `npm` commands work.'])
|
||||
\ '`node` and `npm` (or `yarn`) must be in $PATH.',
|
||||
\ ['Install Node.js and verify that `node` and `npm` (or `yarn`) commands work.'])
|
||||
return
|
||||
endif
|
||||
let node_v = get(split(s:system('node -v'), "\n"), 0, '')
|
||||
@@ -521,9 +531,9 @@ function! s:check_node() abort
|
||||
|
||||
let host = provider#node#Detect()
|
||||
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',
|
||||
\ 'Is the npm bin directory in $PATH?'])
|
||||
\ 'Run in shell (if you use yarn): yarn global add neovim'])
|
||||
return
|
||||
endif
|
||||
call health#report_info('Neovim node.js host: '. host)
|
||||
@@ -559,7 +569,7 @@ function! s:check_node() abort
|
||||
\ current_npm, latest_npm),
|
||||
\ ['Run in shell: npm install -g neovim'])
|
||||
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
|
||||
endfunction
|
||||
|
||||
|
@@ -1,5 +1,10 @@
|
||||
" 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:localfile_arg = v:true " Always use -l if possible. #6683
|
||||
let s:section_arg = '-s'
|
||||
@@ -144,8 +149,9 @@ function! s:system(cmd, ...) abort
|
||||
endfunction
|
||||
|
||||
function! s:get_page(path) abort
|
||||
" Respect $MANWIDTH or default to window width.
|
||||
let manwidth = empty($MANWIDTH) ? winwidth(0) : $MANWIDTH
|
||||
" Disable hard-wrap by using a big $MANWIDTH (max 1000 on some systems #9065).
|
||||
" 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).
|
||||
" http://comments.gmane.org/gmane.editors.vim.devel/29085
|
||||
" 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*$'
|
||||
silent keepjumps 1delete _
|
||||
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()
|
||||
setlocal filetype=man
|
||||
endfunction
|
||||
@@ -212,9 +223,9 @@ function! man#extract_sect_and_name_ref(ref) abort
|
||||
endfunction
|
||||
|
||||
function! s:get_path(sect, name) abort
|
||||
" Some man implementations (OpenBSD) return all available paths from the
|
||||
" search command, so we get() the first one. #8341
|
||||
if empty(a:sect)
|
||||
" Some man implementations (OpenBSD) return all available paths from the
|
||||
" search command, so we get() the first one. #8341
|
||||
return substitute(get(split(s:system(['man', s:find_arg, a:name])), 0, ''), '\n\+$', '', '')
|
||||
endif
|
||||
" '-s' flag handles:
|
||||
@@ -222,7 +233,7 @@ function! s:get_path(sect, name) abort
|
||||
" - sections starting with '-'
|
||||
" - 3pcap section (found on macOS)
|
||||
" - 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
|
||||
|
||||
function! s:verify_exists(sect, name) abort
|
||||
@@ -381,15 +392,17 @@ function! man#init_pager() abort
|
||||
keepjumps 1
|
||||
endif
|
||||
lua require("man").highlight_man_page()
|
||||
" This is not perfect. See `man glDrawArraysInstanced`. Since the title is
|
||||
" all caps it is impossible to tell what the original capitilization was.
|
||||
" Guess the ref from the heading (which is usually uppercase, so we cannot
|
||||
" know the correct casing, cf. `man glDrawArraysInstanced`).
|
||||
let ref = substitute(matchstr(getline(1), '^[^)]\+)'), ' ', '_', 'g')
|
||||
try
|
||||
let b:man_sect = man#extract_sect_and_name_ref(ref)[0]
|
||||
catch
|
||||
let b:man_sect = ''
|
||||
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
|
||||
|
||||
call s:init()
|
||||
|
@@ -605,13 +605,10 @@ function msgpack#eval(s, special_objs) abort
|
||||
call add(expr, dec)
|
||||
endif
|
||||
endif
|
||||
elseif s =~# '-\?\%(inf\|nan\)'
|
||||
if s[0] is# '-'
|
||||
call add(expr, '-')
|
||||
let s = s[1:]
|
||||
endif
|
||||
call add(expr, s:MSGPACK_SPECIAL_OBJECTS[s[0:2]])
|
||||
let s = s[3:]
|
||||
elseif s =~# '\v^\-%(inf|nan)'
|
||||
call add(expr, '-')
|
||||
call add(expr, s:MSGPACK_SPECIAL_OBJECTS[s[1:3]])
|
||||
let s = s[4:]
|
||||
elseif stridx('="+', s[0]) != -1
|
||||
let match = matchlist(s, '\v\C^(\=|\+\((\-?\d+)\)|)(\"%(\\.|[^\\"]+)*\")')
|
||||
if empty(match)
|
||||
|
@@ -3,7 +3,7 @@
|
||||
" Maintainer: Dávid Szabó ( complex857 AT gmail DOT com )
|
||||
" Previous Maintainer: Mikolaj Machowski ( mikmach AT wp DOT pl )
|
||||
" URL: https://github.com/shawncplus/phpcomplete.vim
|
||||
" Last Change: 2016 Oct 10
|
||||
" Last Change: 2018 Oct 10
|
||||
"
|
||||
" OPTIONS:
|
||||
"
|
||||
@@ -146,6 +146,8 @@ function! phpcomplete#CompletePHP(findstart, base) " {{{
|
||||
end
|
||||
|
||||
try
|
||||
let eventignore = &eventignore
|
||||
let &eventignore = 'all'
|
||||
let winheight = winheight(0)
|
||||
let winnr = winnr()
|
||||
|
||||
@@ -216,6 +218,7 @@ function! phpcomplete#CompletePHP(findstart, base) " {{{
|
||||
endif
|
||||
finally
|
||||
silent! exec winnr.'resize '.winheight
|
||||
let &eventignore = eventignore
|
||||
endtry
|
||||
endfunction
|
||||
" }}}
|
||||
@@ -1393,23 +1396,28 @@ function! phpcomplete#GetCallChainReturnType(classname_candidate, class_candidat
|
||||
for classstructure in classcontents
|
||||
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)
|
||||
if doc_str != ''
|
||||
let return_type_hint = phpcomplete#GetFunctionReturnTypeHint(split(classstructure.content, '\n'), 'function\s\+&\?'.method.'\>')
|
||||
if doc_str != '' || return_type_hint != ''
|
||||
break
|
||||
endif
|
||||
endfor
|
||||
if doc_str != ''
|
||||
if doc_str != '' || return_type_hint != ''
|
||||
let docblock = phpcomplete#ParseDocBlock(doc_str)
|
||||
if has_key(docblock.return, 'type') || has_key(docblock.var, 'type') || len(docblock.properties) > 0
|
||||
let type = has_key(docblock.return, 'type') ? docblock.return.type : has_key(docblock.var, 'type') ? docblock.var.type : ''
|
||||
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 : ''
|
||||
|
||||
if type == ''
|
||||
for property in docblock.properties
|
||||
if property.description =~? method
|
||||
let type = property.type
|
||||
break
|
||||
endif
|
||||
endfor
|
||||
endif
|
||||
if type == ''
|
||||
for property in docblock.properties
|
||||
if property.description =~? method
|
||||
let type = property.type
|
||||
break
|
||||
endif
|
||||
endfor
|
||||
endif
|
||||
else
|
||||
let type = return_type_hint
|
||||
end
|
||||
|
||||
" there's a namespace in the type, threat the type as FQCN
|
||||
if type =~ '\\'
|
||||
@@ -1483,7 +1491,7 @@ function! phpcomplete#GetMethodStack(line) " {{{
|
||||
continue
|
||||
endif
|
||||
|
||||
" if it's looks like a string
|
||||
" if it looks like a string
|
||||
if current_char == "'" || current_char == '"'
|
||||
" and it is not escaped
|
||||
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)
|
||||
let file_lines = readfile(function_file)
|
||||
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)
|
||||
if has_key(docblock.return, 'type')
|
||||
let classname_candidate = docblock.return.type
|
||||
let type = has_key(docblock.return, 'type') ? docblock.return.type : return_type_hint
|
||||
if type != ''
|
||||
let classname_candidate = type
|
||||
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
|
||||
|
||||
@@ -1821,9 +1831,11 @@ function! phpcomplete#GetClassName(start_line, context, current_namespace, impor
|
||||
elseif function_file != '' && filereadable(function_file)
|
||||
let file_lines = readfile(function_file)
|
||||
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)
|
||||
if has_key(docblock.return, 'type')
|
||||
let classname_candidate = docblock.return.type
|
||||
let type = has_key(docblock.return, 'type') ? docblock.return.type : return_type_hint
|
||||
if type != ''
|
||||
let classname_candidate = type
|
||||
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
|
||||
let [classname_candidate, class_candidate_namespace] = phpcomplete#ExpandClassName(classname_candidate, class_candidate_namespace, function_imports)
|
||||
@@ -2413,6 +2425,44 @@ function! phpcomplete#ParseDocBlock(docblock) " {{{
|
||||
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) " {{{
|
||||
if 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
|
||||
" they can be either classes, interfaces or namespaces, no other thing is importable in php
|
||||
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 =~ '\\'
|
||||
let patched_ctags_detected = 0
|
||||
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'
|
||||
return ''
|
||||
endif
|
||||
|
||||
let s:copy = get(g:clipboard, 'copy', { '+': 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)
|
||||
@@ -71,18 +72,24 @@ function! provider#clipboard#Executable() abort
|
||||
let s:paste['*'] = s:paste['+']
|
||||
let s:cache_enabled = 0
|
||||
return 'pbcopy'
|
||||
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 exists('$WAYLAND_DISPLAY') && executable('wl-copy') && executable('wl-paste')
|
||||
let s:copy['+'] = 'wl-copy --foreground'
|
||||
let s:paste['+'] = 'wl-paste --no-newline'
|
||||
let s:copy['*'] = 'wl-copy --foreground --primary'
|
||||
let s:paste['*'] = 'wl-paste --no-newline --primary'
|
||||
return 'wl-copy'
|
||||
elseif exists('$DISPLAY') && executable('xclip')
|
||||
let s:copy['+'] = 'xclip -quiet -i -selection clipboard'
|
||||
let s:paste['+'] = 'xclip -o -selection clipboard'
|
||||
let s:copy['*'] = 'xclip -quiet -i -selection primary'
|
||||
let s:paste['*'] = 'xclip -o -selection primary'
|
||||
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')
|
||||
let s:copy['+'] = 'lemonade copy'
|
||||
let s:paste['+'] = 'lemonade paste'
|
||||
@@ -95,9 +102,9 @@ function! provider#clipboard#Executable() abort
|
||||
let s:copy['*'] = s:copy['+']
|
||||
let s:paste['*'] = s:paste['+']
|
||||
return 'doitclient'
|
||||
elseif executable('win32yank')
|
||||
let s:copy['+'] = 'win32yank -i --crlf'
|
||||
let s:paste['+'] = 'win32yank -o --lf'
|
||||
elseif executable('win32yank.exe')
|
||||
let s:copy['+'] = 'win32yank.exe -i --crlf'
|
||||
let s:paste['+'] = 'win32yank.exe -o --lf'
|
||||
let s:copy['*'] = s:copy['+']
|
||||
let s:paste['*'] = s:paste['+']
|
||||
return 'win32yank'
|
||||
@@ -121,7 +128,9 @@ if empty(provider#clipboard#Executable())
|
||||
endif
|
||||
|
||||
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
|
||||
end
|
||||
return s:try_cmd(s:paste[a:reg])
|
||||
@@ -135,6 +144,12 @@ function! s:clipboard.set(lines, regtype, reg) abort
|
||||
end
|
||||
return 0
|
||||
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
|
||||
call s:try_cmd(s:copy[a:reg], a:lines)
|
||||
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)))
|
||||
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+
|
||||
" Return 1 if it is supported
|
||||
" Return 0 otherwise
|
||||
@@ -39,20 +49,51 @@ endfunction
|
||||
|
||||
function! provider#node#Detect() abort
|
||||
if exists('g:node_host_prog')
|
||||
return g:node_host_prog
|
||||
endif
|
||||
let global_modules = get(split(system('npm root -g'), "\n"), 0, '')
|
||||
if v:shell_error || !isdirectory(global_modules)
|
||||
return ''
|
||||
return expand(g:node_host_prog)
|
||||
endif
|
||||
if !s:is_minimum_version(v:null, 6, 0)
|
||||
return ''
|
||||
endif
|
||||
let entry_point = glob(global_modules . '/neovim/bin/cli.js')
|
||||
if !filereadable(entry_point)
|
||||
return ''
|
||||
|
||||
let npm_opts = {}
|
||||
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
|
||||
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
|
||||
|
||||
function! provider#node#Prog() abort
|
||||
|
@@ -24,13 +24,13 @@ endfunction
|
||||
function! provider#pythonx#Detect(major_ver) abort
|
||||
if a:major_ver == 2
|
||||
if exists('g:python_host_prog')
|
||||
return [g:python_host_prog, '']
|
||||
return [expand(g:python_host_prog), '']
|
||||
else
|
||||
let progs = ['python2', 'python2.7', 'python2.6', 'python']
|
||||
endif
|
||||
else
|
||||
if exists('g:python3_host_prog')
|
||||
return [g:python3_host_prog, '']
|
||||
return [expand(g:python3_host_prog), '']
|
||||
else
|
||||
let progs = ['python3', 'python3.7', 'python3.6', 'python3.5',
|
||||
\ 'python3.4', 'python3.3', 'python']
|
||||
@@ -40,7 +40,7 @@ function! provider#pythonx#Detect(major_ver) abort
|
||||
let errors = []
|
||||
|
||||
for prog in progs
|
||||
let [result, err] = s:check_interpreter(prog, a:major_ver)
|
||||
let [result, err] = provider#pythonx#CheckForModule(prog, 'neovim', a:major_ver)
|
||||
if result
|
||||
return [prog, err]
|
||||
endif
|
||||
@@ -54,46 +54,53 @@ function! provider#pythonx#Detect(major_ver) abort
|
||||
\ . ":\n" . join(errors, "\n")]
|
||||
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)
|
||||
if prog_path ==# ''
|
||||
return [0, a:prog . ' not found in search path or not executable.']
|
||||
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.
|
||||
" Return codes:
|
||||
" 0 Neovim module can be loaded.
|
||||
" 2 Neovim module cannot be loaded.
|
||||
" Try to load module, and output Python version.
|
||||
" Exit codes:
|
||||
" 0 module can be loaded.
|
||||
" 2 module cannot be loaded.
|
||||
" Otherwise something else went wrong (e.g. 1 or 127).
|
||||
let prog_ver = system([ a:prog , '-c' ,
|
||||
\ '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))'
|
||||
\ ])
|
||||
let [prog_exitcode, prog_version] = s:import_module(a:prog, a:module)
|
||||
|
||||
if v:shell_error == 2 || v:shell_error == 0
|
||||
if prog_exitcode == 2 || prog_exitcode == 0
|
||||
" Check version only for expected return codes.
|
||||
if prog_ver !~ '^' . a:major_ver
|
||||
return [0, prog_path . ' is Python ' . prog_ver . ' and cannot provide Python '
|
||||
\ . a:major_ver . '.']
|
||||
elseif prog_ver =~ '^' . a:major_ver && prog_ver < min_version
|
||||
return [0, prog_path . ' is Python ' . prog_ver . ' and cannot provide Python >= '
|
||||
if prog_version !~ '^' . a:major_version
|
||||
return [0, prog_path . ' is Python ' . prog_version . ' and cannot provide Python '
|
||||
\ . a:major_version . '.']
|
||||
elseif prog_version =~ '^' . a:major_version && prog_version < min_version
|
||||
return [0, prog_path . ' is Python ' . prog_version . ' and cannot provide Python >= '
|
||||
\ . min_version . '.']
|
||||
endif
|
||||
endif
|
||||
|
||||
if v:shell_error == 2
|
||||
return [0, prog_path.' does not have the "neovim" module. :help provider-python']
|
||||
elseif v:shell_error == 127
|
||||
if prog_exitcode == 2
|
||||
return [0, prog_path.' does not have the "' . a:module . '" module. :help provider-python']
|
||||
elseif prog_exitcode == 127
|
||||
" This can happen with pyenv's shims.
|
||||
return [0, prog_path . ' does not exist: ' . prog_ver]
|
||||
elseif v:shell_error
|
||||
return [0, prog_path . ' does not exist: ' . prog_version]
|
||||
elseif prog_exitcode
|
||||
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']
|
||||
endif
|
||||
|
||||
|
@@ -5,11 +5,7 @@ endif
|
||||
let g:loaded_ruby_provider = 1
|
||||
|
||||
function! provider#ruby#Detect() abort
|
||||
if exists("g:ruby_host_prog")
|
||||
return g:ruby_host_prog
|
||||
else
|
||||
return has('win32') ? exepath('neovim-ruby-host.bat') : exepath('neovim-ruby-host')
|
||||
end
|
||||
return s:prog
|
||||
endfunction
|
||||
|
||||
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))
|
||||
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:prog = provider#ruby#Detect()
|
||||
let s:prog = s:detect()
|
||||
let s:plugin_path = expand('<sfile>:p:h') . '/script_host.rb'
|
||||
|
||||
if empty(s:prog)
|
||||
|
@@ -114,7 +114,7 @@ function! s:RegistrationCommands(host) abort
|
||||
let host_id = a:host.'-registration-clone'
|
||||
call remote#host#RegisterClone(host_id, 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 = uniq(sort(paths))
|
||||
if empty(paths)
|
||||
|
@@ -20,6 +20,7 @@ function! spellfile#LoadFile(lang)
|
||||
endif
|
||||
return
|
||||
endif
|
||||
let lang = tolower(a:lang)
|
||||
|
||||
" If the URL changes we try all files again.
|
||||
if s:spellfile_URL != g:spellfile_URL
|
||||
@@ -28,13 +29,13 @@ function! spellfile#LoadFile(lang)
|
||||
endif
|
||||
|
||||
" I will say this only once!
|
||||
if has_key(s:donedict, a:lang . &enc)
|
||||
if has_key(s:donedict, lang . &enc)
|
||||
if &verbose
|
||||
echomsg 'spellfile#LoadFile(): Tried this language/encoding before.'
|
||||
endif
|
||||
return
|
||||
endif
|
||||
let s:donedict[a:lang . &enc] = 1
|
||||
let s:donedict[lang . &enc] = 1
|
||||
|
||||
" Find spell directories we can write in.
|
||||
let [dirlist, dirchoices] = spellfile#GetDirChoices()
|
||||
@@ -94,7 +95,7 @@ function! spellfile#LoadFile(lang)
|
||||
let newbufnr = winbufnr(0)
|
||||
endif
|
||||
|
||||
let fname = a:lang . '.ascii.spl'
|
||||
let fname = lang . '.ascii.spl'
|
||||
echo 'Could not find it, trying ' . fname . '...'
|
||||
call spellfile#Nread(fname)
|
||||
if getline(2) !~ 'VIMspell'
|
||||
|
@@ -152,10 +152,12 @@ fun! tar#Browse(tarfile)
|
||||
" assuming cygwin
|
||||
let tarfile=substitute(system("cygpath -u ".shellescape(tarfile,0)),'\n$','','e')
|
||||
endif
|
||||
|
||||
let curlast= line("$")
|
||||
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." - ")
|
||||
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'
|
||||
" 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." - "
|
||||
@@ -287,12 +289,14 @@ fun! tar#Read(fname,mode)
|
||||
else
|
||||
let tar_secure= " "
|
||||
endif
|
||||
|
||||
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)
|
||||
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\)$'
|
||||
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))
|
||||
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$'
|
||||
" 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
|
||||
@@ -389,6 +393,8 @@ fun! tar#Write(fname)
|
||||
let tarfile = substitute(b:tarfile,'tarfile:\(.\{-}\)::.*$','\1','')
|
||||
let fname = substitute(b:tarfile,'tarfile:.\{-}::\(.*\)$','\1','')
|
||||
|
||||
let gzip_command = s:get_gzip_command(tarfile)
|
||||
|
||||
" handle compressed archives
|
||||
if tarfile =~# '\.bz2'
|
||||
call system("bzip2 -d -- ".shellescape(tarfile,0))
|
||||
@@ -396,12 +402,12 @@ fun! tar#Write(fname)
|
||||
let compress= "bzip2 -- ".shellescape(tarfile,0)
|
||||
" call Decho("compress<".compress.">")
|
||||
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 compress= "gzip -- ".shellescape(tarfile,0)
|
||||
" call Decho("compress<".compress.">")
|
||||
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 compress= "gzip -- ".shellescape(tarfile,0)
|
||||
let tgz = 1
|
||||
@@ -581,7 +587,10 @@ fun! tar#Vimuntar(...)
|
||||
|
||||
" if necessary, decompress the tarball; then, extract it
|
||||
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)
|
||||
elseif executable("gzip")
|
||||
silent exe "!gzip -d ".shellescape(tartail)
|
||||
@@ -619,6 +628,28 @@ fun! tar#Vimuntar(...)
|
||||
" call Dret("tar#Vimuntar")
|
||||
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
|
||||
let &cpo= s:keepcpo
|
||||
|
@@ -77,15 +77,6 @@ function! tutor#TutorFolds()
|
||||
endif
|
||||
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
|
||||
|
||||
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.
|
||||
|
||||
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",
|
||||
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,
|
||||
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?
|
||||
- Is "g:colors_name" set to a meaningful value? In case of doubt you can do
|
||||
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
|
||||
|
||||
# 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
|
||||
|
||||
noerrors:
|
||||
|
File diff suppressed because it is too large
Load Diff
@@ -313,4 +313,4 @@ There is one known minor bug,
|
||||
|
||||
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
|
||||
|
||||
|
||||
Automatic commands *autocommand*
|
||||
Automatic commands *autocmd* *autocommand*
|
||||
|
||||
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
|
||||
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
|
||||
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.
|
||||
@@ -44,6 +44,8 @@ effects. Be careful not to destroy your text.
|
||||
Add {cmd} to the list of commands that Vim will
|
||||
execute automatically on {event} for a file matching
|
||||
{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,
|
||||
so that the autocommands execute in the order in which
|
||||
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: >
|
||||
|
||||
augroup vimrc
|
||||
autocmd! " Remove all vimrc autocommands
|
||||
" Remove all vimrc autocommands
|
||||
autocmd!
|
||||
au BufNewFile,BufRead *.html so <sfile>:h/html.vim
|
||||
augroup END
|
||||
|
||||
@@ -133,6 +136,8 @@ prompt. When one command outputs two messages this can happen anyway.
|
||||
plugins, syntax highlighting, etc.
|
||||
|
||||
: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
|
||||
group, it breaks plugins, syntax highlighting, etc.
|
||||
|
||||
@@ -273,14 +278,16 @@ Name triggered by ~
|
||||
|VimEnter| after doing all the startup stuff
|
||||
|GUIEnter| after starting the GUI successfully
|
||||
|GUIFailed| after starting the GUI failed
|
||||
|TermResponse| after the terminal response to |t_RV| is received
|
||||
|QuitPre| when using `:quit`, before deciding whether to quit
|
||||
|TermResponse| after the terminal response to t_RV is received
|
||||
|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
|
||||
|VimLeave| before exiting Nvim, after writing the shada file
|
||||
|VimResume| after Nvim is resumed
|
||||
|VimSuspend| before Nvim is suspended
|
||||
|
||||
Various
|
||||
|DiffUpdated| after diffs have been updated
|
||||
|DirChanged| after the |current-directory| was changed
|
||||
|
||||
|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|
|
||||
|
||||
|VimResized| after the Vim window size changed
|
||||
|FocusGained| Vim got input focus
|
||||
|FocusLost| Vim lost input focus
|
||||
|FocusGained| Nvim got focus
|
||||
|FocusLost| Nvim lost focus
|
||||
|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
|
||||
|CursorMoved| the cursor was moved in Normal mode
|
||||
@@ -312,6 +319,7 @@ Name triggered by ~
|
||||
|TabNew| when creating a new tab page
|
||||
|TabNewEntered| after entering a new tab page
|
||||
|TabClosed| after closing a tab page
|
||||
|CmdlineChanged| after a change was made to the command-line text
|
||||
|CmdlineEnter| after entering cmdline mode
|
||||
|CmdlineLeave| before leaving cmdline mode
|
||||
|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
|
||||
when popup menu visible
|
||||
|
||||
|ColorSchemePre| before loading a color scheme
|
||||
|ColorScheme| after loading a color scheme
|
||||
|
||||
|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.
|
||||
Sets these |v:event| keys:
|
||||
info
|
||||
See |nvim_get_chan_info| for the format of the
|
||||
info Dictionary.
|
||||
See |nvim_get_chan_info()| for the format of
|
||||
the info Dictionary.
|
||||
*ChanOpen*
|
||||
ChanOpen Just after a channel was opened.
|
||||
Sets these |v:event| keys:
|
||||
info
|
||||
See |nvim_get_chan_info| for the format of the
|
||||
info Dictionary.
|
||||
See |nvim_get_chan_info()| for the format of
|
||||
the info Dictionary.
|
||||
*CmdUndefined*
|
||||
CmdUndefined When a user command is used but it isn't
|
||||
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
|
||||
always define the user command and have it
|
||||
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 After moving the cursor to the command line,
|
||||
where the user can type a command or search
|
||||
string.
|
||||
<afile> is set to a single character,
|
||||
indicating the type of command-line.
|
||||
|cmdline-char|
|
||||
CmdlineEnter After entering the command-line (including
|
||||
non-interactive use of ":" in a mapping: use
|
||||
|<Cmd>| instead to avoid this).
|
||||
<afile> is set to the |cmdline-char|.
|
||||
Sets these |v:event| keys:
|
||||
cmdlevel
|
||||
cmdtype
|
||||
*CmdlineLeave*
|
||||
CmdlineLeave Before leaving the command line.
|
||||
<afile> is set to a single character,
|
||||
indicating the type of command-line.
|
||||
|cmdline-char|
|
||||
CmdlineLeave Before leaving the command-line (including
|
||||
non-interactive use of ":" in a mapping: use
|
||||
|<Cmd>| instead to avoid this).
|
||||
<afile> is set to the |cmdline-char|.
|
||||
Sets these |v:event| keys:
|
||||
abort (mutable)
|
||||
cmdlevel
|
||||
@@ -558,6 +570,10 @@ ColorScheme After loading a color scheme. |:colorscheme|
|
||||
set, and <amatch> for the new colorscheme
|
||||
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 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.
|
||||
Not triggered when the popup menu is visible.
|
||||
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 After the |current-directory| was changed.
|
||||
Sets these |v:event| keys:
|
||||
@@ -646,6 +667,14 @@ FileChangedRO Before making the first change to a read-only
|
||||
*E881*
|
||||
If the number of lines changes saving for undo
|
||||
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 When Vim notices that the modification time of
|
||||
a file has changed since editing started.
|
||||
@@ -735,14 +764,10 @@ FilterWritePre Before writing a file for a filter command or
|
||||
filter command.
|
||||
Not triggered when 'shelltemp' is off.
|
||||
*FocusGained*
|
||||
FocusGained When Vim got input focus. Only for the GUI
|
||||
version and a few console versions where this
|
||||
can be detected.
|
||||
FocusGained Nvim got focus.
|
||||
*FocusLost*
|
||||
FocusLost When Vim lost input focus. Only for the GUI
|
||||
version and a few console versions where this
|
||||
can be detected. May also happen when a
|
||||
dialog pops up.
|
||||
FocusLost Nvim lost focus. Also (potentially) when
|
||||
a GUI dialog pops up.
|
||||
*FuncUndefined*
|
||||
FuncUndefined When a user function is used but it isn't
|
||||
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
|
||||
triggering this autocommand.
|
||||
|
||||
When using |:set| in the autocommand the event
|
||||
is not triggered again.
|
||||
|
||||
*QuickFixCmdPre*
|
||||
QuickFixCmdPre Before a quickfix command is run (|:make|,
|
||||
|: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
|
||||
non-essential window if the current window is
|
||||
the last ordinary window.
|
||||
Also see |ExitPre|.
|
||||
*RemoteReply*
|
||||
RemoteReply When a reply from a Vim that functions as
|
||||
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,
|
||||
change a buffer name or change directory
|
||||
here.
|
||||
{only available with the +eval feature}
|
||||
*Syntax*
|
||||
Syntax When the 'syntax' option has been set. The
|
||||
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
|
||||
used to configure the terminal buffer.
|
||||
*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|
|
||||
can be used to do things depending on the
|
||||
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
|
||||
autocommands that are only executed with
|
||||
":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 When the user presses the same key 42 times.
|
||||
Just kidding! :-)
|
||||
@@ -1041,9 +1075,10 @@ WinEnter After entering another window. Not done for
|
||||
If the window is for another buffer, Vim
|
||||
executes the BufEnter autocommands after the
|
||||
WinEnter autocommands.
|
||||
Note: When using ":split fname" the WinEnter
|
||||
event is triggered after the split but before
|
||||
the file "fname" is loaded.
|
||||
Note: For split and tabpage commands the
|
||||
WinEnter event is triggered after the split
|
||||
or tab command but before the file is loaded.
|
||||
|
||||
*WinLeave*
|
||||
WinLeave Before leaving a window. If the window to be
|
||||
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
|
||||
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
|
||||
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").
|
||||
|
||||
*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.
|
||||
Remove the indent and insert up to two spaces (see
|
||||
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.
|
||||
|
||||
*v_J*
|
||||
@@ -416,7 +416,7 @@ This depends on the 'nrformats' option:
|
||||
|
||||
For decimals a leading negative sign is considered for incrementing or
|
||||
decrementing, for binary, octal and hex values, it won't be considered. To
|
||||
ignore the sign Visually select the number before using CTRL-A or CTRL-X.
|
||||
ignore the sign Visually select the number before using CTRL-A or CTRL-X.
|
||||
|
||||
For numbers with leading zeros (including all octal and hexadecimal numbers),
|
||||
Vim preserves the number of characters in the number when possible. CTRL-A on
|
||||
@@ -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
|
||||
'#' 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).
|
||||
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
|
||||
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-Y to scroll the screen down
|
||||
|
||||
*:s_e*
|
||||
[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
|
||||
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
|
||||
Interrupted
|
||||
|
||||
*:s_g*
|
||||
[g] Replace all occurrences in the line. Without this argument,
|
||||
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]
|
||||
argument switches it off.
|
||||
|
||||
*:s_i*
|
||||
[i] Ignore case for the pattern. The 'ignorecase' and 'smartcase' options
|
||||
are not used.
|
||||
|
||||
*:s_I*
|
||||
[I] Don't ignore case for the pattern. The 'ignorecase' and 'smartcase'
|
||||
options are not used.
|
||||
|
||||
*:s_n*
|
||||
[n] Report the number of matches, do not actually substitute. The [c]
|
||||
flag is ignored. The matches are reported as if 'report' is zero.
|
||||
Useful to |count-items|.
|
||||
If \= |sub-replace-expression| is used, the expression will be
|
||||
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`
|
||||
works the same way as `:~`: When the search pattern is empty, use 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 ":, "., "%
|
||||
6. alternate buffer register "#
|
||||
7. the expression register "=
|
||||
8. The selection and drop registers "*, "+ and "~
|
||||
8. The selection registers "* and "+
|
||||
9. The black hole 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
|
||||
register.
|
||||
|
||||
8. Selection and drop registers "*, "+ and "~
|
||||
8. Selection registers "* and "+
|
||||
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
|
||||
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
|
||||
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*
|
||||
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
|
||||
@@ -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
|
||||
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.
|
||||
The |rpc| protocol, based on the msgpack-rpc standard, enables nvim and the
|
||||
process at the other end to send remote calls and events to each other.
|
||||
Additionally, the builtin |terminal-emulator|, is implemented on top of PTY
|
||||
channels.
|
||||
The builtin |terminal-emulator| is also implemented on top of PTY 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*
|
||||
@@ -64,8 +69,8 @@ be raised.
|
||||
|
||||
- The arguments passed to the callback function are:
|
||||
|
||||
0: The channel id
|
||||
1: the raw data read from the channel, formatted as a |readfile()|-style
|
||||
0: |channel-id|
|
||||
1: Raw data read from the channel, formatted as a |readfile()|-style
|
||||
list. If EOF occured, a single empty string `['']` will be passed in.
|
||||
Note that the items in this list do not directly correspond to actual
|
||||
lines in the output. See |channel-lines|
|
||||
@@ -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
|
||||
used as a channel. See also |--embed|.
|
||||
|
||||
Call |stdioopen()| during |startup| to open the stdio channel as channel-id 1.
|
||||
Nvim's stderr is always available as channel-id 2 (|v:stderr| to be explicit),
|
||||
a write-only bytes channel.
|
||||
Call |stdioopen()| during |startup| to open the stdio channel as |channel-id| 1.
|
||||
Nvim's stderr is always available as |v:stderr|, a write-only bytes channel.
|
||||
|
||||
Example: >
|
||||
func! OnEvent(id, data, event)
|
||||
|
@@ -4,8 +4,8 @@
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
|
||||
|
||||
*Cmdline-mode* *Command-line-mode*
|
||||
Command-line mode *Cmdline* *Command-line* *mode-cmdline* *:*
|
||||
*Cmdline-mode* *Command-line-mode* *Cmdline*
|
||||
Command-line mode *cmdline* *Command-line* *mode-cmdline* *:*
|
||||
|
||||
Command-line mode is used to enter Ex commands (":"), search patterns
|
||||
("/" 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-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-L *c_CTRL-R_CTRL-L* *c_<C-R>_<C-L>*
|
||||
Insert the object under the cursor:
|
||||
CTRL-F the Filename under the cursor
|
||||
CTRL-P the Filename under the cursor, expanded with
|
||||
'path' as in |gf|
|
||||
CTRL-W the Word under the cursor
|
||||
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
|
||||
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-O* *c_<C-R>_<C-O>*
|
||||
CTRL-R CTRL-R {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-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-L}
|
||||
Insert register or object under the cursor. Works like
|
||||
|c_CTRL-R| but inserts the text literally. For example, if
|
||||
register a contains "xy^Hz" (where ^H is a backspace),
|
||||
@@ -210,7 +212,7 @@ CTRL-\ e {expr} *c_CTRL-\_e*
|
||||
|
||||
*c_CTRL-Y*
|
||||
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.
|
||||
|
||||
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
|
||||
again (wrap around).
|
||||
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*
|
||||
CTRL-N After using 'wildchar' which got multiple matches, go to next
|
||||
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
|
||||
previous match. Otherwise recall older command-line from
|
||||
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: >
|
||||
:set ai "set 'autoindent' option
|
||||
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
|
||||
argument. This is mentioned where the command is explained.
|
||||
":map" command and a few others (mainly commands that expect expressions)
|
||||
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*
|
||||
'|' 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!
|
||||
<cword> is replaced with the word under the cursor (like |star|)
|
||||
<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
|
||||
|gf| uses)
|
||||
<afile> When executing autocommands, is replaced with the file name
|
||||
@@ -834,7 +882,8 @@ These modifiers can be given, in this order:
|
||||
directory.
|
||||
:. Reduce file name to be relative to current directory, if
|
||||
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 ":~:.".
|
||||
:h Head of the file name (the last component and any separators
|
||||
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()|
|
||||
- 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*
|
||||
3.5 Obtaining Microsoft Debugging Tools ~
|
||||
|
||||
The Debugging Tools for Windows (including WinDbg) can be downloaded from
|
||||
http://www.microsoft.com/whdc/devtools/debugging/default.mspx
|
||||
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
|
||||
Visual Studio 2017 Community Edition can be downloaded for free from:
|
||||
https://visualstudio.microsoft.com/downloads/
|
||||
|
||||
=========================================================================
|
||||
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()|.
|
||||
*highlight_exists()* Obsolete name for |hlexists()|.
|
||||
*highlightID()* Obsolete name for |hlID()|.
|
||||
*inputdialog()* Use |input()| instead.
|
||||
*jobclose()* Obsolete name for |chanclose()|
|
||||
*jobsend()* Obsolete name for |chansend()|
|
||||
*last_buffer_nr()* Obsolete name for bufnr("$").
|
||||
|
||||
Modifiers ~
|
||||
*cpo-<*
|
||||
*:menu-<special>*
|
||||
*:menu-special* <> notation is always enabled. |cpo-<|
|
||||
*:menu-special* <> notation is always enabled.
|
||||
*:map-<special>*
|
||||
*:map-special* <> notation is always enabled. |cpo-<|
|
||||
*:map-special* <> notation is always enabled.
|
||||
|
||||
Normal commands ~
|
||||
*]f*
|
||||
|
@@ -4,56 +4,37 @@
|
||||
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
|
||||
|
||||
See src/nvim/README.md for an overview of the source code.
|
||||
|
||||
Type |gO| to see the table of contents.
|
||||
|
||||
==============================================================================
|
||||
Design goals *design-goals*
|
||||
|
||||
Most important things come first (roughly).
|
||||
|
||||
Note that some items conflict; this is intentional. A balance must be found.
|
||||
Most important things come first (roughly). Some items conflict; this is
|
||||
intentional. A balance must be found.
|
||||
|
||||
|
||||
NVIM IS... IMPROVED *design-improved*
|
||||
|
||||
The IMproved bits of Vim should make it a better Vi, without becoming a
|
||||
completely different editor. Extensions are done with a "Vi spirit".
|
||||
- Use the keyboard as much as feasible. The mouse requires a third hand,
|
||||
which we don't have. Many terminals don't have a mouse.
|
||||
- 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.
|
||||
The Neo bits of Nvim should make it a better Vim, without becoming a
|
||||
completely different editor.
|
||||
- In matters of taste, prefer Vim/Unix tradition. If there is no relevant
|
||||
Vim/Unix tradition, consider the "common case".
|
||||
- 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.
|
||||
- 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
|
||||
is based on (1) what users ask for, (2) how much effort it takes to
|
||||
implement and (3) someone actually implementing it.
|
||||
|
||||
|
||||
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.
|
||||
- Backwards compatibility is a feature. The RPC API in particular should
|
||||
never break.
|
||||
|
||||
|
||||
NVIM IS... WELL DOCUMENTED *design-documented*
|
||||
@@ -90,15 +71,6 @@ NVIM IS... MAINTAINABLE *design-maintain*
|
||||
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 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*
|
||||
|
||||
|
||||
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*
|
||||
|
||||
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".
|
||||
- Use "tui-" to prefix help tags related to the host terminal, and "TUI"
|
||||
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*
|
||||
|
||||
@@ -239,7 +183,16 @@ Example: `nvim_buf_changedtick_event`.
|
||||
|
||||
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 ~
|
||||
|
||||
API client packages should NOT be named something ambiguous like "neovim" or
|
||||
"python-client". Use "nvim" as a prefix/suffix to some other identifier
|
||||
following ecosystem conventions.
|
||||
@@ -255,33 +208,36 @@ Examples of API-client package names:
|
||||
BAD: neovim
|
||||
|
||||
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*
|
||||
|
||||
Compatibility ~
|
||||
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
|
||||
backwards-compatible, but clients must not break if new fields are added to
|
||||
existing events.
|
||||
backwards-compatible, but clients must not break if new (optional) fields are
|
||||
added to existing events.
|
||||
|
||||
Standard Features ~
|
||||
|
||||
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.
|
||||
- Send the ALT/META ("Option" on macOS) key as a |<M-| chord.
|
||||
- Send the "super" key (Windows key, Apple key) as a |<D-| chord.
|
||||
- Avoid mappings that conflict with Nvim defaults. GUIs have many new chords
|
||||
like <C-,> <C-Enter> <C-S-x> <D-x> and patterns like "shift shift", which
|
||||
don't conflict with typical Nvim mappings.
|
||||
|
||||
Implementation ~
|
||||
- UI-related options ('guifont', 'ambiwidth', …) are published in the
|
||||
"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.
|
||||
- Avoid mappings that conflict with the Nvim keymap-space; GUIs have many new
|
||||
chords (<C-,> <C-Enter> <C-S-x> <D-x>) and patterns ("shift shift") that do
|
||||
not potentially conflict with Nvim defaults, plugins, etc.
|
||||
- Consider the "option_set" |ui-global| event as a hint for other GUI
|
||||
behaviors. UI-related options ('guifont', 'ambiwidth', …) are published in
|
||||
this event.
|
||||
|
||||
|
||||
vim:tw=78:ts=8:ft=help:norl:
|
||||
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||
|
@@ -5,7 +5,7 @@
|
||||
|
||||
|
||||
*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.
|
||||
|
||||
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
|
||||
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
|
||||
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 output of "diff" must be a normal "ed" style diff. Do NOT use a context
|
||||
diff. This example explains the format that Vim expects: >
|
||||
The output of "diff" must be a normal "ed" style diff or a unified diff. Do
|
||||
NOT use a context diff. This example explains the format that Vim expects for
|
||||
the "ed" style diff: >
|
||||
|
||||
1a2
|
||||
> bbb
|
||||
@@ -372,12 +375,16 @@ Example (this does almost the same as 'diffexpr' being empty): >
|
||||
endif
|
||||
silent execute "!diff -a --binary " . opt . v:fname_in . " " . v:fname_new .
|
||||
\ " > " . v:fname_out
|
||||
redraw!
|
||||
endfunction
|
||||
|
||||
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
|
||||
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*
|
||||
Vim will do a test if the diff output looks alright. If it doesn't, you will
|
||||
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
|
||||
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
|
||||
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: >
|
||||
:next `find . -name ver\\*.c -print`
|
||||
: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
|
||||
expanding "ver*.c" prior to execution of the find program. The backslash
|
||||
before the shell pipe symbol "|" prevents Vim from parsing it as command
|
||||
@@ -824,8 +833,8 @@ flag is used for the ":substitute" command to avoid an error for files where
|
||||
Note: When the 'write' option is off, you are not able to write any file.
|
||||
|
||||
*:w* *:write*
|
||||
*E502* *E503* *E504* *E505*
|
||||
*E512* *E514* *E667* *E796*
|
||||
*E502* *E503* *E504* *E505*
|
||||
*E512* *E514* *E667* *E796* *E949*
|
||||
:w[rite] [++opt] Write the whole buffer to the current file. This is
|
||||
the normal way to save changes to a file. It fails
|
||||
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
|
||||
'cpoptions' option.
|
||||
|
||||
Note that the 'fsync' option matters here. If it's set it may make writes
|
||||
slower (but safer).
|
||||
|
||||
*:sav* *:saveas*
|
||||
:sav[eas][!] [++opt] {file}
|
||||
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
|
||||
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[!] On non-Unix systems: Print 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
|
||||
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*
|
||||
-----
|
||||
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*
|
||||
*subscript*
|
||||
|
||||
@@ -1508,8 +1515,7 @@ v:errmsg Last given error message. It's allowed to set this variable.
|
||||
:silent! next
|
||||
:if v:errmsg != ""
|
||||
: ... handle error
|
||||
< "errmsg" also works, for backwards compatibility.
|
||||
|
||||
<
|
||||
*v:errors* *errors-variable*
|
||||
v:errors Errors found by assert functions, such as |assert_true()|.
|
||||
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|.
|
||||
KEY DESCRIPTION ~
|
||||
abort Whether the event triggered during
|
||||
an aborting condition, i e |c_Esc| or
|
||||
|c_CTRL-c|for |CmdlineLeave|.
|
||||
an aborting condition (e.g. |c_Esc| or
|
||||
|c_CTRL-C| for |CmdlineLeave|).
|
||||
cmdlevel Level of cmdline.
|
||||
cmdtype Type of cmdline, |cmdline-char|.
|
||||
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
|
||||
: echo 'could not rename "foo" to "bar"!'
|
||||
:endif
|
||||
< "shell_error" also works, for backwards compatibility.
|
||||
|
||||
<
|
||||
*v:statusmsg* *statusmsg-variable*
|
||||
v:statusmsg Last given status message. It's allowed to set this variable.
|
||||
|
||||
*v:stderr* *stderr-variable*
|
||||
v:stderr Channel id for stderr. Unlike stdin and stdout (see
|
||||
|stdioopen()|), stderr is always open for writing. This channel
|
||||
ID is always 2, but this variable can be used to be explicit.
|
||||
Example: >
|
||||
:call chansend(v:stderr, "something bad happened\n")
|
||||
v:stderr |channel-id| corresponding to stderr. The value is always 2;
|
||||
use this variable to make your code more descriptive.
|
||||
Unlike stdin and stdout (see |stdioopen()|), stderr is always
|
||||
open for writing. Example: >
|
||||
:call chansend(v:stderr, "error: toaster empty\n")
|
||||
<
|
||||
*v:swapname* *swapname-variable*
|
||||
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 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 Full filename of the last loaded or saved session file. See
|
||||
|:mksession|. It is allowed to set this variable. When no
|
||||
session file has been saved, this variable is empty.
|
||||
"this_session" also works, for backwards compatibility.
|
||||
|
||||
*v:throwpoint* *throwpoint-variable*
|
||||
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}])
|
||||
any {name} in {winnr} in tab page {tabnr}
|
||||
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
|
||||
getwinposy() Number Y coord in pixels of GUI Vim window
|
||||
getwinvar({nr}, {varname} [, {def}])
|
||||
@@ -2132,8 +2135,6 @@ index({list}, {expr} [, {start} [, {ic}]])
|
||||
Number index in {list} where {expr} appears
|
||||
input({prompt} [, {text} [, {completion}]])
|
||||
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
|
||||
inputrestore() Number restore 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
|
||||
nextnonblank({lnum}) Number line nr of non-blank line >= {lnum}
|
||||
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
|
||||
or({expr}, {expr}) Number bitwise OR
|
||||
pathshorten({expr}) String shorten directory names in a path
|
||||
@@ -2222,6 +2225,7 @@ remote_read({serverid} [, {timeout}])
|
||||
String read reply string
|
||||
remote_send({server}, {string} [, {idvar}])
|
||||
String send key sequence
|
||||
remote_startserver({name}) none become server {name}
|
||||
remove({list}, {idx} [, {end}]) any remove items {idx}-{end} from {list}
|
||||
remove({dict}, {key}) any remove entry {key} from {dict}
|
||||
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
|
||||
tr({src}, {fromstr}, {tostr}) String translate chars of {src} in {fromstr}
|
||||
to chars in {tostr}
|
||||
trim({text} [, {mask}]) String trim characters in {mask} from {text}
|
||||
trunc({expr}) Float truncate Float {expr}
|
||||
type({name}) Number type of variable {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_id2tabwin({expr}) List get tab and 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}
|
||||
wincol() Number window column of the cursor
|
||||
winheight({nr}) Number height of window {nr}
|
||||
@@ -2412,10 +2418,10 @@ and({expr}, {expr}) *and()*
|
||||
api_info() *api_info()*
|
||||
Returns Dictionary of |api-metadata|.
|
||||
|
||||
append({lnum}, {expr}) *append()*
|
||||
When {expr} is a |List|: Append each item of the |List| as a
|
||||
append({lnum}, {text}) *append()*
|
||||
When {text} is a |List|: Append each item of the |List| as a
|
||||
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.
|
||||
{lnum} can be zero to insert a line before the first one.
|
||||
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:')
|
||||
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
|
||||
NOT produce an error.
|
||||
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
|
||||
{expr} exists.
|
||||
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
|
||||
exactly. The name can be:
|
||||
- Relative to the current directory.
|
||||
@@ -2771,7 +2779,7 @@ changenr() *changenr()*
|
||||
redo it is the number of the redone change. After undo it is
|
||||
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.
|
||||
For a job, {stream} can be one of "stdin", "stdout",
|
||||
"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
|
||||
ommited.
|
||||
|
||||
chansend({id}, {data}) {Nvim} *chansend()*
|
||||
chansend({id}, {data}) *chansend()*
|
||||
Send data to channel {id}. For a job, it writes it to the
|
||||
stdin of the process. For the stdio channel |channel-stdio|,
|
||||
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
|
||||
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
|
||||
used (and translated).
|
||||
{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()*
|
||||
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.
|
||||
{start} can only be used with a |List|.
|
||||
|
||||
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([{num} , {dbpath} [, {prepend}]])
|
||||
@@ -3224,12 +3237,12 @@ executable({expr}) *executable()*
|
||||
On Windows it only checks if the file exists and
|
||||
is not a directory, not if it's really executable.
|
||||
On Windows an executable in the same directory as Vim is
|
||||
always found. Since this directory is added to $PATH it
|
||||
should also work to execute it |win32-PATH|.
|
||||
always found (it is added to $PATH at |startup|).
|
||||
The result is a Number:
|
||||
1 exists
|
||||
0 does not exist
|
||||
-1 not implemented on this system
|
||||
|exepath()| can be used to get the full path of an executable.
|
||||
|
||||
execute({command} [, {silent}]) *execute()*
|
||||
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.
|
||||
Otherwise the result is a String and when there are several
|
||||
matches, they are separated by <NL> characters. [Note: in
|
||||
version 5.0 a space was used, which caused problems when a
|
||||
file name contains a space]
|
||||
matches, they are separated by <NL> characters.
|
||||
|
||||
If the expansion fails, the result is an empty string. A name
|
||||
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: >
|
||||
: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
|
||||
slow, because a shell may be used to do the expansion. See
|
||||
|expr-env-expand|.
|
||||
@@ -3809,8 +3820,7 @@ garbagecollect([{atexit}]) *garbagecollect()*
|
||||
|
||||
The garbage collection is not done immediately but only when
|
||||
it's safe to perform. This is when waiting for the user to
|
||||
type a character. To force garbage collection immediately use
|
||||
|test_garbagecollect_now()|.
|
||||
type a character.
|
||||
|
||||
get({list}, {idx} [, {default}]) *get()*
|
||||
Get item {idx} from |List| {list}. When this item is not
|
||||
@@ -3879,7 +3889,7 @@ getbufinfo([{dict}])
|
||||
endfor
|
||||
<
|
||||
To get buffer-local options use: >
|
||||
getbufvar({bufnr}, '&')
|
||||
getbufvar({bufnr}, '&option_name')
|
||||
|
||||
<
|
||||
*getbufline()*
|
||||
@@ -4040,6 +4050,8 @@ getcmdline() *getcmdline()*
|
||||
Example: >
|
||||
:cmap <F7> <C-\>eescape(getcmdline(), ' \')<CR>
|
||||
< Also see |getcmdtype()|, |getcmdpos()| and |setcmdpos()|.
|
||||
Returns an empty string when entering a password or using
|
||||
|inputsecret()|.
|
||||
|
||||
getcmdpos() *getcmdpos()*
|
||||
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
|
||||
supported:
|
||||
|
||||
arglist file names in argument list
|
||||
augroup autocmd groups
|
||||
buffer buffer names
|
||||
behave :behave suboptions
|
||||
@@ -4094,6 +4107,7 @@ getcompletion({pat}, {type} [, {filtered}]) *getcompletion()*
|
||||
highlight highlight groups
|
||||
history :history suboptions
|
||||
locale locale names (as output of locale -a)
|
||||
mapclear buffer argument
|
||||
mapping mapping name
|
||||
menu menus
|
||||
messages |:messages| suboptions
|
||||
@@ -4303,6 +4317,7 @@ getqflist([{what}]) *getqflist()*
|
||||
list item is a dictionary with these entries:
|
||||
bufnr number of buffer that has the file name, use
|
||||
bufname() to get the name
|
||||
module module name
|
||||
lnum line number in the buffer (first line is 1)
|
||||
col column number (first column is 1)
|
||||
vcol |TRUE|: "col" is visual column
|
||||
@@ -4327,34 +4342,63 @@ getqflist([{what}]) *getqflist()*
|
||||
If the optional {what} dictionary argument is supplied, then
|
||||
returns only the items listed in {what} as a dictionary. The
|
||||
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
|
||||
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
|
||||
means the current quickfix list and '$' means
|
||||
means the current quickfix list and "$" means
|
||||
the last quickfix list
|
||||
title get the list title
|
||||
winid get the |window-ID| (if opened)
|
||||
size number of entries in the quickfix list
|
||||
title get the list title |quickfix-title|
|
||||
winid get the quickfix |window-ID|
|
||||
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.
|
||||
To get the number of lists in the quickfix stack, set 'nr' to
|
||||
'$' in {what}. The 'nr' value in the returned dictionary
|
||||
If both "nr" and a non-zero "id" are specified, then the list
|
||||
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.
|
||||
In case of error processing {what}, an empty dictionary is
|
||||
returned.
|
||||
When "lines" is specified, all the other items except "efm"
|
||||
are ignored. The returned dictionary contains the entry
|
||||
"items" with the list of entries.
|
||||
|
||||
The returned dictionary contains the following entries:
|
||||
context context information stored with |setqflist()|
|
||||
items quickfix list entries
|
||||
nr quickfix list number
|
||||
title quickfix list title text
|
||||
winid quickfix |window-ID| (if opened)
|
||||
changedtick total number of changes made to the
|
||||
list |quickfix-changedtick|
|
||||
context quickfix list context. See |quickfix-context|
|
||||
If not present, set to "".
|
||||
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({'nr': 2, 'title': 1})
|
||||
:echo getqflist({'lines' : ["F1:10:L10"]})
|
||||
<
|
||||
|
||||
getreg([{regname} [, 1 [, {list}]]]) *getreg()*
|
||||
The result is a String, which is the contents of register
|
||||
{regname}. Example: >
|
||||
@@ -4433,6 +4477,9 @@ gettabwinvar({tabnr}, {winnr}, {varname} [, {def}]) *gettabwinvar()*
|
||||
:let list_is_on = gettabwinvar(1, 2, '&list')
|
||||
:echo "myvar = " . gettabwinvar(3, 1, 'myvar')
|
||||
<
|
||||
To obtain all window-local variables use: >
|
||||
gettabwinvar({tabnr}, {winnr}, '&')
|
||||
|
||||
*getwinposx()*
|
||||
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
|
||||
@@ -4458,19 +4505,18 @@ getwininfo([{winid}]) *getwininfo()*
|
||||
Each List item is a Dictionary with the following entries:
|
||||
bufnr number of buffer in the window
|
||||
height window height (excluding winbar)
|
||||
winbar 1 if the window has a toolbar, 0
|
||||
otherwise
|
||||
loclist 1 if showing a location list
|
||||
quickfix 1 if quickfix or location list window
|
||||
tabnr tab page number
|
||||
variables a reference to the dictionary with
|
||||
window-local variables
|
||||
width window width
|
||||
winbar 1 if the window has a toolbar, 0
|
||||
otherwise
|
||||
wincol leftmost screen column of the window
|
||||
winid |window-ID|
|
||||
winnr window number
|
||||
|
||||
To obtain all window-local variables use: >
|
||||
gettabwinvar({tabnr}, {winnr}, '&')
|
||||
winrow topmost screen column of the window
|
||||
|
||||
getwinvar({winnr}, {varname} [, {def}]) *getwinvar()*
|
||||
Like |gettabwinvar()| for the current tabpage.
|
||||
@@ -4799,7 +4845,7 @@ input({opts})
|
||||
where
|
||||
hl_start_col is the first highlighted column,
|
||||
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*
|
||||
Both hl_start_col and hl_end_col + 1 must point to the start
|
||||
of the multibyte character (highlighting must not break
|
||||
@@ -4862,20 +4908,6 @@ input({opts})
|
||||
: call inputrestore()
|
||||
: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()*
|
||||
{textlist} must be a |List| of strings. This |List| is
|
||||
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}'])
|
||||
< (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
|
||||
table is full), -1 if {cmd}[0] or 'shell' is not executable.
|
||||
For communication over the job's stdio, it is represented as a
|
||||
|channel|, and a channel ID is returned on success. Use
|
||||
|chansend()| (or |rpcnotify()| and |rpcrequest()| if "rpc" option
|
||||
was used) to send data to stdin and |chanclose()| to close stdio
|
||||
streams without stopping the job explicitly.
|
||||
The returned job-id is a valid |channel-id| representing the
|
||||
job's stdio streams. Use |chansend()| (or |rpcnotify()| and
|
||||
|rpcrequest()| if "rpc" was enabled) to send data to stdin and
|
||||
|chanclose()| to close the streams without stopping the job.
|
||||
|
||||
See |job-control| and |rpc|.
|
||||
See |job-control| and |RPC|.
|
||||
|
||||
NOTE: on Windows if {cmd} is a List:
|
||||
- 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
|
||||
- 0 on invalid arguments
|
||||
- -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()*
|
||||
Stop |job-id| {id} by sending SIGTERM to the job process. If
|
||||
@@ -5053,18 +5087,24 @@ jobstop({id}) *jobstop()*
|
||||
See |job-control|.
|
||||
|
||||
jobwait({ids}[, {timeout}]) *jobwait()*
|
||||
Wait for a set of jobs to finish. The {ids} argument is a list
|
||||
of |job-id|s to wait for. {timeout} is the maximum number of
|
||||
milliseconds to wait. 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.
|
||||
Wait for a set of jobs to complete.
|
||||
|
||||
{ids} is a list of |job-id|s to wait for.
|
||||
{timeout} is the maximum number of milliseconds to wait.
|
||||
{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
|
||||
the wait-result of the corresponding job. Each wait-result is:
|
||||
Job exit-code, if the job exited
|
||||
-1 if the wait timed out for the job
|
||||
-2 if the job was interrupted
|
||||
-3 if the |job-id| is invalid.
|
||||
the wait-result of the corresponding job. Each wait-result is
|
||||
one of the following:
|
||||
* Exit-code, if the job exited
|
||||
* -1 if the timeout was exceeded
|
||||
* -2 if the job was interrupted
|
||||
* -3 if the |job-id| is invalid
|
||||
|
||||
join({list} [, {sep}]) *join()*
|
||||
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
|
||||
'x position of mark x (if the mark is not set, 0 is
|
||||
returned)
|
||||
w0 first line visible in current window
|
||||
w$ last line visible in current window
|
||||
w0 first line visible in current window (one if the
|
||||
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
|
||||
cursor is the end). When not in Visual mode
|
||||
returns the cursor position. Differs from |'<| in
|
||||
@@ -5200,9 +5242,9 @@ line({expr}) The result is a Number, which is the line number of the file
|
||||
This autocommand jumps to the last known position in a file
|
||||
just after opening it, if the '" mark is set: >
|
||||
:au BufReadPost *
|
||||
\ if line("'\"") > 1 && line("'\"") <= line("$") && &ft !~# 'commit'
|
||||
\ | exe "normal! g`\""
|
||||
\ | endif
|
||||
\ if line("'\"") > 1 && line("'\"") <= line("$") && &ft !~# 'commit'
|
||||
\ | exe "normal! g`\""
|
||||
\ | endif
|
||||
|
||||
line2byte({lnum}) *line2byte()*
|
||||
Return the byte count from the start of the buffer for line
|
||||
@@ -5304,7 +5346,8 @@ maparg({name} [, {mode} [, {abbr} [, {dict}]]]) *maparg()*
|
||||
listing.
|
||||
|
||||
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"
|
||||
command.
|
||||
@@ -5371,9 +5414,10 @@ mapcheck({name} [, {mode} [, {abbr}]]) *mapcheck()*
|
||||
mapping that matches with {name}, while maparg() only finds a
|
||||
mapping for {name} exactly.
|
||||
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
|
||||
{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,
|
||||
then the global mappings.
|
||||
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
|
||||
first item where {pat} matches. Each item is used as a
|
||||
String, |Lists| and |Dictionaries| are used as echoed.
|
||||
|
||||
Otherwise, {expr} is used as a String. The result is a
|
||||
Number, which gives the index (byte offset) in {expr} where
|
||||
{pat} matches.
|
||||
|
||||
A match at the first character or |List| item returns zero.
|
||||
If there is no match -1 is returned.
|
||||
|
||||
For getting submatches see |matchlist()|.
|
||||
Example: >
|
||||
:echo match("testing", "ing") " results in 4
|
||||
@@ -5529,8 +5576,6 @@ matchaddpos({group}, {pos} [, {priority} [, {id} [, {dict}]]])
|
||||
< Matches added by |matchaddpos()| are returned by
|
||||
|getmatches()| with an entry "pos1", "pos2", etc., with the
|
||||
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()*
|
||||
Selects the {nr} match item, as set with a |:match|,
|
||||
@@ -5669,7 +5714,7 @@ min({expr}) Return the minimum value of all items in {expr}.
|
||||
it returns the minimum of all values in the dictionary.
|
||||
If {expr} is neither a list nor a dictionary, or one of the
|
||||
items in {expr} cannot be used as a Number this results in
|
||||
an error. An empty |List| or |Dictionary| results in zero.
|
||||
an error. An empty |List| or |Dictionary| results in zero.
|
||||
|
||||
*mkdir()* *E739*
|
||||
mkdir({name} [, {path} [, {prot}]])
|
||||
@@ -5680,7 +5725,7 @@ mkdir({name} [, {path} [, {prot}]])
|
||||
the new directory. The default is 0755 (rwxr-xr-x: r/w for
|
||||
the user readable for others). Use 0700 to make it unreadable
|
||||
for others.
|
||||
{Nvim}
|
||||
|
||||
{prot} is applied for all parts of {name}. Thus if you create
|
||||
/tmp/foo/bar then /tmp/foo will be created with 0700. Example: >
|
||||
: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".
|
||||
Also see |visualmode()|.
|
||||
|
||||
msgpackdump({list}) {Nvim} *msgpackdump()*
|
||||
msgpackdump({list}) *msgpackdump()*
|
||||
Convert a list of VimL objects to msgpack. Returned value is
|
||||
|readfile()|-style list. Example: >
|
||||
call writefile(msgpackdump([{}]), 'fname.mpack', 'b')
|
||||
@@ -5738,7 +5783,7 @@ msgpackdump({list}) {Nvim} *msgpackdump()*
|
||||
4. Other strings are always dumped as BIN strings.
|
||||
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.
|
||||
Example: >
|
||||
let fname = expand('~/.config/nvim/shada/main.shada')
|
||||
@@ -6194,15 +6239,17 @@ reltimestr({time}) *reltimestr()*
|
||||
< Also see |profiling|.
|
||||
|
||||
*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
|
||||
expression and the result is returned after evaluation.
|
||||
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
|
||||
between (not at the end), like with join(expr, "\n").
|
||||
If {idvar} is present, it is taken as the name of a
|
||||
variable and a {serverid} for later use with
|
||||
If {idvar} is present and not empty, it is taken as the name
|
||||
of a variable and a {serverid} for later use with
|
||||
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|.
|
||||
This function is not available in the |sandbox|.
|
||||
{only available when compiled with the |+clientserver| feature}
|
||||
@@ -6246,9 +6293,10 @@ remote_peek({serverid} [, {retvar}]) *remote_peek()*
|
||||
:let 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
|
||||
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|.
|
||||
This function is not available in the |sandbox|.
|
||||
{only available when compiled with the |+clientserver| feature}
|
||||
@@ -6266,6 +6314,7 @@ remote_send({server}, {string} [, {idvar}])
|
||||
See also |clientserver| |RemoteReply|.
|
||||
This function is not available in the |sandbox|.
|
||||
{only available when compiled with the |+clientserver| feature}
|
||||
|
||||
Note: Any errors will be reported in the server and may mess
|
||||
up the display.
|
||||
Examples: >
|
||||
@@ -6277,6 +6326,12 @@ remote_send({server}, {string} [, {idvar}])
|
||||
:echo remote_send("gvim", ":sleep 10 | echo ".
|
||||
\ '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()*
|
||||
Without {end}: Remove the item at {idx} from |List| {list} and
|
||||
return the item.
|
||||
@@ -6346,30 +6401,28 @@ round({expr}) *round()*
|
||||
echo round(-4.5)
|
||||
< -5.0
|
||||
|
||||
rpcnotify({channel}, {event}[, {args}...]) {Nvim} *rpcnotify()*
|
||||
rpcnotify({channel}, {event}[, {args}...]) *rpcnotify()*
|
||||
Sends {event} to {channel} via |RPC| and returns immediately.
|
||||
If {channel} is 0, the event is broadcast to all channels.
|
||||
Example: >
|
||||
: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
|
||||
|RPC| and blocks until a response is received.
|
||||
Example: >
|
||||
:let result = rpcrequest(rpc_chan, "func", 1, 2, 3)
|
||||
|
||||
rpcstart({prog}[, {argv}]) {Nvim} *rpcstart()*
|
||||
rpcstart({prog}[, {argv}]) *rpcstart()*
|
||||
Deprecated. Replace >
|
||||
:let id = rpcstart('prog', ['arg1', 'arg2'])
|
||||
< with >
|
||||
:let id = jobstart(['prog', 'arg1', 'arg2'], {'rpc': v:true})
|
||||
|
||||
rpcstop({channel}) {Nvim} *rpcstop()*
|
||||
Deprecated. This function was used to stop a job with |rpc|
|
||||
channel, and additionally closed rpc sockets. Instead use
|
||||
|jobstop()| to stop any job, and |chanclose|(id, "rpc") to close
|
||||
rpc communication without stopping the job. Use |chanclose|(id)
|
||||
to close any socket.
|
||||
rpcstop({channel}) *rpcstop()*
|
||||
Deprecated. Instead use |jobstop()| to stop any job, and
|
||||
chanclose(id, "rpc") to close RPC communication without
|
||||
stopping the job. Use chanclose(id) to close any socket.
|
||||
|
||||
screenattr({row}, {col}) *screenattr()*
|
||||
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 evaluating {skip} causes an error the search is aborted
|
||||
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()|.
|
||||
|
||||
@@ -6829,10 +6884,12 @@ setpos({expr}, {list})
|
||||
|
||||
|
||||
setqflist({list} [, {action}[, {what}]]) *setqflist()*
|
||||
Create or replace or add to the quickfix list using the items
|
||||
in {list}. Each item in {list} is a dictionary.
|
||||
Non-dictionary items in {list} are ignored. Each dictionary
|
||||
item can contain the following entries:
|
||||
Create or replace or add to the quickfix list.
|
||||
|
||||
When {what} is not present, use the items in {list}. Each
|
||||
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
|
||||
buffer
|
||||
@@ -6877,7 +6934,10 @@ setqflist({list} [, {action}[, {what}]]) *setqflist()*
|
||||
freed.
|
||||
|
||||
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|
|
||||
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}
|
||||
argument is ignored. The following items can be specified in
|
||||
{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}
|
||||
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
|
||||
means the current quickfix list and '$' means
|
||||
means the current quickfix list and "$" means
|
||||
the last quickfix list
|
||||
title quickfix list title text
|
||||
Unsupported keys in {what} are ignored.
|
||||
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: >
|
||||
:call setqflist([], 'r', {'title': 'My search'})
|
||||
:call setqflist([], 'r', {'nr': 2, 'title': 'Errors'})
|
||||
Examples (See also |setqflist-examples|): >
|
||||
:call setqflist([], 'r', {'title': 'My search'})
|
||||
:call setqflist([], 'r', {'nr': 2, 'title': 'Errors'})
|
||||
:call setqflist([], 'a', {'id':qfid, 'lines':["F1:10:L10"]})
|
||||
<
|
||||
Returns zero for success, -1 for failure.
|
||||
|
||||
@@ -7269,8 +7341,8 @@ stdpath({what}) *stdpath()* *E6100*
|
||||
directories.
|
||||
|
||||
{what} Type Description ~
|
||||
cache String Cache directory. Useful for plugins
|
||||
that need temporary files to work.
|
||||
cache String Cache directory. Arbitrary temporary
|
||||
storage for plugins, etc.
|
||||
config String User configuration directory. The
|
||||
|init.vim| is stored here.
|
||||
config_dirs List Additional configuration directories.
|
||||
@@ -7278,6 +7350,9 @@ stdpath({what}) *stdpath()* *E6100*
|
||||
is stored here.
|
||||
data_dirs List Additional data directories.
|
||||
|
||||
Example: >
|
||||
:echo stdpath("config")
|
||||
|
||||
|
||||
str2float({expr}) *str2float()*
|
||||
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
|
||||
the current (deepest) call can be obtained.
|
||||
|
||||
Example: >
|
||||
Examples: >
|
||||
: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.
|
||||
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
|
||||
with the same replacement character. For an example, if
|
||||
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 ~
|
||||
synconcealed(lnum, 1) [0, '', 0]
|
||||
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'
|
||||
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
|
||||
to the current buffer. {cmd} is the same as the one passed to
|
||||
|jobstart()|. This function fails if the current buffer is
|
||||
@@ -7825,7 +7901,7 @@ termopen({cmd}[, {opts}]) {Nvim} *termopen()*
|
||||
See |terminal| for more information.
|
||||
|
||||
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
|
||||
internally, and |v:testing| must have been set before calling
|
||||
any function.
|
||||
@@ -7942,6 +8018,22 @@ tr({src}, {fromstr}, {tostr}) *tr()*
|
||||
echo tr("<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()*
|
||||
Return the largest integral value with magnitude less than or
|
||||
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 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({nr}) The result is a Number, which is the number of the buffer
|
||||
associated with window {nr}. {nr} can be the window number or
|
||||
@@ -8251,8 +8351,8 @@ winwidth({nr}) *winwidth()*
|
||||
:if winwidth(0) <= 50
|
||||
: exe "normal 50\<C-W>|"
|
||||
:endif
|
||||
< For getting the terminal or screen size, see the 'columns'
|
||||
option.
|
||||
< For getting the terminal or screen size, see the 'columns'
|
||||
option.
|
||||
|
||||
|
||||
wordcount() *wordcount()*
|
||||
@@ -8270,11 +8370,11 @@ wordcount() *wordcount()*
|
||||
cursor_words Number of words before cursor position
|
||||
(not in Visual mode)
|
||||
visual_bytes Number of bytes visually selected
|
||||
(only in Visual mode)
|
||||
(only in Visual mode)
|
||||
visual_chars Number of chars visually selected
|
||||
(only in Visual mode)
|
||||
(only in Visual mode)
|
||||
visual_words Number of chars visually selected
|
||||
(only in Visual mode)
|
||||
(only in Visual mode)
|
||||
|
||||
|
||||
*writefile()*
|
||||
@@ -8439,7 +8539,7 @@ tag_old_static Compiled with support for old static tags
|
||||
|tag-old-static|.
|
||||
tag_any_white Compiled with support for any white characters in tags
|
||||
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|.
|
||||
timers Compiled with |timer_start()| support.
|
||||
title Compiled with window title support |'title'|.
|
||||
@@ -8456,6 +8556,8 @@ visual Compiled with Visual mode.
|
||||
visualextra Compiled with extra Visual mode commands.
|
||||
|blockwise-operators|.
|
||||
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.
|
||||
wildmenu Compiled with 'wildmenu' option.
|
||||
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,
|
||||
an existing function is silently replaced. Unless it
|
||||
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|.
|
||||
|
||||
@@ -8677,8 +8782,7 @@ may be larger.
|
||||
It is also possible to define a function without any arguments. You must
|
||||
still supply the () then.
|
||||
|
||||
It is allowed to define another function inside a function
|
||||
body.
|
||||
It is allowed to define another function inside a function body.
|
||||
|
||||
*local-variables*
|
||||
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.
|
||||
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*
|
||||
|
||||
@@ -9056,6 +9157,14 @@ This does NOT work: >
|
||||
variables are automatically deleted when the function
|
||||
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*
|
||||
Lock the internal variable {name}. Locking means that
|
||||
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:
|
||||
- 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 v: variables (see |v:var|) *E794*
|
||||
- executing a shell command
|
||||
@@ -10616,6 +10725,7 @@ location. Insecure in this context are:
|
||||
- sourcing a .nvimrc or .exrc in the current directory
|
||||
- while executing in the sandbox
|
||||
- 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
|
||||
option will still be marked as it was set in the sandbox.
|
||||
@@ -10709,7 +10819,7 @@ Group Default link Colored expression ~
|
||||
|expr-entry|
|
||||
|
||||
*hl-NvimColon* Delimiter `:` in |dict| literal
|
||||
*hl-NvimComma* Delimiter `,` in |dict|/|list|
|
||||
*hl-NvimComma* Delimiter `,` in |dict| or |list|
|
||||
literal or
|
||||
|expr-function|
|
||||
*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.
|
||||
|
||||
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.
|
||||
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
|
||||
this file in the right directory to make it work.
|
||||
there can be many files. The advantage is that you can simply drop this
|
||||
file in the right directory to make it work.
|
||||
*ftdetect*
|
||||
1. Create your user runtime directory. You would normally use the first
|
||||
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 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
|
||||
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|.
|
||||
|
||||
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
|
||||
otherwise create a split.
|
||||
@@ -522,13 +526,14 @@ The case sensitivity of completion is controlled by 'fileignorecase'.
|
||||
Commands:
|
||||
Man {name} Display the manpage for {name}.
|
||||
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
|
||||
when the provided section is a prefix, e.g. 1m vs 1.
|
||||
Man {path} Open the manpage specified by path. Prepend "./" if
|
||||
page is in the current directory.
|
||||
Man {path} Open the manpage at {path}. Prepend "./" if {path}
|
||||
is relative to the current directory.
|
||||
Man Open the manpage for the <cWORD> (man buffers)
|
||||
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: >
|
||||
: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
|
||||
|
||||
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
|
||||
|
||||
|
||||
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*
|
||||
|
||||
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.
|
||||
|
||||
|
||||
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.
|
||||
|
||||
==============================================================================
|
||||
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'|).
|
||||
|
||||
*g:decada.Error_Format*
|
||||
g:decada.Error_Format| string
|
||||
g:decada.Error_Format string
|
||||
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*
|
||||
@@ -234,4 +236,4 @@ It also has a few other mappings:
|
||||
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.
|
||||
|
||||
|
||||
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.
|
||||
|
||||
==============================================================================
|
||||
1. Starting the GUI *gui-start* *E229* *E233*
|
||||
Starting the GUI *gui-start* *E229* *E233*
|
||||
|
||||
*ginit.vim* *gui-init* *gvimrc* *$MYGVIMRC*
|
||||
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]
|
||||
Display current position of the top left corner of the GUI vim
|
||||
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*
|
||||
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".
|
||||
|
||||
==============================================================================
|
||||
2. Scrollbars *gui-scrollbars*
|
||||
Scrollbars *gui-scrollbars*
|
||||
|
||||
There are vertical scrollbars and a horizontal scrollbar. You may
|
||||
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.
|
||||
|
||||
==============================================================================
|
||||
3. Mouse Control *gui-mouse*
|
||||
|
||||
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*
|
||||
Drag and drop *drag-n-drop*
|
||||
|
||||
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.
|
||||
@@ -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.
|
||||
|
||||
==============================================================================
|
||||
4. Making GUI Selections *gui-selections*
|
||||
|
||||
*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*
|
||||
Menus *menus*
|
||||
|
||||
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
|
||||
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.
|
||||
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*
|
||||
*:am* *:amenu* *:an* *:anoremenu*
|
||||
@@ -662,7 +467,7 @@ when the right mouse button is pressed, if 'mousemodel' is set to popup or
|
||||
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
|
||||
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.
|
||||
|
||||
|
||||
5.4 Executing Menus *execute-menus*
|
||||
Executing Menus *execute-menus*
|
||||
|
||||
*:em* *:emenu* *E334* *E335*
|
||||
:[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.
|
||||
|
||||
|
||||
5.5 Deleting Menus *delete-menus*
|
||||
Deleting Menus *delete-menus*
|
||||
|
||||
*:unme* *:unmenu*
|
||||
*:aun* *:aunmenu*
|
||||
@@ -730,7 +535,7 @@ If you want to get rid of the menu bar: >
|
||||
:set guioptions-=m
|
||||
|
||||
|
||||
5.6 Disabling Menus *disable-menus*
|
||||
Disabling Menus *disable-menus*
|
||||
|
||||
*:menu-disable* *:menu-enable*
|
||||
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.
|
||||
|
||||
|
||||
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
|
||||
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. |<>|)
|
||||
|
||||
|
||||
5.8 Tooltips & Menu tips
|
||||
Tooltips & Menu tips
|
||||
|
||||
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.
|
||||
|
||||
==============================================================================
|
||||
6. Extras *gui-extras*
|
||||
|
||||
This section describes other features which are related to the GUI.
|
||||
|
||||
- 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:
|
||||
vim:tw=78:sw=4:ts=8:noet: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.
|
||||
|
||||
|
||||
vim:tw=78:ts=8:ft=help:norl:
|
||||
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||
|
@@ -150,6 +150,7 @@ GUI ~
|
||||
|
||||
Interfaces ~
|
||||
|if_cscop.txt| using Cscope with Vim
|
||||
|if_lua.txt| Lua interface
|
||||
|if_pyth.txt| Python interface
|
||||
|if_ruby.txt| Ruby interface
|
||||
|sign.txt| debugging signs
|
||||
@@ -160,6 +161,9 @@ Versions ~
|
||||
*standard-plugin-list*
|
||||
Standard plugins ~
|
||||
|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_paren.txt| Highlight matching parens
|
||||
|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'.
|
||||
|
||||
------------------------------------------------------------------------------
|
||||
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
|
||||
|
||||
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>
|
||||
<
|
||||
|
||||
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
|
||||
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
|
||||
and manage buffers (|lua-buffer|) and windows (|lua-window|). However,
|
||||
Lua uses the "vim" module (see |lua-vim|) to issue commands to Nvim. However,
|
||||
procedures that alter buffer content, open new buffers, and change cursor
|
||||
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.
|
||||
|
||||
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
|
||||
unclear whether empty lua table represents empty list or empty array)
|
||||
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
|
||||
end
|
||||
|
||||
Note that "_A" receives the argument to "luaeval". Lua nils, numbers, strings,
|
||||
tables and booleans are converted to their respective VimL types. An error is
|
||||
thrown if conversion of any of the remaining Lua types is attempted.
|
||||
Lua nils, numbers, strings, tables and booleans are converted to their
|
||||
respective VimL types. An error is thrown if conversion of any other Lua types
|
||||
is attempted.
|
||||
|
||||
Note 2: lua tables are used as both dictionaries and lists, thus making it
|
||||
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:
|
||||
The magic global "_A" contains the second argument to luaeval().
|
||||
|
||||
Example: >
|
||||
: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.
|
||||
1. Table with N incrementally growing integral numbers, starting from 1 and
|
||||
|
@@ -4,9 +4,9 @@
|
||||
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.
|
||||
|
||||
@@ -42,9 +42,10 @@ Example: >
|
||||
endfunction
|
||||
|
||||
To see what version of Python you have: >
|
||||
:python import sys
|
||||
: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
|
||||
and "EOF" do not have any indent.
|
||||
|
||||
@@ -62,6 +63,18 @@ Examples:
|
||||
>
|
||||
:pydo return "%s\t%d" % (line[::-1], len(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*
|
||||
:[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: >
|
||||
|
||||
:python import sys
|
||||
:python sys.argv = ["foo", "bar"]
|
||||
: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.
|
||||
|
||||
==============================================================================
|
||||
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-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: >
|
||||
if has('python')
|
||||
echo 'there is Python 2.x'
|
||||
elseif has('python3')
|
||||
endif
|
||||
if has('python3')
|
||||
echo 'there is Python 3.x'
|
||||
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
|
||||
|
||||
The Ruby Interface to Vim *ruby* *Ruby*
|
||||
The Ruby Interface to Vim *if_ruby* *ruby* *Ruby*
|
||||
|
||||
*E266* *E267* *E268* *E269* *E270* *E271* *E272* *E273*
|
||||
|
||||
@@ -180,4 +180,4 @@ $curwin The current window 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-(*
|
||||
(N When in unclosed parentheses, indent N characters from the line
|
||||
with the unclosed parentheses. Add a 'shiftwidth' for every
|
||||
unclosed parentheses. When N is 0 or the unclosed parentheses
|
||||
is the first non-white character in its line, line up with the
|
||||
next non-white character after the unclosed parentheses.
|
||||
(default 'shiftwidth' * 2).
|
||||
extra unclosed parentheses. When N is 0 or the unclosed
|
||||
parentheses is the first non-white character in its line, line
|
||||
up with the next non-white character after the unclosed
|
||||
parentheses. (default 'shiftwidth' * 2).
|
||||
|
||||
cino= cino=(0 >
|
||||
if (c1 && (c2 || if (c1 && (c2 ||
|
||||
@@ -424,7 +424,8 @@ The examples below assume a 'shiftwidth' of 4.
|
||||
{ {
|
||||
<
|
||||
*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 >
|
||||
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
|
||||
meaningless indentation. You can use the above option to return to the
|
||||
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*
|
||||
@@ -917,6 +937,11 @@ Indent after a nested paren: >
|
||||
Indent for a continuation line: >
|
||||
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*
|
||||
|
||||
@@ -954,6 +979,11 @@ Below is an example of indentation with and without this option enabled:
|
||||
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*
|
||||
|
||||
@@ -1132,4 +1162,4 @@ indent for a continuation line, a line that starts with a backslash: >
|
||||
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_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_u| u 2 make highlighted area lowercase
|
||||
|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'
|
||||
|:sfirst| :sfir[st] split window and go to first file in the
|
||||
argument list
|
||||
|:simalt| :sim[alt] Win32 GUI: simulate Windows ALT key
|
||||
|:sign| :sig[n] manipulate signs
|
||||
|:silent| :sil[ent] run a command silently
|
||||
|:sleep| :sl[eep] do nothing for a few seconds
|
||||
@@ -1615,4 +1614,4 @@ tag command action ~
|
||||
|:~| :~ repeat last ":substitute"
|
||||
|
||||
|
||||
vim:tw=78:ts=8:ft=help:norl:
|
||||
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||
|
@@ -410,12 +410,12 @@ An example for using CTRL-G U: >
|
||||
inoremap ( ()<C-G>U<Left>
|
||||
|
||||
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.
|
||||
Also entering a text like (with the "(" mapping from above): >
|
||||
the undo sequence and therefore using |.| (redo) will work as expected.
|
||||
Also entering a text like (with the "(" mapping from above):
|
||||
|
||||
Lorem ipsum (dolor
|
||||
|
||||
will be repeatable by the |.|to the expected
|
||||
will be repeatable by using |.| to the expected
|
||||
|
||||
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
|
||||
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
|
||||
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:
|
||||
-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.
|
||||
-3 To cancel silently and leave completion mode.
|
||||
Negative return values:
|
||||
-2 To cancel silently and stay in 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:
|
||||
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:
|
||||
ftp://ftp.vim.org/pub/vim/unstable/patches/ctags-5.5.4.patch
|
||||
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
|
||||
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.
|
||||
|
||||
|
||||
RUBY *ft-ruby-omni* {Nvim}
|
||||
RUBY *ft-ruby-omni*
|
||||
|
||||
NOTE: |compl-omni| for Ruby code requires |provider-ruby| to be installed.
|
||||
|
||||
@@ -1507,15 +1508,15 @@ that begin with the filetype, "php", in this case. For example these syntax
|
||||
groups are included by default with the PHP: phpEnvVar, phpIntVar,
|
||||
phpFunctions.
|
||||
|
||||
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)
|
||||
to add items. Looking at the output from ":syntax list" while editing a PHP file
|
||||
I can see some of these entries: >
|
||||
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) to add items. Looking at the output from
|
||||
":syntax list" while editing a PHP file I can see some of these entries: >
|
||||
htmlArg,htmlTag,htmlTagName,javaScriptStatement,javaScriptGlobalObjects
|
||||
|
||||
To pick up any JavaScript and HTML keyword syntax groups while editing a PHP
|
||||
file, you can use 3 different regexs, one for each language. Or you can
|
||||
simply restrict the include groups to a particular value, without using
|
||||
file, you can use 3 different regexs, one for each language. Or you can
|
||||
simply restrict the include groups to a particular value, without using
|
||||
a regex string: >
|
||||
let g:omni_syntax_group_include_php = 'php\w\+,javaScript\w\+,html\w\+'
|
||||
let g:omni_syntax_group_include_php = 'phpFunctions,phpMethods'
|
||||
@@ -1528,9 +1529,9 @@ highlight. These items will be available within the omni completion list.
|
||||
|
||||
Some people may find this list unwieldy or are only interested in certain
|
||||
items. There are two ways to prune this list (if necessary). If you find
|
||||
certain syntax groups you do not wish displayed you can use two different
|
||||
methods to identify these groups. The first specifically lists the syntax
|
||||
groups by name. The second uses a regular expression to identify both
|
||||
certain syntax groups you do not wish displayed you can use two different
|
||||
methods to identify these groups. The first specifically lists the syntax
|
||||
groups by name. The second uses a regular expression to identify both
|
||||
syntax groups. Simply add one the following to your vimrc: >
|
||||
let g:omni_syntax_group_exclude_php = 'phpCoreConstant,phpConstant'
|
||||
let g:omni_syntax_group_exclude_php = 'php\w*Constant'
|
||||
@@ -1553,22 +1554,22 @@ vimrc: >
|
||||
|
||||
For plugin developers, the plugin exposes a public function OmniSyntaxList.
|
||||
This function can be used to request a List of syntax items. When editing a
|
||||
SQL file (:e syntax.sql) you can use the ":syntax list" command to see the
|
||||
SQL file (:e syntax.sql) you can use the ":syntax list" command to see the
|
||||
various groups and syntax items. For example: >
|
||||
syntax list
|
||||
syntax list
|
||||
|
||||
Yields data similar to this: >
|
||||
sqlOperator xxx some prior all like and any escape exists in is not
|
||||
or intersect minus between distinct
|
||||
links to Operator
|
||||
sqlType xxx varbit varchar nvarchar bigint int uniqueidentifier
|
||||
date money long tinyint unsigned xml text smalldate
|
||||
double datetime nchar smallint numeric time bit char
|
||||
varbinary binary smallmoney
|
||||
image float integer timestamp real decimal
|
||||
Yields data similar to this:
|
||||
sqlOperator xxx some prior all like and any escape exists in is not ~
|
||||
or intersect minus between distinct ~
|
||||
links to Operator ~
|
||||
sqlType xxx varbit varchar nvarchar bigint int uniqueidentifier ~
|
||||
date money long tinyint unsigned xml text smalldate ~
|
||||
double datetime nchar smallint numeric time bit char ~
|
||||
varbinary binary smallmoney ~
|
||||
image float integer timestamp real decimal ~
|
||||
|
||||
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
|
||||
ways. To retrieve all syntax items regardless of syntax group: >
|
||||
echo OmniSyntaxList( [] )
|
||||
|
||||
@@ -1585,7 +1586,6 @@ From within a plugin, you would typically assign the output to a List: >
|
||||
let myKeywords = []
|
||||
let myKeywords = OmniSyntaxList( ['sqlKeyword'] )
|
||||
|
||||
|
||||
|
||||
SQL *ft-sql-omni*
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
vim:tw=78:ts=8:ft=help:norl:
|
||||
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||
|
@@ -1,7 +1,7 @@
|
||||
*intro.txt* Nvim
|
||||
|
||||
|
||||
VIM REFERENCE MANUAL by Bram Moolenaar
|
||||
NVIM REFERENCE MANUAL
|
||||
|
||||
|
||||
Introduction to Vim *ref* *reference*
|
||||
@@ -9,7 +9,7 @@ Introduction to Vim *ref* *reference*
|
||||
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
|
||||
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.
|
||||
|
||||
*pronounce*
|
||||
Vim is pronounced as one word, like Jim, not vi-ai-em. It's written with a
|
||||
capital, since it's a name, again like Jim.
|
||||
Vim is pronounced as one word, like Jim. Nvim is pronounced as N-vim, or,
|
||||
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
|
||||
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|.
|
||||
|
||||
*book*
|
||||
There are many books on Vi that contain a section for beginners. There are
|
||||
two books I can recommend:
|
||||
There are many books on Vi and Vim. We recommend these books:
|
||||
|
||||
"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
|
||||
|
||||
This is the very first book completely dedicated to Vim. It is very good for
|
||||
beginners. The most often used commands are explained with pictures and
|
||||
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
|
||||
This is the first book dedicated to Vim. Parts of it were included in the
|
||||
user manual. |frombook| ISBN: 0735710015
|
||||
For more information try one of these:
|
||||
http://iccf-holland.org/click5.html
|
||||
http://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.
|
||||
https://iccf-holland.org/click5.html
|
||||
https://www.vim.org/iccf/click5.html
|
||||
|
||||
==============================================================================
|
||||
2. Vim on the internet *internet*
|
||||
Nvim on the interwebs *internet*
|
||||
|
||||
*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/
|
||||
Vim FAQ: http://vimdoc.sf.net/
|
||||
Downloading: ftp://ftp.vim.org/pub/vim/MIRRORS
|
||||
|
||||
|
||||
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
|
||||
Nvim home page: https://neovim.io/
|
||||
Nvim FAQ: https://github.com/neovim/neovim/wiki/FAQ
|
||||
Downloads: https://github.com/neovim/neovim/releases
|
||||
Vim FAQ: https://vimhelp.appspot.com/vim_faq.txt.html
|
||||
Vim home page: https://www.vim.org/
|
||||
|
||||
|
||||
Bug reports: *bugs* *bug-reports* *bugreport.vim*
|
||||
|
||||
Report bugs on GitHub: https://github.com/neovim/neovim/issues
|
||||
|
||||
Please be brief; all the time that is spent on answering mail is subtracted
|
||||
from the time that is spent on improving Vim! Always give a reproducible
|
||||
example and try to find out which settings or other things trigger the bug.
|
||||
Be brief, yet complete. Always give a reproducible example and try to find
|
||||
out which settings or other things trigger the bug.
|
||||
|
||||
Preferably start Vim with: >
|
||||
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.
|
||||
If Nvim crashes, try to get a backtrace. See |debug.txt|.
|
||||
|
||||
==============================================================================
|
||||
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>.
|
||||
|
||||
@@ -273,7 +206,7 @@ Elvis Another Vi clone, made by Steve Kirkendall. Very compact but isn't
|
||||
freely available.
|
||||
|
||||
==============================================================================
|
||||
4. Notation *notation*
|
||||
Notation *notation*
|
||||
|
||||
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 [],
|
||||
@@ -439,7 +372,7 @@ notation meaning equivalent decimal value(s) ~
|
||||
<k0> - <k9> keypad 0 to 9 *keypad-0* *keypad-9*
|
||||
<S-...> shift-key *shift* *<S-*
|
||||
<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-*
|
||||
<D-...> command-key or "super" key *<D-*
|
||||
-----------------------------------------------------------------------
|
||||
@@ -494,7 +427,7 @@ examples and use them directly. Or type them literally, including the '<' and
|
||||
":autocmd"!
|
||||
|
||||
==============================================================================
|
||||
5. Modes, introduction *vim-modes-intro* *vim-modes*
|
||||
Modes, introduction *vim-modes-intro* *vim-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
|
||||
shown at the bottom of the window.
|
||||
|
||||
Insert Normal mode Entered when CTRL-O given in Insert mode. This is
|
||||
like Normal mode, but after executing one command Vim
|
||||
returns to Insert mode.
|
||||
Insert Normal mode Entered when CTRL-O is typed in Insert mode (see
|
||||
|i_CTRL-O|). This is like Normal mode, but after
|
||||
executing one command Vim returns to Insert mode.
|
||||
If the 'showmode' option is on "-- (insert) --" is
|
||||
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.
|
||||
|
||||
==============================================================================
|
||||
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
|
||||
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
|
||||
what mode Vim currently is.
|
||||
|
||||
*Q* *mode-Ex* *Ex-mode* *Ex* *EX* *E501*
|
||||
Q Switch to "Ex" mode. This is a bit like typing ":"
|
||||
commands one after another, except:
|
||||
*gQ* *Q* *mode-Ex* *Ex-mode* *Ex* *EX* *E501*
|
||||
Q or gQ Switch to Ex mode. This is like typing ":" commands
|
||||
one after another, except:
|
||||
- You don't have to keep pressing ":".
|
||||
- The screen doesn't get updated after each command.
|
||||
- There is no normal command-line editing.
|
||||
- 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.
|
||||
Use the ":vi" command |:visual| to exit this 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
|
||||
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
|
||||
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.
|
||||
screen The whole area that Vim uses to work in. This can be
|
||||
a terminal emulator window. Also called "the Vim
|
||||
window".
|
||||
buffer Contains lines of text, usually from a file.
|
||||
screen The whole area that Nvim uses to display things.
|
||||
window A view on a buffer. There can be multiple windows for
|
||||
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
|
||||
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
|
||||
can only be as long as the width of the window allows,
|
||||
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
|
||||
and the command line added. They can only be as long
|
||||
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)
|
||||
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*
|
||||
|
||||
When a job starts it is assigned a number, unique for the life of the current
|
||||
Nvim session. Functions like |jobstart()| return job ids. Functions like
|
||||
Each job is identified by an integer id, unique for the life of the current
|
||||
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.
|
||||
|
||||
The job's stdio streams are represented as a |channel|. It is possible to send
|
||||
and recieve raw bytes, or use |msgpack-rpc|.
|
||||
Job stdio streams form a |channel| which can send and receive raw bytes or
|
||||
|msgpack-rpc| messages.
|
||||
|
||||
==============================================================================
|
||||
Usage *job-control-usage*
|
||||
|
||||
|
@@ -135,11 +135,11 @@ NR == 1 { nf=split(FILENAME,f,".")
|
||||
# common case - Latin1
|
||||
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 "<BODY BGCOLOR=\"#ffffff\">";
|
||||
print "<H1>Vim documentation: " f[1] "</H1>";
|
||||
print "<H1>Nvim documentation: " f[1] "</H1>";
|
||||
print "<A NAME=\"top\"></A>";
|
||||
if ( FILENAME != "help.txt" ) {
|
||||
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
|
||||
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>
|
||||
command: it is executed as if an (unrestricted) |autocmd| was invoked or an
|
||||
async event event was processed.
|
||||
@@ -371,8 +374,9 @@ several modes. In Vim you can use the ":nmap", ":vmap", ":omap", ":cmap" and
|
||||
|
||||
*omap-info*
|
||||
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"
|
||||
and "d{" like "dw".
|
||||
used with any operator. Simple example: >
|
||||
:omap { w
|
||||
makes "y{" work like "yw" and "d{" like "dw".
|
||||
|
||||
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
|
||||
@@ -383,9 +387,11 @@ Normal mode commands find the first '(' character and select the first word
|
||||
before it. That usually is the function name.
|
||||
|
||||
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
|
||||
:ounmap xx
|
||||
|
||||
Likewise for a mapping for Visual and Operator-pending mode or Normal and
|
||||
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
|
||||
the line or insertion starts. Exception: When the abbreviation is
|
||||
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,
|
||||
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
|
||||
completion can be enabled:
|
||||
|
||||
-complete=arglist file names in argument list
|
||||
-complete=augroup autocmd groups
|
||||
-complete=buffer buffer names
|
||||
-complete=behave :behave suboptions
|
||||
@@ -1227,6 +1236,7 @@ completion can be enabled:
|
||||
-complete=highlight highlight groups
|
||||
-complete=history :history suboptions
|
||||
-complete=locale locale names (as output of locale -a)
|
||||
-complete=mapclear buffer argument
|
||||
-complete=mapping mapping name
|
||||
-complete=menu menus
|
||||
-complete=messages |:messages| suboptions
|
||||
@@ -1363,6 +1373,8 @@ The valid escape sequences are
|
||||
<line1> The starting line of the command range.
|
||||
*<line2>*
|
||||
<line2> The final line of the command range.
|
||||
*<range>*
|
||||
<range> The number of items in the command range: 0, 1 or 2
|
||||
*<count>*
|
||||
<count> Any count supplied (as described for the '-range'
|
||||
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
|
||||
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
|
||||
character before it. The combining characters are drawn on top of the
|
||||
preceding character.
|
||||
Up to two combining characters can be used by default. This can be changed
|
||||
with the 'maxcombine' option.
|
||||
Up to six combining characters can be displayed.
|
||||
When editing text a composing character is mostly considered part of the
|
||||
preceding character. For example "x" will delete a character and its
|
||||
following composing characters by default.
|
||||
@@ -1186,4 +1185,4 @@ Contributions specifically for the multi-byte features by:
|
||||
Taro Muraoka <koron@tka.att.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
|
||||
*E222* *E228* *E232* *E256* *E293* *E298* *E304* *E317*
|
||||
*E318* *E356* *E438* *E439* *E440* *E316* *E320* *E322*
|
||||
*E323* *E341* *E473* *E570* *E685* >
|
||||
*E323* *E341* *E473* *E570* *E685* *E950* >
|
||||
Add to read buffer
|
||||
makemap: Illegal mode
|
||||
Cannot create BalloonEval with both message and callback
|
||||
@@ -90,6 +90,7 @@ LIST OF MESSAGES
|
||||
Internal error
|
||||
Internal error: {function}
|
||||
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
|
||||
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
|
||||
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* >
|
||||
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
|
||||
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
|
||||
<
|
||||
|
||||
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*
|
||||
|
||||
A "jump" is one of the following commands: "'", "`", "G", "/", "?", "n",
|
||||
"N", "%", "(", ")", "[[", "]]", "{", "}", ":s", ":tag", "L", "M", "H" and
|
||||
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
|
||||
A "jump" is a command that normally moves the cursor several lines away. If
|
||||
you make the cursor "jump" the position of the cursor before the jump is
|
||||
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 Go to [count] Older cursor position in jump list
|
||||
@@ -1117,7 +1118,7 @@ remembered.
|
||||
*:changes*
|
||||
:changes Print the change list. A ">" character indicates 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
|
||||
count needed to take you to this position. Example:
|
||||
|
||||
@@ -1127,8 +1128,8 @@ remembered.
|
||||
1 14 54 the latest changed line
|
||||
>
|
||||
|
||||
The "3g;" command takes you to line 9. Then the
|
||||
output of ":changes is:
|
||||
The `3g;` command takes you to line 9. Then the
|
||||
output of `:changes` is:
|
||||
|
||||
change line col text ~
|
||||
> 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:
|
||||
first line on the window) on the first non-blank
|
||||
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 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
|
||||
line on the window) on the first non-blank 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. "yL" yanks from the cursor to the last
|
||||
visible line.
|
||||
|
||||
<LeftMouse> Moves to the position on the screen where the mouse
|
||||
click is |exclusive|. See also |<LeftMouse>|. If the
|
||||
position is in a status line, that window is made the
|
||||
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*
|
||||
|
||||
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.
|
||||
|
||||
An rpc socket is automatically created with each instance. The socket
|
||||
location is stored in |v:servername|. By default this is a named pipe
|
||||
with an automatically generated address. See |XXX|.
|
||||
|
||||
To make Nvim listen on a TCP/IP socket instead, specify |--listen|: >
|
||||
Nvim creates a default RPC socket at |startup|, given by |v:servername|. To
|
||||
start with a TCP/IP socket instead, use |--listen| with a TCP-style address: >
|
||||
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,
|
||||
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.
|
||||
|
||||
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.
|
||||
|
||||
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*
|
||||
|
||||
To start the transition, create init.vim in the correct directory for your
|
||||
platform.
|
||||
1. To start the transition, create your |init.vim| (user config) file: >
|
||||
|
||||
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%`
|
||||
usually expands to `C:\Users\<username>\AppData\Local`.
|
||||
2. Add these contents to the file: >
|
||||
|
||||
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
|
||||
let &packpath = &runtimepath
|
||||
source ~/.vimrc
|
||||
<
|
||||
|
||||
3. Restart Nvim, your existing Vim config will be loaded.
|
||||
|
||||
See |provider-python| and |provider-clipboard| for additional software you
|
||||
might need to use some features.
|
||||
|
||||
Your Vim configuration might not be entirely compatible with Nvim. For a
|
||||
full list of differences between Vim and Nvim see |vim-differences|.
|
||||
Your Vim configuration might not be entirely Nvim-compatible.
|
||||
See |vim-differences| for the full list of changes.
|
||||
|
||||
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,
|
||||
|
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).
|
||||
(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]*
|
||||
*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.
|
||||
Similar to moving the cursor for "\%#" |/\%#|.
|
||||
|
||||
*/\%l* */\%>l* */\%<l*
|
||||
*/\%l* */\%>l* */\%<l* *E951*
|
||||
\%23l Matches in a specific line.
|
||||
\%<23l Matches above a specific line (lower 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
|
||||
the text has to be compared with each character in the collection.
|
||||
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*
|
||||
\%[] A sequence of optionally matched atoms. This always matches.
|
||||
@@ -1390,4 +1399,4 @@ Finally, these constructs are unique to Perl:
|
||||
":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.
|
||||
|
||||
==============================================================================
|
||||
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>
|
||||
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
|
||||
not function reference.
|
||||
*{msgpack-integer}* Any value for which |msgpack#type| will return
|
||||
*{msgpack-integer}* Any value for which |msgpack#type()| will return
|
||||
"integer".
|
||||
*{msgpack-special-int}* |msgpack-special-dict| representing integer.
|
||||
|
||||
|
@@ -3719,8 +3719,6 @@ netrw:
|
||||
or
|
||||
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: >
|
||||
|
||||
vim netrw.vim
|
||||
@@ -4100,4 +4098,4 @@ netrw:
|
||||
|
||||
==============================================================================
|
||||
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.
|
||||
|
||||
==============================================================================
|
||||
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!!
|
||||
|
||||
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/)
|
||||
|
||||
==============================================================================
|
||||
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
|
||||
|
||||
==============================================================================
|
||||
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]
|
||||
is ignored. 'printoptions' can be used to specify
|
||||
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}
|
||||
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.
|
||||
|
||||
==============================================================================
|
||||
vim:tw=78:ts=8:ft=help:norl:
|
||||
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||
|
@@ -4,55 +4,60 @@
|
||||
NVIM REFERENCE MANUAL by Thiago de Arruda
|
||||
|
||||
|
||||
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.
|
||||
|
||||
==============================================================================
|
||||
Python integration *provider-python*
|
||||
Python integration *provider-python*
|
||||
|
||||
Nvim supports the Vim legacy |python-vim| and |python3| interfaces via
|
||||
external Python interpreters connected via |RPC|.
|
||||
Nvim supports Python |remote-plugin|s and the Vim legacy |python2| and
|
||||
|python3| interfaces (which are implemented as remote-plugins).
|
||||
Note: Only the Vim 7.3 API is supported; bindeval (Vim 7.4) is not.
|
||||
|
||||
PYTHON QUICKSTART ~
|
||||
|
||||
If you used a package manager to install Nvim, you might already have the
|
||||
required `neovim` Python package. Run |:checkhealth| to verify.
|
||||
Install the "pynvim" Python package:
|
||||
|
||||
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`,
|
||||
then install the `neovim` Python package systemwide: >
|
||||
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.
|
||||
- The `--upgrade` flag ensures you have the latest version even if a previous
|
||||
version was already installed.
|
||||
|
||||
PYTHON PROVIDER CONFIGURATION ~
|
||||
*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*
|
||||
Program to use for evaluating Python code. Setting this makes startup faster.
|
||||
Also useful for working with virtualenvs. >
|
||||
let g:python_host_prog = '/path/to/python'
|
||||
let g:python3_host_prog = '/path/to/python3'
|
||||
Path to Python 3 interpreter. Setting this makes startup faster. Also useful
|
||||
for working with virtualenvs. >
|
||||
let g:python3_host_prog = '/path/to/python3' " Python 3
|
||||
<
|
||||
*g:loaded_python_provider*
|
||||
To disable Python 2 support: >
|
||||
@@ -64,74 +69,74 @@ To disable Python 3 support: >
|
||||
|
||||
PYTHON VIRTUALENVS ~
|
||||
|
||||
If you plan to use per-project virtualenvs often, you should assign
|
||||
a virtualenv for Neovim and hard-code the interpreter path via
|
||||
|g:python_host_prog| (or |g:python3_host_prog|) so that the "neovim" python
|
||||
package is not required for each Environment. Example using pyenv: >
|
||||
If you plan to use per-project virtualenvs often, you should assign one
|
||||
virtualenv for Neovim and hard-code the interpreter path via
|
||||
|g:python3_host_prog| (or |g:python_host_prog|) so that the "pynvim" package
|
||||
is not required for each virtualenv.
|
||||
|
||||
Example using pyenv: >
|
||||
pyenv install 3.4.4
|
||||
pyenv virtualenv 3.4.4 py3neovim
|
||||
pyenv activate py3neovim
|
||||
pip install neovim
|
||||
pyenv virtualenv 3.4.4 py3nvim
|
||||
pyenv activate py3nvim
|
||||
pip install pynvim
|
||||
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: >
|
||||
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
|
||||
See also: https://github.com/zchee/deoplete-jedi/wiki/Setting-up-Python-for-Neovim
|
||||
|
||||
==============================================================================
|
||||
Ruby integration *provider-ruby*
|
||||
|
||||
Nvim supports the Vim legacy |ruby-vim| interface via external Ruby
|
||||
interpreters connected via |RPC|.
|
||||
|
||||
Run |:checkhealth| to see if your system is up-to-date.
|
||||
Nvim supports Ruby |remote-plugin|s and the Vim legacy |ruby-vim| interface
|
||||
(which is itself implemented as a Nvim remote-plugin).
|
||||
|
||||
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
|
||||
|
||||
Run |:checkhealth| to see if your system is up-to-date.
|
||||
|
||||
RUBY PROVIDER CONFIGURATION ~
|
||||
*g:loaded_ruby_provider*
|
||||
To disable Ruby support: >
|
||||
let g:loaded_ruby_provider = 1
|
||||
<
|
||||
*g:ruby_host_prog*
|
||||
Command to start the Ruby host. By default this is `neovim-ruby-host`. For users
|
||||
who use per-project Ruby versions with tools like RVM or rbenv, setting this can
|
||||
prevent the need to install the `neovim` gem in every project.
|
||||
Command to start the Ruby host. By default this is "neovim-ruby-host". With
|
||||
project-local Ruby versions (via tools like RVM or rbenv) setting this can
|
||||
avoid the need to install the "neovim" gem in every project.
|
||||
|
||||
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'
|
||||
<
|
||||
|
||||
To use the RVM "system" Ruby installation: >
|
||||
let g:ruby_host_prog = 'rvm system do neovim-ruby-host'
|
||||
<
|
||||
|
||||
==============================================================================
|
||||
Node.js integration *provider-nodejs*
|
||||
|
||||
Nvim supports Node.js |remote-plugin|s.
|
||||
https://github.com/neovim/node-client/
|
||||
https://nodejs.org/
|
||||
|
||||
NODEJS QUICKSTART~
|
||||
|
||||
To use javascript remote-plugins with Nvim, install the `neovim` npm package: >
|
||||
To use javascript remote-plugins with Nvim, install the "neovim" npm package: >
|
||||
npm install -g neovim
|
||||
<
|
||||
|
||||
Run |:checkhealth| to see if your system is up-to-date.
|
||||
|
||||
NODEJS PROVIDER CONFIGURATION~
|
||||
*g:loaded_node_provider*
|
||||
To disable Node support: >
|
||||
To disable Node.js support: >
|
||||
:let g:loaded_node_provider = 1
|
||||
<
|
||||
*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
|
||||
can be slow. To avoid this, set g:node_host_prog to an absolute path: >
|
||||
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 the host path: >
|
||||
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
|
||||
the '+' and/or '*' registers explicitly): >
|
||||
|
||||
set clipboard+=unnamedplus
|
||||
<
|
||||
|
||||
See 'clipboard' for details and options.
|
||||
|
||||
*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:
|
||||
|
||||
- |g:clipboard|
|
||||
- pbcopy/pbpaste (macOS)
|
||||
- xsel (if $DISPLAY is set)
|
||||
- pbcopy, pbpaste (macOS)
|
||||
- wl-copy, wl-paste (if $WAYLAND_DISPLAY is set)
|
||||
- xclip (if $DISPLAY is set)
|
||||
- xsel (if $DISPLAY is set)
|
||||
- lemonade (for SSH) https://github.com/pocke/lemonade
|
||||
- doitclient (for SSH) http://www.chiark.greenend.org.uk/~sgtatham/doit/
|
||||
- win32yank (Windows)
|
||||
- tmux (if $TMUX is set)
|
||||
|
||||
*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 = {
|
||||
\ 'name': 'myClipboard',
|
||||
\ 'copy': {
|
||||
@@ -176,9 +183,28 @@ To configure a custom clipboard tool, set `g:clipboard` to a dictionary: >
|
||||
\ '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
|
||||
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*
|
||||
@@ -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
|
||||
requests them (e.g., upon a paste).
|
||||
|
||||
*quoteplus* *quote+*
|
||||
*primary-selection* *quotestar* *quoteplus* *quote+*
|
||||
|
||||
There are three documented X11 selections: `PRIMARY`, `SECONDARY`, and `CLIPBOARD`.
|
||||
`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
|
||||
There are three documented X11 selections: PRIMARY, SECONDARY, and CLIPBOARD.
|
||||
CLIPBOARD is typically used in X11 applications for copy/paste operations
|
||||
(CTRL-c/CTRL-v), while PRIMARY is used for the last selected text, which is
|
||||
generally inserted with the middle mouse button.
|
||||
|
||||
Nvim's X11 clipboard providers only utilize the `PRIMARY` and `CLIPBOARD`
|
||||
selections, used for the '*' and '+' registers, respectively.
|
||||
Nvim's X11 clipboard providers only use the PRIMARY and CLIPBOARD selections,
|
||||
for the "*" and "+" registers, respectively.
|
||||
|
||||
==============================================================================
|
||||
vim:tw=78:ts=8:noet:ft=help:norl:
|
||||
|
@@ -33,7 +33,7 @@ compiler (see |errorformat| below).
|
||||
|
||||
*quickfix-ID*
|
||||
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
|
||||
number which may change whenever more than ten lists are added to a quickfix
|
||||
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,
|
||||
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
|
||||
similar to the quickfix commands, replacing the 'c' prefix in the quickfix
|
||||
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.
|
||||
The 'switchbuf' settings are respected when jumping
|
||||
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
|
||||
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: ^ ~
|
||||
8387: symbol: method Fmainx() ~
|
||||
|
||||
*:lli* *:llist*
|
||||
:lli[st] [from] [, [to]]
|
||||
:lli[st] [from] [, [to]] *:lli* *:llist*
|
||||
Same as ":clist", except the location list for the
|
||||
current window is used instead of the quickfix list.
|
||||
|
||||
@@ -333,6 +344,51 @@ use this code: >
|
||||
au QuickfixCmdPost make call QfMakeConv()
|
||||
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:
|
||||
*:cdo*
|
||||
: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
|
||||
'eventignore'. This considerably speeds up editing
|
||||
each buffer.
|
||||
{not in Vi} {not available when compiled without the
|
||||
|+listcmds| feature}
|
||||
{not in Vi}
|
||||
Also see |:bufdo|, |:tabdo|, |:argdo|, |:windo|,
|
||||
|:ldo|, |:cfdo| and |:lfdo|.
|
||||
|
||||
@@ -372,8 +427,7 @@ EXECUTE A COMMAND IN ALL THE BUFFERS IN QUICKFIX OR LOCATION LIST:
|
||||
:{cmd}
|
||||
etc.
|
||||
< Otherwise it works the same as `:cdo`.
|
||||
{not in Vi} {not available when compiled without the
|
||||
|+listcmds| feature}
|
||||
{not in Vi}
|
||||
|
||||
*:ldo*
|
||||
: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.
|
||||
< Only valid entries in the location list are used.
|
||||
Otherwise it works the same as `:cdo`.
|
||||
{not in Vi} {not available when compiled without the
|
||||
|+listcmds| feature}
|
||||
{not in Vi}
|
||||
|
||||
*:lfdo*
|
||||
: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}
|
||||
etc.
|
||||
< Otherwise it works the same as `:ldo`.
|
||||
{not in Vi} {not available when compiled without the
|
||||
|+listcmds| feature}
|
||||
{not in Vi}
|
||||
|
||||
=============================================================================
|
||||
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
|
||||
quickfix list. This can be used to compose a custom
|
||||
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[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
|
||||
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*
|
||||
|
||||
@@ -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
|
||||
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*
|
||||
|
||||
@@ -1067,7 +1240,7 @@ or >
|
||||
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.
|
||||
|
||||
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 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"
|
||||
@@ -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
|
||||
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*
|
||||
|
||||
@@ -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
|
||||
'backupskip' 'bsk' no backup for files that match these patterns
|
||||
'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
|
||||
'belloff' 'bo' do not ring the bell for these reasons
|
||||
'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
|
||||
'prompt' 'prompt' enable prompt in Ex mode
|
||||
'pumheight' 'ph' maximum height of the popup menu
|
||||
'pumwidth' 'pw' minimum width of the popup menu
|
||||
'pythondll' name of the Python 2 dynamic library
|
||||
'pythonthreedll' name of the Python 3 dynamic library
|
||||
'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
|
||||
'updatecount' 'uc' after this many characters 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
|
||||
'verbosefile' 'vfile' file to write messages in
|
||||
'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'
|
||||
|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*
|
||||
|
||||
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,
|
||||
with the extension ".swp".
|
||||
- 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.
|
||||
|
||||
|
||||
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