From 82474eb7bb0b9b7df5475db0551cd402bb912349 Mon Sep 17 00:00:00 2001 From: Nachuan Tang Date: Sun, 11 Jun 2023 14:59:34 -0400 Subject: [PATCH] Squashed commit of the following: commit f031b8d76d9bec6ea99ecbb298bc14ef6fa288e0 Author: Donald T Date: Mon May 29 14:55:14 2023 -0400 . commit 94f905b7ced8522e63d39f288bcb1f7a4e15cc18 Author: Donald T Date: Sat May 20 00:20:51 2023 -0400 . commit f41a8c8c1ac190de2f654b25e73d3ec2a0a2d09d Author: Donald T Date: Fri May 5 23:24:25 2023 -0700 . commit 48b861af7a8a7b32eef2bd41ccce5cd9381c21ed Author: Donald T Date: Wed May 3 03:32:30 2023 -0400 . commit 6be7fb3fd0a8e72f04cd1dc9044b9b072292eaaf Author: Donald T Date: Wed May 3 03:32:23 2023 -0400 . commit bc541b919d7e3173ff33d60fcf4ac235c66d6e63 Author: Donald T Date: Tue May 2 17:01:32 2023 -0400 . commit 3e5edf081c9ba0369edc34769f8d9ff411e50ab9 Author: Donald T Date: Tue May 2 03:37:37 2023 -0400 . commit 2e18d3ed4740f92931e8b41e1af72fa7bc651345 Author: Donald T Date: Tue May 2 03:06:28 2023 -0400 . commit 01027999ef4ea2c556759c113fb02870d76fcfa6 Merge: 29a6e45 46b9814 Author: Nachuan Tang Date: Mon May 1 19:10:05 2023 -0400 Merge branch 'gitlab' of gitlab.com:tangnachuan1208/dotfiles into gitlab commit 29a6e452c79bad6ed88f4a43b56f0d1a9b6c8dbc Author: Nachuan Tang Date: Mon May 1 19:09:43 2023 -0400 . commit 46b9814e7f311517cdca863f834fc4422d856479 Author: Nachuan Tang Date: Mon May 1 17:56:39 2023 -0400 . commit 80125dd6783241c703403e06b831999779acac55 Author: Nachuan Tang Date: Mon May 1 13:25:02 2023 -0400 . commit 0aa1d47e46af507fa2262aae149ec83047a1b359 Author: Donald T Date: Sun Apr 30 00:51:16 2023 -0400 . commit 753ea9333c3cf25d910c6c81c34dfc7c9cdeac4b Author: Donald T Date: Sat Apr 29 20:04:20 2023 -0400 . commit 186dbc0731f5d2e918930eb42f554161d002e96d Author: Donald T Date: Sat Apr 29 19:46:41 2023 -0400 format commit a6ecdd9c44f3c113b86b1a244b2ec34cb6c16c31 Author: Donald T Date: Sat Apr 29 19:44:44 2023 -0400 . commit 05c8b25e3e629f86a247066169f3215d0f720558 Author: Donald T Date: Sat Apr 29 19:29:32 2023 -0400 . commit e82940eca591e182fcbf8ec212baa14d243810e2 Author: Donald T Date: Sat Apr 29 19:07:57 2023 -0400 . commit 5d0bf02856ec9ebed7b8a393f723bb473c95576f Author: Donald T Date: Sat Apr 29 14:59:54 2023 -0400 . commit 968f7bdca5affca622f53528178811d39a46ef68 Author: Donald T Date: Sat Apr 29 06:07:02 2023 -0400 . commit 19feb7fcaa76edf56e5829db594d3f113cd3f602 Author: Donald T Date: Sat Apr 29 05:55:37 2023 -0400 . commit 710ec3d53b02672896690cb9b0544976df575c19 Author: Donald T Date: Sat Apr 29 05:03:38 2023 -0400 . commit 05e21d7712705671be001b3376b440ea271d7415 Author: Donald T Date: Sat Apr 29 04:57:08 2023 -0400 . commit 13d938b5ce19271a7bbc1428c4e637df40745889 Author: Donald T Date: Sat Apr 29 03:28:14 2023 -0400 . commit 739c24b5846feaf18954db45435f3993e6d661b1 Author: Donald T Date: Sat Apr 29 03:21:12 2023 -0400 . commit 2cdc9cf1f25788c6e8f9efaf2a368210937d6116 Author: Donald T Date: Sat Apr 29 03:05:17 2023 -0400 . commit a25a424efd5d79ba3b2d70efca9c5b75685f852a Author: Nachuan Tang Date: Sat Apr 29 02:54:21 2023 -0400 . commit c7794f48a76cac0f98749c3f0d8711100f0e18dc Author: Nachuan Tang Date: Sat Apr 29 02:48:57 2023 -0400 . commit eedf1c88d64ec13356a10ab6ca86b8f5dddfe68e Author: Nachuan Tang Date: Sat Apr 29 02:30:52 2023 -0400 . commit adbe5512cc7511691540ce47bb381969e39148a4 Author: Nachuan Tang Date: Sat Apr 29 02:03:11 2023 -0400 . commit e6c9b57a498978509cb94f34fef5e9414f3f349c Author: Nachuan Tang Date: Sat Apr 29 01:51:39 2023 -0400 . commit d88450c7a69c544896ed399138a5e80e9ef3a1f6 Author: Donald T Date: Sat Apr 29 00:53:56 2023 -0400 . commit 2c1019cae42e9205e10e582b96737671889cd307 Author: Donald T Date: Fri Apr 28 04:17:23 2023 -0400 . commit 03eec51af196432ae9590e3b1f9f3a93348b8fe6 Author: Donald T Date: Fri Apr 28 04:03:40 2023 -0400 yes commit 4b62a9ab80475a6b1a1722abf53876c1ff326700 Author: Donald T Date: Fri Apr 28 03:41:36 2023 -0400 . commit 59214cd6541637b071c9064060fe16bf5bb27725 Author: Donald T Date: Fri Apr 28 03:22:09 2023 -0400 . commit f30a7552d3181d781c3d0d1488844987822b6522 Author: Donald T Date: Fri Apr 28 01:35:18 2023 -0400 . commit 3a2d1082e84c37f0c2fee8217796fa4d4499294f Author: Donald T Date: Fri Apr 28 00:48:17 2023 -0400 . commit 520fd153e401ab822f1042ff8376b1e8d8b2ac92 Author: Donald T Date: Thu Apr 27 23:50:09 2023 -0400 . commit 7437561bc3ffc3641f45bd76d9ab70aeb469c2f2 Author: Donald T Date: Thu Apr 27 19:28:16 2023 -0400 . commit 32a8001f2e39102ed73ee68570d451603ed154b3 Author: Donald T Date: Thu Apr 27 19:20:08 2023 -0400 . commit 9652a519b4024d36d87037d6549d3f852a17a1e6 Author: Donald T Date: Thu Apr 27 16:56:54 2023 -0400 . commit b12009000ecf4d1db967708aed5947dd9553fb1e Author: Donald T Date: Thu Apr 27 16:51:59 2023 -0400 . commit cf194922c2b24267c5d7397d07dc89b90286acf3 Author: Donald T Date: Thu Apr 27 16:51:00 2023 -0400 . commit f4d9203afdb998f0c842118bc88dbf9e8ffe71e0 Author: Donald T Date: Thu Apr 27 14:53:57 2023 -0400 fast grep done!! commit 2a176f1b5ec1b3e32af1c12b18ad5ef41f3e60f6 Author: Donald T Date: Thu Apr 27 14:50:43 2023 -0400 . commit baeeba23deff9dd80d2a8865e91c1f630e7e7e23 Author: Donald T Date: Thu Apr 27 06:07:00 2023 -0400 . commit 586bbf01cf29cb42c8be794b73b73a274d7e4ed3 Author: Donald T Date: Thu Apr 27 05:51:28 2023 -0400 ag allow partial fuzzy search now commit 139fdbc6285e68e5a13277877344097480ba5387 Author: Donald T Date: Thu Apr 27 03:41:43 2023 -0400 add info win commit a08839510d7329ac28c18f18d598e9f261100880 Author: Donald T Date: Thu Apr 27 02:38:24 2023 -0400 . commit 7663230223592f9ad0509b80973542c2928d7771 Author: Donald T Date: Thu Apr 27 02:35:42 2023 -0400 Revert "." This reverts commit 254db14a3118a0f898283f62942f10762405ffc9. commit 796758bf647d83652b6fffa54fc6e54548488bff Author: Donald T Date: Thu Apr 27 02:35:21 2023 -0400 Revert "Revert "."" This reverts commit f1bb558ce24d92064219d9282bcc9ba1359aa6ac. commit f1bb558ce24d92064219d9282bcc9ba1359aa6ac Author: Donald T Date: Thu Apr 27 02:31:13 2023 -0400 Revert "." This reverts commit 1fc9da602ff45ab72a3b37fb6fd8b2d2b3d88fe5. commit 254db14a3118a0f898283f62942f10762405ffc9 Author: Nachuan Tang Date: Thu Apr 27 02:28:07 2023 -0400 . commit 1fc9da602ff45ab72a3b37fb6fd8b2d2b3d88fe5 Author: Donald T Date: Thu Apr 27 01:50:16 2023 -0400 . commit b18489c135043b6a4f0b6c0e8eb5b0ddfad10160 Author: Donald T Date: Thu Apr 27 01:46:15 2023 -0400 hide cursor when having popup commit 052ee3417392b42c081d1c2be6e249b8db8592ff Author: Donald T Date: Thu Apr 27 01:10:41 2023 -0400 add prompt cursor support commit 38ffb515e51913804c31e8fb872381fbef965e44 Author: Donald T Date: Wed Apr 26 15:14:46 2023 -0400 . commit 5cbc177ba5409cb3b0532149df535c8265c370d1 Author: Donald T Date: Wed Apr 26 15:04:49 2023 -0400 . commit 25edf4d4cda19d9b628afb4eb3e1dfd828ead7e6 Author: Donald T Date: Wed Apr 26 15:04:00 2023 -0400 . commit e57064e2102af2489f4884e48dcc9431723e04fb Author: Donald T Date: Wed Apr 26 15:02:56 2023 -0400 . commit 1571c42fdeba67a27b7f890d462144059c22320a Author: Donald T Date: Wed Apr 26 14:59:25 2023 -0400 . commit 65c7982637b428829724dea1afd217a5ff71e093 Author: Donald T Date: Wed Apr 26 14:56:15 2023 -0400 . commit 348d2198a64d3af90b80452fd29ac8fcf89ce4f6 Author: Donald T Date: Wed Apr 26 14:52:28 2023 -0400 . commit f3eacf8a9a03dfa1fa2b9c489504aaaeb517bf8b Author: Nachuan Tang Date: Wed Apr 26 14:40:55 2023 -0400 . commit 34f7af3e179dadb6be0d4f97ef0a2eb31d02d761 Author: Donald T Date: Wed Apr 26 13:40:17 2023 -0400 . commit 8fdcb5692177d7a5742e4974b2859b1c09762dcd Author: Donald T Date: Wed Apr 26 05:11:10 2023 -0400 . commit 3340905398916d441c42454d49e32b766b8d78c3 Author: Donald T Date: Wed Apr 26 04:35:24 2023 -0400 . commit 8c9953a1ddf1641b3559672ea847de156da7e395 Author: Donald T Date: Wed Apr 26 04:13:42 2023 -0400 . commit 98851e14c76f300ba6045951e1c9b9093af56d72 Author: Donald T Date: Wed Apr 26 03:23:07 2023 -0400 . commit d189f8860f11bded35871796165a1af18ccc9c89 Author: Donald T Date: Wed Apr 26 01:39:26 2023 -0400 . commit 793a4d13f2503b83dd671ee08aab208151369e63 Author: Donald T Date: Wed Apr 26 01:07:45 2023 -0400 add reverse menu function commit 32aacd806a614deca71a43848cda954976db7fcc Author: Donald T Date: Tue Apr 25 22:55:25 2023 -0400 . commit ca0253d34e61746bca92c05a66042d35424ddb52 Author: Donald T Date: Tue Apr 25 18:06:13 2023 -0400 . commit 13411243f756f46c6c3171531904edbaf19b0b07 Author: Nachuan Tang Date: Tue Apr 25 06:38:25 2023 -0400 . commit 62e418f26f80d0e75f30ce9cf7428c418ea6bce9 Author: Donald T Date: Tue Apr 25 14:19:55 2023 -0400 . commit a52a2ff769f03e1efff89cbca4d5b929de4e30d4 Author: Donald T Date: Tue Apr 25 04:49:48 2023 -0400 . commit b89d69e632c61a2907f978e2f8b32f4ae83347f8 Author: Donald T Date: Tue Apr 25 04:42:17 2023 -0400 add popup support commit 4abb92b4a18c9f79c4a529e0309da09631318644 Author: Donald T Date: Tue Apr 25 00:06:33 2023 -0400 . commit 0c0aab52ee5e81aa6b7ee9a6a1a8b0379a2b3427 Author: Donald T Date: Tue Apr 25 00:06:07 2023 -0400 . commit a6265472178a300bbb80505e59dfebf5ee978dc1 Merge: 78e3485 35aaca1 Author: Donald T Date: Mon Apr 24 04:57:54 2023 -0400 Merge branch 'gitlab' of gitlab.com:tangnachuan1208/dotfiles into gitlab commit 78e3485b80adcf20553741c5f48320365f2734b2 Author: Donald T Date: Mon Apr 24 04:57:51 2023 -0400 . commit 35aaca10cabc5a8de2482f5654a862c254f69af2 Author: Nachuan Tang Date: Mon Apr 24 04:05:02 2023 -0400 . commit 4ff85f84e0fb5c70e275715f684c560e99bc6d25 Author: Nachuan Tang Date: Mon Apr 24 03:15:05 2023 -0400 . commit 626e840630457c978dc7cfc67c12412ce19ec7b2 Author: Nachuan Tang Date: Mon Apr 24 02:08:38 2023 -0400 . commit 94fe349621b79c60de4bc8aaf51412ed5b6ea60d Author: Nachuan Tang Date: Mon Apr 24 01:54:18 2023 -0400 . commit cafa07ebe88983c16bc9c71052f7406202403b60 Author: Nachuan Tang Date: Mon Apr 24 01:11:27 2023 -0400 . commit 860e5524d7b05d7eed4223e71fdc877d833e4906 Author: Donald T Date: Sun Apr 23 15:16:23 2023 -0400 . commit 50f23de9e70138aa9aca4fef9bd25fe55762d031 Author: Donald T Date: Sun Apr 23 14:56:29 2023 -0400 . commit f2a72b117d0d55c2052dda3b565879b0f1838131 Author: Donald T Date: Sun Apr 23 05:16:23 2023 -0400 . commit 97c6a07d009698c16862bf58bb87bd5577abf7e6 Author: Nachuan Tang Date: Sun Apr 23 03:17:43 2023 -0400 . commit ea6c04a1f953779ca78dce9abed7752b1aa78799 Author: Nachuan Tang Date: Sun Apr 23 02:55:17 2023 -0400 . commit cb00739211a8f6475195d69b04af74052faa02a2 Author: Nachuan Tang Date: Sun Apr 23 02:33:05 2023 -0400 . commit a6e0962b0c8015fad840d742e9fd7bfdd713566c Merge: 6c9f799 615dce2 Author: Nachuan Tang Date: Sat Apr 22 09:52:03 2023 -0400 Merge branch 'gitlab' of gitlab.com:tangnachuan1208/dotfiles into gitlab commit 615dce2e6b85376ab25a75c9c2fa752c6decb43a Author: Donald T Date: Sat Apr 22 13:59:56 2023 -0400 . commit 35c2916a58117bee6c72368142322ff90697948f Author: Donald T Date: Sat Apr 22 13:42:14 2023 -0400 . commit 6c9f7990c943a17536df37e06ac6dfe49a543b36 Author: Nachuan Tang Date: Sat Apr 22 09:51:55 2023 -0400 . commit 474592185b1d15c5e75f80c20bc0bf991e0917e7 Author: Donald T Date: Sat Apr 22 06:07:11 2023 -0400 . commit 328baea58d4208b36d2956eb536f1bb1a137fc16 Author: Donald T Date: Sat Apr 22 06:01:41 2023 -0400 . commit 441e377dee9694a3c6154a1ff175bacd2ecfcd47 Author: Nachuan Tang Date: Sat Apr 22 05:24:22 2023 -0400 . commit 226bb43ad152f2a7396132294deb8fde0c08bb97 Author: Nachuan Tang Date: Sat Apr 22 03:13:27 2023 -0400 . commit 327fe11db15371c59d0eb885edf93d5d1047c54e Merge: bd494eb b14a5b8 Author: Donald T Date: Fri Apr 21 13:01:04 2023 -0400 Merge branch 'gitlab' of gitlab.com:tangnachuan1208/dotfiles into gitlab commit bd494eb6d2e074aa76f67b553f550ad9e11f9a86 Author: Donald T Date: Fri Apr 21 13:00:57 2023 -0400 . commit b14a5b8fc1a0549ce3d6508c73e582043fc7577c Author: Nachuan Tang Date: Fri Apr 21 01:41:18 2023 -0400 . commit 74a6c19ba61d4e5674842aded812381cd2526b49 Merge: 8d55b09 bedee86 Author: Donald T Date: Thu Apr 20 11:59:16 2023 -0400 Merge branch 'gitlab' of gitlab.com:tangnachuan1208/dotfiles into gitlab commit 8d55b09cf7ca7665f6f8bfccd9cf668e011f5072 Author: Donald T Date: Thu Apr 20 11:59:04 2023 -0400 . commit bedee86bd7c32b74ecc685aeddd6280670f6e5a7 Merge: 5c10b61 1369540 Author: Nachuan Tang Date: Wed Apr 19 19:51:59 2023 -0400 Merge branch 'gitlab' of gitlab.com:tangnachuan1208/dotfiles into gitlab commit 5c10b61a20e45bfeb18b4ae2251c9eb09e0889be Author: Nachuan Tang Date: Wed Apr 19 19:51:54 2023 -0400 . commit 13695401c7474ffe9782ea756c0d179cb114da6c Author: Donald T Date: Wed Apr 19 03:22:05 2023 -0400 . commit 2948e2aa670fe89598220f59df6912fa105470b0 Author: Donald T Date: Wed Apr 19 03:05:37 2023 -0400 . commit 9da84d3cdfd7ebbc6fc25015b5a51ba340ab1a2c Author: Donald T Date: Wed Apr 19 03:05:23 2023 -0400 . commit 53e69aabc39336a457f629daa96d707b23244c40 Author: Nachuan Tang Date: Wed Apr 19 00:55:06 2023 -0400 . commit 7b9d98f104ab838103d21aea94a3da5ce2f996ea Merge: 3511f2d 691adc5 Author: Nachuan Tang Date: Tue Apr 18 21:46:11 2023 -0400 Merge branch 'gitlab' of gitlab.com:tangnachuan1208/dotfiles into gitlab commit 691adc506755d1607495cc9e65d373ddd86247fc Author: Donald T Date: Tue Apr 18 21:45:54 2023 -0400 . commit 3511f2d70238bc0ff669591417dbf4bf552fc333 Merge: fe17ea1 2a5e926 Author: Nachuan Tang Date: Tue Apr 18 21:45:00 2023 -0400 Merge branch 'gitlab' of gitlab.com:tangnachuan1208/dotfiles into gitlab commit fe17ea164a6872dc9ac9a1a1360be8a8a3eeab37 Author: Nachuan Tang Date: Tue Apr 18 21:44:55 2023 -0400 . commit 2a5e926e33e04b95b3af4c7c72d2df4f430e5869 Author: Donald T Date: Tue Apr 18 18:35:18 2023 -0400 . commit bb01b10935e24518746d0cc1974cbf40d3bab28e Author: Nachuan Tang Date: Tue Apr 18 12:57:19 2023 -0400 . commit b94e1c2a14d771c94567bdc9a2503f57a6c649b3 Author: Nachuan Tang Date: Tue Apr 18 12:44:53 2023 -0400 . commit a0fabd29b6c31ff70ad2396ac7b1ca52c693f2d2 Author: Donald T Date: Tue Apr 18 03:53:30 2023 -0400 . commit 383cc61310d9f07787865294e9fbd8b6007c3c0a Author: Donald T Date: Tue Apr 18 03:46:23 2023 -0400 . commit 2a2bb928e22962ac97959c90a844b0f3fe9786d7 Author: Donald T Date: Tue Apr 18 03:30:50 2023 -0400 . commit 5edd588447bdcc8c50f40f9698e7179753c51417 Author: Donald T Date: Tue Apr 18 03:25:46 2023 -0400 . commit f01329b49bd05fccabfabf4c3a95e68dab8973ba Author: Nachuan Tang Date: Tue Apr 18 01:25:09 2023 -0400 . commit c808517c93a71668b1e9395c8a041c2e208df4e2 Author: Nachuan Tang Date: Mon Apr 17 23:45:11 2023 -0400 . commit 4a0390f6b4eff0cacfe8855553ba0d7c9a6d6b39 Author: Nachuan Tang Date: Mon Apr 17 23:43:08 2023 -0400 . commit c31b86ed2082cfb315883885164afa89e06ca2f6 Author: Nachuan Tang Date: Mon Apr 17 22:08:14 2023 -0400 . commit d9b226e63648612529a7f679024ec323717bb96c Author: Nachuan Tang Date: Mon Apr 17 21:08:31 2023 -0400 . commit b6a00e990e7b9377621838e051822600e7b7026a Author: Nachuan Tang Date: Mon Apr 17 19:01:11 2023 -0400 . commit e2978d17a1160ede53c58090bbb8e5d707d303cf Author: Nachuan Tang Date: Mon Apr 17 16:51:41 2023 -0400 . commit f063a88f479a1e95a2c6bdc6479c0e51169aef85 Merge: d18fddb a432c4d Author: Nachuan Tang Date: Mon Apr 17 04:10:24 2023 -0400 Merge branch 'gitlab' of gitlab.com:tangnachuan1208/dotfiles into gitlab commit a432c4d0f5427cfe91439c73b7dfbdf0afb9abfd Author: Donald T Date: Mon Apr 17 12:59:29 2023 -0400 . commit 0f1f0bd02db0b1ae8c4491594c7d1cfaa5a0a90c Author: Donald T Date: Mon Apr 17 04:10:50 2023 -0400 . commit d18fddb5d103a9e32219a250db5a12040c2e2e94 Author: Nachuan Tang Date: Mon Apr 17 04:10:17 2023 -0400 . commit 025d686fa07cc2484842878bfb61086a25232e20 Author: Nachuan Tang Date: Mon Apr 17 03:33:53 2023 -0400 . commit 40e6d011a9373ad1c9519271e8b3ef1f039a42ab Author: Nachuan Tang Date: Sun Apr 16 16:47:28 2023 -0400 . commit b0bfe0db5af9bd5d1dee2cece2354785475bbde5 Author: Donald T Date: Sun Apr 16 14:27:11 2023 -0400 . commit 45875076c01911b086cdad37f097ff1bce90c97a Author: Donald T Date: Sun Apr 16 13:55:01 2023 -0400 . commit df0f8ac3d45a4e24ef1d6e9b19be32598fe77430 Author: Donald T Date: Sun Apr 16 13:25:56 2023 -0400 . commit 49c8f8193f3d847bd3a4780624a4bdc1ad9fe636 Author: Donald T Date: Sun Apr 16 13:00:45 2023 -0400 . commit dc1591c3b82fd921a366d5df3b6023acd435e210 Merge: 1ab8301 ea8066d Author: Donald T Date: Sun Apr 16 04:16:08 2023 -0400 Merge branch 'gitlab' of gitlab.com:tangnachuan1208/dotfiles into gitlab commit 1ab83017bec3c84cd61a2d1932f70367337199e0 Author: Donald T Date: Sun Apr 16 04:16:02 2023 -0400 . commit ba9c3f96e41cb1271341c407b771ea3da01ea46e Author: Donald T Date: Sun Apr 16 04:15:46 2023 -0400 . commit ea8066d90f1641b516fb60224763ada2af2a428e Author: Nachuan Tang Date: Sat Apr 15 18:06:44 2023 -0400 . commit 5cc85602ce355ac341ee69ac6931744a4d252163 Author: Nachuan Tang Date: Sat Apr 15 03:03:48 2023 -0400 . commit fa6493a393c4f61532b91408e6546fd17f587486 Author: Donald T Date: Fri Apr 14 17:17:50 2023 -0400 . commit b7937e39049ac61507a95c8e8345a9622c7ace56 Author: Donald T Date: Fri Apr 14 16:22:38 2023 -0400 . commit 1fc71a9a93708b2509e47f88ae0e48350a8cb7e2 Author: Nachuan Tang Date: Thu Apr 13 22:25:39 2023 -0400 . commit 9e6679cbe0fd54db2e5ac2427f2e2ef1193c8578 Author: Nachuan Tang Date: Thu Apr 13 01:56:05 2023 -0400 . commit 8f0382f9a5e632f55cbafaa4dfe778cfd48e799b Author: Donald T Date: Wed Apr 12 13:49:20 2023 -0400 . commit 020ad452eb38f39bacc9becd519c4deb7bf75200 Author: Nachuan Tang Date: Wed Apr 12 01:18:37 2023 -0400 . commit a779a3622bfc7cf44ea16aca494c0169508a02de Author: Nachuan Tang Date: Wed Apr 12 00:27:01 2023 -0400 . commit 6b2762ec49d24304a70552c76cae6457204c1bd9 Author: Nachuan Tang Date: Wed Apr 12 00:06:10 2023 -0400 . commit 50228c85aa6d6ccd03a8b10abcc9be259689e22f Author: Nachuan Tang Date: Tue Apr 11 23:04:03 2023 -0400 . commit 4f40c2604ddbfa527c7cc414903e65a2e650c8e6 Author: Nachuan Tang Date: Tue Apr 11 21:42:30 2023 -0400 . commit b59ab4008e4d385853923e6ef8686aeb06016657 Author: Donald T Date: Tue Apr 11 21:18:29 2023 -0400 . commit 71e866eae4b1f5277a58574a22112cbbc5ee8217 Author: Donald T Date: Tue Apr 11 21:10:32 2023 -0400 . commit c960b981ead6f7a54deda6f5598ba75f11eb2b60 Author: Donald T Date: Tue Apr 11 20:35:47 2023 -0400 . commit 7245012bb8a81a2bc81b45576b53c8a40b95b075 Author: Donald T Date: Tue Apr 11 20:35:37 2023 -0400 . commit 5414f79cf47236bf052975d58f6f3cfd6f974dae Author: Donald T Date: Tue Apr 11 19:56:24 2023 -0400 neovim theme handle linked hi commit b646b3379ab80aff56174643aa3cf4c2877115c4 Author: Donald T Date: Tue Apr 11 04:42:33 2023 -0400 . commit 7c40fed18ee3e867883c097c9654c9953d15f874 Author: Donald T Date: Tue Apr 11 04:33:39 2023 -0400 . commit 470e697fc356e173a5ea014539ef8595582a5178 Merge: 1a033ed 540e599 Author: Donald T Date: Tue Apr 11 04:07:13 2023 -0400 Merge branch 'gitlab' of gitlab.com:tangnachuan1208/dotfiles into gitlab commit 1a033ed725625e45a9d6d6e7f725e769c05313f2 Author: Donald T Date: Tue Apr 11 04:07:09 2023 -0400 . commit 540e599ba85869fe236c8c1a9ef2729ace1a9a60 Author: Nachuan Tang Date: Tue Apr 11 03:28:57 2023 -0400 . commit 353baed95808a186b1c88bb19a253dddd58636ff Author: Nachuan Tang Date: Mon Apr 10 16:09:51 2023 -0400 . commit 2646334fca2f50321c1e722d9f4902b23d68e03d Author: Nachuan Tang Date: Mon Apr 10 14:05:13 2023 -0400 . commit f03e8c05e2df0012e5b818847bd5055f226a16fd Author: Nachuan Tang Date: Mon Apr 10 05:58:25 2023 -0400 . commit 425c4726611b41bcc06310228d53b32f4b2c4ff3 Author: Donald T Date: Mon Apr 10 13:04:29 2023 -0400 . commit 58987e779b5b262e508bdb0fcfe64d9ac8260a34 Author: Nachuan Tang Date: Mon Apr 10 05:05:02 2023 -0400 . commit acea1d24abd1c8944c57a7b8cf42d83c268ad8a6 Author: Nachuan Tang Date: Mon Apr 10 04:24:11 2023 -0400 . commit aae699d87bb779c08ca0ee9d753591950e2e1ded Author: Donald T Date: Mon Apr 10 01:16:38 2023 -0400 . commit 6c9a99677b547a51058b20935aaa000eaa0b8bfe Author: Nachuan Tang Date: Sun Apr 9 20:51:34 2023 -0400 . commit d3be402926167053f93ee6e73157286c34c9b96e Author: Nachuan Tang Date: Sun Apr 9 17:13:17 2023 -0400 . commit 3467157ffc607f2f25eca1937979fd9e3f844991 Author: Nachuan Tang Date: Sun Apr 9 17:02:07 2023 -0400 . commit a7f0bf2cf8c23e993c520556ab9d56992620a7ef Author: Donald T Date: Sun Apr 9 14:15:45 2023 -0400 . commit 011f56acb8d952df923ed268099c59dec4550b05 Author: Donald T Date: Sun Apr 9 12:40:49 2023 -0400 . commit a8100759f84aff64d137b0347f3ee1a13735563c Author: Nachuan Tang Date: Sun Apr 9 01:58:34 2023 -0400 . commit 937655d11ff4dfb5f53f000726d90ad23c18001f Author: Nachuan Tang Date: Sat Apr 8 21:15:53 2023 -0400 . commit 5f028a3fdac8bf999b323eae1687d5e9cd90c582 Author: Nachuan Tang Date: Sat Apr 8 18:59:57 2023 -0400 . commit 0a8c4d2c36bb32244ae8c73770be97cf9544d6ce Author: Donald T Date: Sat Apr 8 15:34:24 2023 -0400 . commit 6dc51cd6ec29277a2a310a12c8a5e531b2fc1cbf Author: Donald T Date: Sat Apr 8 12:55:56 2023 -0400 . commit cdb43ca867fdbaf9590a61d7e964135bf1fbb446 Author: Donald T Date: Sat Apr 8 02:54:41 2023 -0400 . commit 4950f3f01ed0fcfb0ec65040c5c933e176837812 Author: Donald T Date: Fri Apr 7 02:27:05 2023 -0400 . commit 42a046c3bd3eb49360814c589da0699e5b55abd2 Author: Donald T Date: Thu Apr 6 22:20:06 2023 -0400 . commit 659febb83e50b8248d6d11d81ca93e8602cc8bc8 Author: Donald T Date: Thu Apr 6 18:49:28 2023 -0400 . commit 6d9503b24c23fa2d471b6c6411c61fc39f227147 Author: Donald T Date: Thu Apr 6 01:59:15 2023 -0400 . commit add1eb8588f0d713bf606d8630f13e136aa2b629 Author: Donald T Date: Thu Apr 6 01:59:07 2023 -0400 . commit 5e742f86d4b66950aabe4db5de3170d155e2651f Author: Donald T Date: Thu Apr 6 01:31:03 2023 -0400 fix: non bottom windowns' fillchars commit a5106e1f03272f1a57b53f00700e49eee95e16fa Author: Donald T Date: Wed Apr 5 13:03:17 2023 -0400 . commit 015d0777ded7d5dcbb2621a58ce00eca0f76a35c Author: Donald T Date: Tue Apr 4 13:48:13 2023 -0400 . commit ae4c58b44149e8abe20c930b312c95385181ff8c Author: Donald T Date: Tue Apr 4 13:21:51 2023 -0400 . commit 88e20f1483f263a08a9031a6f65caa25bc73a564 Author: Donald T Date: Tue Apr 4 13:21:41 2023 -0400 . commit ac32272023fd5e0fe236f7c1ea5fde1442e15ee3 Author: Donald T Date: Tue Apr 4 05:41:40 2023 -0400 . commit 30da5d0a4b4bfd180f40d3d27e2f68553fcd6f0a Author: Donald T Date: Mon Apr 3 18:20:15 2023 -0400 add global statusline commit 1cb22a5a558b94506e024b396ef96c39f25b54d1 Author: Donald T Date: Sun Apr 2 05:14:01 2023 -0400 . commit a266737bc28d108efa6b6d9377bebafbb44a4cc6 Author: Donald T Date: Sun Apr 2 02:18:17 2023 -0400 add demo commit 33c6f5dc475f2a0b02a72f64c954204c4abeb0bd Author: Donald T Date: Sat Apr 1 20:45:23 2023 -0400 . commit 888f8aab0a34ca47d2129b6d1843e44ad8fe419d Author: Donald T Date: Sat Apr 1 18:47:35 2023 -0400 . commit ea82974dc10729396e0a80a52f413140f39d7d9b Author: Donald T Date: Sat Apr 1 18:29:14 2023 -0400 . commit 894f37a2073fa6314e6fc32d07ff1337376d8c40 Author: Nachuan Tang Date: Sat Apr 1 16:28:55 2023 -0400 add trace.vim commit e280e7a1d60cae9fd6ec173f6c77ffacb47a5328 Author: Nachuan Tang Date: Sat Apr 1 16:17:02 2023 -0400 . commit ef3e51bbe50211b4f3db4f42bfde4fac1547b277 Author: Donald T Date: Sat Apr 1 15:19:20 2023 -0400 . commit 6e7f86b535bf0eced8f13d0f88efd5178604ddd5 Author: Donald T Date: Sat Apr 1 15:15:35 2023 -0400 . commit 9e942741c54ed648f3b15bf587b62118be9b5373 Author: Donald T Date: Sat Apr 1 14:40:32 2023 -0400 . commit a1a4be8f93fa32f2691087796c4d1c545761258b Author: Donald T Date: Sat Apr 1 14:38:37 2023 -0400 . commit 90a8f6add2e8bd8c973992145c831c2e2688ccb9 Author: Donald T Date: Sat Apr 1 14:35:24 2023 -0400 . commit 4100fb3b815dce519c7b305e6b63897082bacdd8 Author: Donald T Date: Sat Apr 1 05:40:59 2023 -0400 . commit d581fb1c276c355bf85f73689b33d97ef0c5ce20 Author: Donald T Date: Sat Apr 1 05:11:14 2023 -0400 . commit 30a5a319d690665e106fb074750da87da0fc17d9 Author: Donald T Date: Fri Mar 31 13:09:15 2023 -0400 . commit 0f61b98009dd804f9e00c92909d5f52143f66143 Author: Donald T Date: Fri Mar 31 03:47:44 2023 -0400 . commit e7cd4991139f3a27f5db40cc9034bf44672a9517 Author: Donald T Date: Fri Mar 31 02:56:40 2023 -0400 win compatibility commit 179ac4f4057c0a6b88e5abde14414d0a4c785006 Author: Donald T Date: Fri Mar 31 02:09:51 2023 -0400 win compatibility commit 212e64eaebc7ce59866f537b41b42a22cc2212c1 Author: Donald T Date: Fri Mar 31 01:01:33 2023 -0400 win compatibility commit 21e06398719f2b363e8f48ae72a7017ffe5912a7 Author: Donald T Date: Thu Mar 30 19:37:04 2023 -0400 . commit 79660071b4d68f9e07a71179e77b2e994e5ca7df Author: Donald T Date: Thu Mar 30 16:11:00 2023 -0400 fix airline coc extension not updated properly commit bd24de81a9bb8d2fb29ef48908b3c26c5f246550 Author: Donald T Date: Thu Mar 30 14:22:47 2023 -0400 add my own transparent method commit 15c3fc74c329ba256d36b0056756132c5ce296b8 Author: Donald T Date: Thu Mar 30 04:58:41 2023 -0400 . commit 2405ae16e8cc26f51a641d7a71a7ab5d7972b1e6 Author: Donald T Date: Thu Mar 30 02:50:17 2023 -0400 . commit f6d251b4ced41b855737fe713f2e18d98af988d5 Author: Donald T Date: Thu Mar 30 00:00:48 2023 -0400 . commit 67c25293ddb51686e34a76c7437752de244c8e12 Author: Donald T Date: Wed Mar 29 23:48:17 2023 -0400 . commit 3bba91fdb46d23b50e9ef9805274ab9583f53572 Author: Donald T Date: Wed Mar 29 13:15:00 2023 -0400 . commit 22300562576222261d3b75f03fbd9ca6b17c5d7a Author: Donald T Date: Wed Mar 29 12:35:50 2023 -0400 . commit a42a2ccfa022070524a8b4aa5c3eaed884c2826f Author: Donald T Date: Wed Mar 29 03:51:15 2023 -0400 imporve preview script to support cat commit d69f83aaa0af5310e639af72c0d5d9831a3559fe Author: Donald T Date: Wed Mar 29 01:24:50 2023 -0400 . commit 29fbf97bbbd636f569b6ca366ce5c8d24bfb537e Author: Donald T Date: Wed Mar 29 01:19:37 2023 -0400 move theme related function commit be7844c3078596bbd29548e7adad8fa4eee707e1 Author: Donald T Date: Wed Mar 29 00:40:10 2023 -0400 move more functions to utils commit 4f54fd428a8fbbf507324feb5390f84d86adf0a1 Author: Donald T Date: Wed Mar 29 00:01:29 2023 -0400 add config for coc-fzf commit b8f095f7c7cfa55f0963a3c0f580896c7a3f50bc Author: Donald T Date: Tue Mar 28 22:44:53 2023 -0400 move functions commit 8e8610f5214defae8fd7b7cd7e329278a23a7469 Author: Donald T Date: Tue Mar 28 01:48:36 2023 -0400 . commit 2797153564ac377c5c39e3f34a5736cda5530b51 Author: Donald T Date: Tue Mar 28 00:54:26 2023 -0400 . commit 90e1382038b88a7807ec09fc23dbc38fb5707d39 Author: Donald T Date: Mon Mar 27 22:50:23 2023 -0400 . commit 37681413115c5e746c25e252ee2ef98addfe5b9d Author: Donald T Date: Mon Mar 27 22:36:21 2023 -0400 . commit 839816c3eb10093ed3a1200f43470b4841273a3b Author: Donald T Date: Mon Mar 27 20:19:20 2023 -0400 fix path issue commit 5581395825ca4876e67abf8cdc2567d431a3c1cb Author: Donald T Date: Mon Mar 27 19:52:13 2023 -0400 . commit 141b58a12b8f1bcd43db6902752c402e02dbd371 Author: Donald T Date: Mon Mar 27 19:52:01 2023 -0400 . commit c0de4df26f83cebd99d6a65a9ad42e4de086c08a Author: Donald T Date: Mon Mar 27 19:16:21 2023 -0400 add fish config and imporve install script commit c7313fd820c0cd0ad7727fda98c417f62c6c23de Author: Donald T Date: Mon Mar 27 18:08:49 2023 -0400 fix bugs commit 5de8083028596f91da45e6d2d7abcc40f7bdb6ad Author: Donald T Date: Mon Mar 27 18:00:02 2023 -0400 fix ariline bug commit 057a255478d3ee08095f092cf671cd1fbdfc916d Author: Donald T Date: Mon Mar 27 16:07:07 2023 -0400 . commit 13af63e75a4cd1dce1407db8c09ca6b7b74dcd7f Author: Donald T Date: Mon Mar 27 15:36:15 2023 -0400 . commit 1969e30302e1fc2a84293bd9d3e29d98c0a2abec Author: Donald T Date: Mon Mar 27 15:24:47 2023 -0400 . commit fd7a79c760ef9942d033eb206c17148aa11ddc9b Author: Donald T Date: Mon Mar 27 14:06:49 2023 -0400 . commit 7f39e43e8e58139c1a55e889b8c525f767239b79 Author: Nachuan Tang Date: Mon Mar 27 04:07:45 2023 -0400 fix fzf preview not working in windows commit 2b3784d04bbb1c1412c5e46c35d4825ef492196a Author: Nachuan Tang Date: Mon Mar 27 03:02:05 2023 -0400 . commit 9c5ee3626d7f9416ec243c3fcb2d5b41102a1792 Author: Nachuan Tang Date: Sun Mar 26 20:14:31 2023 -0400 . commit d19b6b79d898a40385553d02f64aa3690e5aeb62 Author: Nachuan Tang Date: Sun Mar 26 06:11:39 2023 -0400 . commit 49c77cc5135f5578b2268b4819311c45f6a00702 Author: Nachuan Tang Date: Sun Mar 26 04:52:33 2023 -0400 . commit 870f45a06cb849e0d91b6dac9ce1da8d3f2f1f7e Author: Nachuan Tang Date: Sun Mar 26 04:50:01 2023 -0400 structure change commit 251a36fbd66b861dc2a96a403a73dcdc20f0289c Author: Nachuan Tang Date: Sun Mar 26 02:38:05 2023 -0400 . --- .gitignore | 3 + .tmux.conf | 40 +- .vimrc | 152 +-- .vimrc.bundles | 963 ------------------ .vimrc.lua | 590 ----------- README.md | 1 + bash_tools/fzf_file_seletor.sh | 3 - coc-settings.json | 3 - config/fish/config.fish | 7 + config/nvim/init.vim | 6 - {user => config/user}/git_config.sh | 0 config/vim/.gitignore | 1 + .../airline/themes/sunbather_dark.vim | 85 ++ .../airline/themes/sunbather_light.vim | 85 ++ config/vim/autoload/clipboard.vim | 27 + config/vim/autoload/config.vim | 45 + config/vim/autoload/options.vim | 169 +++ config/vim/autoload/os.vim | 14 + config/vim/autoload/theme.vim | 383 +++++++ config/vim/autoload/utils.vim | 194 ++++ config/vim/bin/preview.py | 98 ++ config/vim/colors/sunbather_dark.vim | 214 ++++ config/vim/colors/sunbather_light.vim | 214 ++++ config/vim/configs/gui-config.vim | 30 + config/vim/lua/fzy_lua.lua | 276 +++++ .../aerial-nvim-config.lua | 18 + .../github-nvim-theme-config.lua | 13 + .../gitsigns-nvim-config.lua | 50 + .../impatient-nvim-config.lua | 4 + .../indent-blankline-nvim-config.lua | 13 + config/vim/lua/lua-plugin-settings/init.lua | 60 ++ .../lua-plugin-settings/iron-nvim-config.lua | 50 + .../lua-plugin-settings/leap-nvim-config.lua | 4 + .../lualine-nvim-config.lua | 108 ++ .../mini-animate-config.lua | 30 + .../mini-colors-config.lua | 4 + .../mini-indentscope-config.lua | 21 + .../lua-plugin-settings/noice-nvim-config.lua | 47 + .../nvim-scrollbar-config.lua | 17 + .../nvim-tree-lua-config.lua | 68 ++ .../nvim-treesitter-config.lua | 17 + .../project-nvim-config.lua | 26 + .../telescope-nvim-config.lua | 113 ++ .../toggleterm-nvim-config.lua | 65 ++ .../vim-illuminate-config.lua | 30 + .../vim-matchup-config.lua | 9 + .../which-key-nvim-config.lua | 11 + config/vim/plugin/config.vim | 13 + .../Copilot.vim.config.vim | 6 + .../vim-plugin-settings/coc-fzf.config.vim | 8 + .../vim-plugin-settings/coc.nvim.config.vim | 90 +- .../vim-plugin-settings/codi.vim.config.vim | 3 + .../vim-plugin-settings/ctrlp.vim.config.vim | 4 + .../vim-plugin-settings/everforest.config.vim | 32 + .../vim-plugin-settings/fzf.vim.config.vim | 121 +++ .../vim-plugin-settings/goyo.vim.config.vim | 16 + .../vim-plugin-settings/indentLine.config.vim | 5 + .../lightline.vim.config.vim | 136 +++ .../minimap.vim.config.vim | 13 + .../vim-plugin-settings/nerdtree.config.vim | 53 + .../papercolor-theme.config.vim | 24 + .../vim/vim-plugin-settings/tagbar.config.vim | 14 + .../vim-airline.config.vim | 159 +++ .../vim-bufferline.config.vim | 17 + .../vim-devicons.config.vim | 5 + .../vim-floaterm.config.vim | 53 + .../vim-gitgutter.config.vim | 5 + .../vim-gutentags.config.vim | 10 + .../vim-illuminate.config.vim | 35 + .../vim-matchup.config.vim | 5 + .../vim-plugin-settings/vim-rooter.config.vim | 8 + .../vim-plugin-settings/vim-sneak.config.vim | 5 + .../vim-startify.config.vim | 58 ++ .../vim-tmux-navigator.config.vim | 11 + .../vim9/fuzzyy.config.vim | 7 + .../vim9/vim-global-statusline.config.vim | 188 ++++ .../vim/vim-plugin-settings/vimtex.config.vim | 7 + .../vim-plugin-settings/vista.vim.config.vim | 60 ++ .../wilder.nvim.config.vim | 31 + .../vim-plugin-settings/winresizer.config.vim | 8 + .../vim-plugin-settings/zoxide.vim.config.vim | 3 + config/wezterm/.wezterm.lua | 1 + install.sh | 128 ++- main.vim | 300 ++++++ test.vim | 32 + utils.vim | 268 ----- vimreset.sh | 4 + windows.tips | 18 - 88 files changed, 4346 insertions(+), 1999 deletions(-) delete mode 100644 .vimrc.bundles delete mode 100644 .vimrc.lua delete mode 100644 coc-settings.json create mode 100644 config/fish/config.fish delete mode 100644 config/nvim/init.vim rename {user => config/user}/git_config.sh (100%) create mode 100644 config/vim/.gitignore create mode 100644 config/vim/autoload/airline/themes/sunbather_dark.vim create mode 100644 config/vim/autoload/airline/themes/sunbather_light.vim create mode 100644 config/vim/autoload/clipboard.vim create mode 100644 config/vim/autoload/config.vim create mode 100644 config/vim/autoload/options.vim create mode 100644 config/vim/autoload/os.vim create mode 100644 config/vim/autoload/theme.vim create mode 100644 config/vim/autoload/utils.vim create mode 100755 config/vim/bin/preview.py create mode 100644 config/vim/colors/sunbather_dark.vim create mode 100644 config/vim/colors/sunbather_light.vim create mode 100644 config/vim/configs/gui-config.vim create mode 100644 config/vim/lua/fzy_lua.lua create mode 100644 config/vim/lua/lua-plugin-settings/aerial-nvim-config.lua create mode 100644 config/vim/lua/lua-plugin-settings/github-nvim-theme-config.lua create mode 100644 config/vim/lua/lua-plugin-settings/gitsigns-nvim-config.lua create mode 100644 config/vim/lua/lua-plugin-settings/impatient-nvim-config.lua create mode 100644 config/vim/lua/lua-plugin-settings/indent-blankline-nvim-config.lua create mode 100644 config/vim/lua/lua-plugin-settings/init.lua create mode 100644 config/vim/lua/lua-plugin-settings/iron-nvim-config.lua create mode 100644 config/vim/lua/lua-plugin-settings/leap-nvim-config.lua create mode 100644 config/vim/lua/lua-plugin-settings/lualine-nvim-config.lua create mode 100644 config/vim/lua/lua-plugin-settings/mini-animate-config.lua create mode 100644 config/vim/lua/lua-plugin-settings/mini-colors-config.lua create mode 100644 config/vim/lua/lua-plugin-settings/mini-indentscope-config.lua create mode 100644 config/vim/lua/lua-plugin-settings/noice-nvim-config.lua create mode 100644 config/vim/lua/lua-plugin-settings/nvim-scrollbar-config.lua create mode 100644 config/vim/lua/lua-plugin-settings/nvim-tree-lua-config.lua create mode 100644 config/vim/lua/lua-plugin-settings/nvim-treesitter-config.lua create mode 100644 config/vim/lua/lua-plugin-settings/project-nvim-config.lua create mode 100644 config/vim/lua/lua-plugin-settings/telescope-nvim-config.lua create mode 100644 config/vim/lua/lua-plugin-settings/toggleterm-nvim-config.lua create mode 100644 config/vim/lua/lua-plugin-settings/vim-illuminate-config.lua create mode 100644 config/vim/lua/lua-plugin-settings/vim-matchup-config.lua create mode 100644 config/vim/lua/lua-plugin-settings/which-key-nvim-config.lua create mode 100644 config/vim/plugin/config.vim create mode 100644 config/vim/vim-plugin-settings/Copilot.vim.config.vim create mode 100644 config/vim/vim-plugin-settings/coc-fzf.config.vim rename coc-nvim-config.vim => config/vim/vim-plugin-settings/coc.nvim.config.vim (60%) create mode 100644 config/vim/vim-plugin-settings/codi.vim.config.vim create mode 100644 config/vim/vim-plugin-settings/ctrlp.vim.config.vim create mode 100644 config/vim/vim-plugin-settings/everforest.config.vim create mode 100644 config/vim/vim-plugin-settings/fzf.vim.config.vim create mode 100644 config/vim/vim-plugin-settings/goyo.vim.config.vim create mode 100644 config/vim/vim-plugin-settings/indentLine.config.vim create mode 100644 config/vim/vim-plugin-settings/lightline.vim.config.vim create mode 100644 config/vim/vim-plugin-settings/minimap.vim.config.vim create mode 100644 config/vim/vim-plugin-settings/nerdtree.config.vim create mode 100644 config/vim/vim-plugin-settings/papercolor-theme.config.vim create mode 100644 config/vim/vim-plugin-settings/tagbar.config.vim create mode 100644 config/vim/vim-plugin-settings/vim-airline.config.vim create mode 100644 config/vim/vim-plugin-settings/vim-bufferline.config.vim create mode 100644 config/vim/vim-plugin-settings/vim-devicons.config.vim create mode 100644 config/vim/vim-plugin-settings/vim-floaterm.config.vim create mode 100644 config/vim/vim-plugin-settings/vim-gitgutter.config.vim create mode 100644 config/vim/vim-plugin-settings/vim-gutentags.config.vim create mode 100644 config/vim/vim-plugin-settings/vim-illuminate.config.vim create mode 100644 config/vim/vim-plugin-settings/vim-matchup.config.vim create mode 100644 config/vim/vim-plugin-settings/vim-rooter.config.vim create mode 100644 config/vim/vim-plugin-settings/vim-sneak.config.vim create mode 100644 config/vim/vim-plugin-settings/vim-startify.config.vim create mode 100644 config/vim/vim-plugin-settings/vim-tmux-navigator.config.vim create mode 100644 config/vim/vim-plugin-settings/vim9/fuzzyy.config.vim create mode 100644 config/vim/vim-plugin-settings/vim9/vim-global-statusline.config.vim create mode 100644 config/vim/vim-plugin-settings/vimtex.config.vim create mode 100644 config/vim/vim-plugin-settings/vista.vim.config.vim create mode 100644 config/vim/vim-plugin-settings/wilder.nvim.config.vim create mode 100644 config/vim/vim-plugin-settings/winresizer.config.vim create mode 100644 config/vim/vim-plugin-settings/zoxide.vim.config.vim create mode 100644 config/wezterm/.wezterm.lua create mode 100644 main.vim create mode 100644 test.vim delete mode 100644 utils.vim create mode 100755 vimreset.sh delete mode 100644 windows.tips diff --git a/.gitignore b/.gitignore index ee9f8a0..4b50cca 100644 --- a/.gitignore +++ b/.gitignore @@ -4,3 +4,6 @@ .vim/ node_modules/ tags +.netrwhist +.vimspector.json +*.log diff --git a/.tmux.conf b/.tmux.conf index 163430e..2812ad4 100644 --- a/.tmux.conf +++ b/.tmux.conf @@ -1,7 +1,7 @@ set-option -sg escape-time 10 -# set-option -g default-terminal "screen-256color" -set -g default-terminal "xterm-256color" -set-option -g history-limit 6000 +set -g default-terminal "screen-256color" +# set -g default-terminal "xterm-256color" +set-option -g history-limit 1000000 set -g focus-events on # requirement for vim's vim-tmux-clipboard plugin @@ -13,27 +13,27 @@ setw -g mode-keys vi bind-key -T copy-mode-vi 'v' send -X begin-selection bind-key -T copy-mode-vi 'y' send-keys -X copy-pipe-and-cancel 'xclip -in -selection clipboard' -# vim-like pane resizing +# vim-like pane resizing bind-key -r C-k resize-pane -U bind-key -r C-j resize-pane -D bind-key -r C-h resize-pane -L bind-key -r C-l resize-pane -R # vim-like pane switching -# bind-key -n C-k select-pane -U -# bind-key -n C-j select-pane -D -# bind-key -n C-h select-pane -L -# bind-key -n C-l select-pane -R +# bind-key -n C-k select-pane -U +# bind-key -n C-j select-pane -D +# bind-key -n C-h select-pane -L +# bind-key -n C-l select-pane -R # and now unbind keys -unbind Up -unbind Down -unbind Left -unbind Right +unbind Up +unbind Down +unbind Left +unbind Right -unbind C-Up -unbind C-Down -unbind C-Left +unbind C-Up +unbind C-Down +unbind C-Left unbind C-Right # Smart pane switching with awareness of Vim splits. @@ -55,3 +55,13 @@ bind-key -T copy-mode-vi 'C-j' select-pane -D bind-key -T copy-mode-vi 'C-k' select-pane -U bind-key -T copy-mode-vi 'C-l' select-pane -R bind-key -T copy-mode-vi 'C-\' select-pane -l + +set -g @plugin 'tmux-plugins/tpm' +set -g @plugin 'tmux-plugins/tmux-sensible' + +set -g @plugin 'roosta/tmux-fuzzback' +set -g @fuzzback-popup-size '90%' +set -g @fuzzback-popup 1 +set -g @fuzzback-fzf-colors 'gutter:-1,bg+:-1' + +run '~/.tmux/plugins/tpm/tpm' diff --git a/.vimrc b/.vimrc index ff5cf1d..c7b3d6e 100644 --- a/.vimrc +++ b/.vimrc @@ -1,22 +1,14 @@ - " get current neovim version - let g:vim_version = -1 - - " set nocompatible + " dotfile location + let g:dotfiledir = expand(fnamemodify(resolve(expand(':p')), ':h').'/') " vim runtime folder let g:vim_dir = expand('~/.vim/') - " dotfile location - let g:mydotfiles_directory = expand('~/.dotfiles/') - let after_directory = g:mydotfiles_directory . 'config/vi-plugs/coc-theme/after/' - " detect vim type(vim or nvim) let g:vim_v = 0 if has('nvim') let g:vim_type = 'nvim' - let g:vim_version = matchstr(execute('version'), 'NVIM v\zs[^\n]*') else let g:vim_type = 'vim' - let g:vim_version = matchstr(execute('version'), 'Vi IMproved \zs[^\n]*') let g:vim_v = v:version endif @@ -31,11 +23,8 @@ endif endif - let g:vim_version = str2float(g:vim_version) - let g:dotfile_path = '~/.dotfiles/' set runtimepath^=~/.vim runtimepath+=~/.vim/after - execute('set runtimepath^=' . after_directory) let &packpath=&runtimepath " The default leader is '\', but many people prefer ',' as it's in a standard @@ -44,19 +33,14 @@ " General { - noremap h :noh " turn off highlight - filetype plugin indent on " Automatically detect file types. syntax on " Syntax highlighting + set belloff=all " Turn off the annoying bell set mouse=a " Automatically enable mouse usage set mousehide " Hide the mouse cursor while typing + set shortmess+=F " Don't show the file name when open new file " scriptencoding utf-8 - " Most prefer to automatically switch to the current file directory when - " a new buffer is opened; - " autocmd BufEnter * if bufname("") !~ "^\[A-Za-z0-9\]*://" | lcd %:p:h | endif - " Always switch to the current file directory - set shortmess+=filmnrxoOtT " Abbrev. of messages (avoids 'hit enter') " set viewoptions=folds,options,cursor,unix,slash " Better Unix / Windows compatibility " set virtualedit=onemore " Allow for cursor beyond last character @@ -72,26 +56,11 @@ " autocmd FileType c,cpp,python,java setlocal tabstop=4 shiftwidth=4 softtabstop=4 autocmd BufNewFile,BufRead *.html.twig set filetype=html.twig autocmd FileType haskell,puppet,ruby,yml setlocal expandtab shiftwidth=2 softtabstop=2 - autocmd FileType vim execute('setlocal iskeyword='.&iskeyword.',:') " Instead of reverting the cursor to the last position in the buffer, we " set it to the first line when editing a git commit message autocmd FileType gitcommit au! BufEnter COMMIT_EDITMSG call setpos('.', [0, 1, 1, 0]) augroup END - " " http://vim.wikia.com/wiki/Restore_cursor_to_file_position_in_previous_editing_session - " " Restore cursor to file position in previous editing session - " function! ResCur() - " if line("'\"") <= line("$") - " silent! normal! g`" - " return 1 - " endif - " endfunction - - " augroup resCur - " autocmd! - " autocmd BufWinEnter * call ResCur() - " augroup END - " Setting up the directories { " set backup " Backups are nice ... if has('persistent_undo') @@ -105,17 +74,13 @@ " Vim UI { " - set nocursorline " Highlight current line + set noshowmode + set cursorline " Highlight current line + set cursorlineopt=number " only highlight line number set cmdheight=1 " get rid of the extra useless line at the bottom(if not working, probably a plugin is changing the value) - " if has('cmdline_info') - " set ruler " Show the ruler - " set rulerformat=%30(%=\:b%n%y%m%r%w\ %l,%c%V\ %P%) " A ruler on steroids - " set showcmd " Show partial commands in status line and - " endif - set backspace=indent,eol,start " Backspace for dummies - set fillchars=eob:\ " it can remove '~' at the end of buffer + set fillchars=eob:\ ,vert:│,stl:\ ,stlnc:\ , " it can remove '~' at the end of buffer, and window split line set number " Line numbers on set showmatch " Show matching brackets/parenthesis set incsearch " Find as you type search @@ -128,19 +93,24 @@ set whichwrap=b,s,h,l,<,>,[,] " Backspace and cursor keys wrap too set scrolljump=1 " Lines to scroll when cursor leaves screen set scrolloff=5 " Minimum lines to keep above and below cursor - set sidescrolloff=5 " Minimum lines to keep at the left or right of the cursor - + set sidescrolloff=5 " Minimum lines to keep at the left or right of the cursor + set display=lastline " don't replace whole long line with @@@ + augroup cc + au! + autocmd FileType c,cpp,vim,java,python,lua set colorcolumn=80 + autocmd FileType help set colorcolumn= + augroup END " } " Formatting { - set autoindent " Indent at the same level of the previous line set expandtab " Tabs are spaces, not tabs set shiftwidth=4 " Use indents of 4 spaces set tabstop=4 " An indentation every four columns set softtabstop=4 " Let backspace delete indent + set conceallevel=0 set nojoinspaces " Prevents inserting two spaces after punctuation on a join (J) set splitright " Puts new vsplit windows to the right of the current set splitbelow " Puts new split windows to the bottom of the current @@ -166,13 +136,16 @@ " Yank from the cursor to the end of the line, to be consistent with C and D. nnoremap Y y$ - if has('nvim') - set foldmethod=expr - set foldexpr=nvim_treesitter#foldexpr() - else - set foldmethod=syntax - autocmd FileType python,vim set foldmethod=indent - endif + set foldmethod=syntax + augroup vimfold + autocmd! + if has('nvim') + " check tree-sitter config + else + autocmd FileType python set foldmethod=indent + autocmd FileType vim set foldmethod=syntax + endif + augroup END " so when a buffer open it wouldn't be fold by default " set nofoldenable @@ -233,27 +206,6 @@ endfunction call InitializeDirectories() - " Shell command - " function! s:RunShellCommand(cmdline) - " botright new - - " setlocal buftype=nofile - " setlocal bufhidden=delete - " setlocal nobuflisted - " setlocal noswapfile - " setlocal nowrap - " setlocal filetype=shell - " setlocal syntax=shell - - " call setline(1, a:cmdline) - " call setline(2, substitute(a:cmdline, '.', '=', 'g')) - " execute 'silent $read !' . escape(a:cmdline, '%#') - " setlocal nomodifiable - " endfunction - - " command! -complete=file -nargs=+ Shell call s:RunShellCommand() - " e.g. Grep current file for : Shell grep -Hn % - " Visual mode pressing * or # searches for the current selection " Super useful! From an idea by Michael Naumann vnoremap * :call VisualSelection('', '')/=@/ @@ -262,32 +214,32 @@ " Fix file type error for typescript autocmd BufNewFile,BufRead *.ts set filetype=typescript -" These are to cancel the default behavior of d, D, c, C -" to put the text they delete in the default register. -" Note that this means e.g. "ad won't copy the text into -" register a anymore. You have to explicitly yank it. -" TIPS: you can type :registers to view value in each registers - " vnoremap y "+y - " nnoremap y "+y - " copy to system if g:os == 'Darwin' || g:os == 'Windows' set clipboard=unnamed else - set clipboard=unnamedplus - if g:isWSL - " will cause freezing of vim, not sure why - " function CopyToWin(timer) - " try - " call system('/mnt/c/windows/system32/clip.exe ',@") - " catch - " endtry - " endfunction - " augroup Yank - " autocmd! - " " autocmd TextYankPost * :call system('/mnt/c/windows/system32/clip.exe ',@") - " autocmd TextYankPost * let _ = timer_start(0, 'CopyToWin', { 'repeat': 1 }) - " augroup END + if g:isWSL && has('nvim') + " :h clipboard-wsl + set clipboard=unnamedplus + + " cache has to be enabled otherwise cause freeze + " obviously wsl without xclip won't work + let g:clipboard = { + \ 'name': 'WSLxclip', + \ 'copy': { + \ '+': 'xclip -quiet -i -selection clipboard', + \ '*': 'xclip -quiet -i -selection primary', + \ }, + \ 'paste': { + \ '+': 'xclip -o -selection clipboard', + \ '*': 'xclip -o -selection primary', + \ }, + \ 'cache_enabled': 1, + \ } + elseif g:isWSL + set clipboard=unnamedplus + else + set clipboard=unnamedplus endif endif @@ -299,8 +251,12 @@ exec "set t_PE=\e[201~" endif +" disable netrw as i am using nerdtree and nvim-tree +let g:loaded_netrw = 1 +let g:loaded_netrwPlugin = 1 + " Use bundles config { - if filereadable(expand("~/.vimrc.bundles")) - source ~/.vimrc.bundles + if filereadable(g:dotfiledir."/main.vim") + execute('source '.g:dotfiledir.'/main.vim') endif " } diff --git a/.vimrc.bundles b/.vimrc.bundles deleted file mode 100644 index 08cceb4..0000000 --- a/.vimrc.bundles +++ /dev/null @@ -1,963 +0,0 @@ -" (jump to the topic) -" -" OPTIONS -" PLUGIN_INSTALL -" UTILITIES -" PLUGIN_CONFIGURATION " THEME_CONFIGURATION -" KEY_MAPS -" OTHER_CONFIGS - -let g:debug_mode = v:false -let g:high_performence = v:false " set true will also disable animation -let g:autocomplte_enable = v:true -let g:copilot_enable = v:false - -" only in nvim (using which-key) -let g:key_prompt = v:false - -" only used by neovim -let g:classic_vim_ui = v:true -let g:animation_enable = v:true - -let g:swap_dict = [ - \ ['v:false', '0', 'dark', 'false' ], - \ ['v:true' , '1', 'light', 'true']] -" convinient function to swap between two options -nmap t :call SwapWord() - -"""""" PLUGIN_INSTALL """""" - -let g:dotfiledir = expand('~/.dotfiles/') -let g:plugin_dir = expand('~/.vim/plugged/') -let g:config_file_path = g:vim_dir . ".config.vim" -call plug#begin(g:plugin_dir) - " https://github.com/junegunn/vim-plug/wiki/tips - function! Cond(cond, ...) - let opts = get(a:000, 0, {}) - return a:cond ? opts : extend(opts, { 'on': [], 'for': [] }) - endfunction - let g:animation_enable = g:high_performence ? v:false : g:animation_enable - - " custom plugin - Plug 'Donaldttt/fzf-color-preview', Cond(g:vim_v >= 800) - - """" THEME_PLUGINS """" - - Plug 'sainnhe/everforest' - if !g:high_performence - Plug 'bluz71/vim-moonfly-colors', { 'as': 'moonfly' } - Plug 'jacoborus/tender.vim' - Plug 'cocopon/iceberg.vim' - Plug 'catppuccin/nvim', Cond( has('nvim-0.8.2') \|\| g:vim_v >= 900 , { 'as': 'catppuccin' }) - Plug 'NLKNguyen/papercolor-theme' - Plug 'EdenEast/nightfox.nvim', Cond(has('nvim-0.5')) - Plug 'projekt0n/github-nvim-theme', Cond(has('nvim-0.5'), { 'tag': 'v0.0.7' }) - Plug 'folke/tokyonight.nvim', Cond(g:vim_type == 'nvim', { 'branch': 'main' }) - endif - - """""""" END """""""""" - Plug 'lervag/vimtex' - Plug 'github/copilot.vim', Cond(( g:vim_type == 'nvim' \|\| g:vim_v >= 900 ) - \ && g:copilot_enable && executable('node')) - - Plug 'gelguy/wilder.nvim', Cond((g:vim_type == 'vim' \|\| g:classic_vim_ui) && !g:high_performence) - " " To use Python remote plugin features in Vim for wilder, can be skipped - " " Plug 'roxma/nvim-yarp', Cond(g:vim_type == 'vim') - Plug 'roxma/vim-hug-neovim-rpc', Cond(g:vim_v >= 800 && has('python3')) - - Plug 'dstein64/vim-startuptime', Cond(!g:high_performence) - Plug 'simeji/winresizer', Cond(!g:high_performence) - Plug 'rust-lang/rust.vim', { 'for': ['rust'] } - - Plug 'machakann/vim-sandwich' - Plug 'rhysd/conflict-marker.vim' - - Plug 'jiangmiao/auto-pairs' - " Plug 'mg979/vim-visual-multi' - Plug 'RRethy/vim-illuminate', Cond(!g:high_performence) - "Plug 'easymotion/vim-easymotion' - Plug 'mhinz/vim-startify' - " Plug 'ludovicchabant/vim-gutentags' - - Plug 'christoomey/vim-tmux-navigator' - Plug 'airblade/vim-rooter' - Plug 'roxma/vim-tmux-clipboard', Cond(executable('tmux')) - Plug 'liuchengxu/vista.vim', Cond(!g:high_performence) - - "" ESSENTIAL_PLUGINS "" - - " Comment stuff out - Plug 'tpope/vim-commentary' - Plug 'vim-scripts/restore_view.vim' - - " vim only plugins - Plug 'scrooloose/nerdtree', Cond(g:vim_type == 'vim' \|\| !has('nvim-0.8'), { 'on' : ['NERDTreeToggle', 'NERDTreeFind'] }) - Plug 'tiagofumo/vim-nerdtree-syntax-highlight', Cond(g:vim_type == 'vim' && !g:high_performence) - - Plug 'neoclide/coc.nvim', Cond(g:autocomplte_enable && executable('node'), {'branch': 'release'}) - - " only work with vim - if g:vim_type == 'vim' - Plug 'voldikss/vim-floaterm', Cond(has('terminal')) - set encoding=UTF-8 - if executable('fzf') - Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } - Plug 'junegunn/fzf.vim' - Plug 'antoinemadec/coc-fzf' - endif - - Plug 'vim-airline/vim-airline' - Plug 'vim-airline/vim-airline-themes' - Plug 'Donaldttt/vim-bufferline' - Plug 'ryanoasis/vim-devicons' - Plug 'wfxr/minimap.vim', Cond(executable('code-minimap'), {'on' : ['MinimapToggle']}) - endif - - if g:vim_type == 'nvim' - if g:vim_version >= 0.5 - Plug 'xiyaowong/nvim-transparent' - Plug 'lukas-reineke/indent-blankline.nvim', Cond(!g:animation_enable) - Plug 'echasnovski/mini.indentscope', Cond(g:animation_enable) - Plug 'echasnovski/mini.animate', Cond(g:animation_enable) - - Plug 'nvim-lualine/lualine.nvim' - Plug 'karb94/neoscroll.nvim', Cond(g:animation_enable) - Plug 'petertriho/nvim-scrollbar', Cond(g:animation_enable) - Plug 'folke/which-key.nvim', Cond(!g:high_performence && g:key_prompt) - endif - if g:vim_version >= 0.7 - Plug 'nvim-treesitter/nvim-treesitter', Cond(executable('make'), {'do': ':TSUpdate'}) - - " for telescope - Plug 'nvim-lua/plenary.nvim' - Plug 'nvim-telescope/telescope.nvim', Cond(g:vim_type == 'nvim', { 'branch': '0.1.x' }) - " c plugin for telescope to make it faster - Plug 'nvim-telescope/telescope-fzf-native.nvim', Cond(executable('make'), { 'do': 'make' }) - - " comment out this plugin if the machine doesn't have required - " font install - Plug 'nvim-tree/nvim-web-devicons' - Plug 'akinsho/toggleterm.nvim', Cond(g:vim_type == 'nvim', {'tag' : '*'}) - endif - if g:vim_version >= 0.8 - Plug 'nvim-tree/nvim-tree.lua' - - Plug 'rcarriga/nvim-notify', Cond(!g:high_performence && !g:classic_vim_ui) - Plug 'folke/noice.nvim', Cond(!g:high_performence && !g:classic_vim_ui) - Plug 'MunifTanjim/nui.nvim', Cond(!g:high_performence && !g:classic_vim_ui) - endif - endif - -call plug#end() - -augroup InitConfig - autocmd VimLeave * call SaveConfig() - - " Automatically install missing plugins at startup - autocmd VimEnter * - \ if len(filter(values(g:plugs), '!isdirectory(v:val.dir)')) - \| PlugInstall --sync | q - \| endif -augroup end - -"""""" UTILITIES """""" - -" import ultilities functions -execute('source ' . g:dotfiledir . '/utils.vim') - -function! SaveConfig() - let p = ReadVariable(g:config_file_path) - if type(p) != type({}) - let p = {} - endif - - let config = has_key(p, g:vim_type) && type(p[g:vim_type]) == 4 - \ ? p[g:vim_type] : {} - let config = Merge(config, g:my_config) - - " vim and nvim may have diferenrt available plugins - let p[g:vim_type] = config - call SaveVariable(p, g:config_file_path) -endfunction - -function! LoadConfig() - let result = ReadVariable(g:config_file_path) - " if it is dictionary - if type(result) == 4 - if has_key(result, g:vim_type) - let config = result[g:vim_type] - if type(config) == 4 | return config | endif - endif - endif - return {} -endfunction - -""""""" PLUGIN_CONFIGURATION """""" - -" a list of funcref that will be initilized late -let s:post_init_func = [] -function s:registerLateInit(func) - let Funcref = type(a:func) == 10 ? func : function(a:func) - call add(s:post_init_func, Funcref) -endfunction - -function s:executeLateInit() - function s:lateInitHelper(...) - for Funcref in s:post_init_func - call Funcref() - endfor - endfunction - autocmd VimEnter * call timer_start(1, function('s:lateInitHelper')) -endfunction - -if HasPlug('vim-floaterm') - let g:floaterm_wintype = 'float' - let g:floaterm_keymap_toggle = '' - let g:floaterm_position = 'bottomright' - let g:floaterm_width = 0.5 - let g:floaterm_height = 0.5 - autocmd QuitPre * :FloatermKill! - autocmd FileType floaterm tmap -endif -if HasPlug('Copilot.vim') - " imap (copilot-next) - " imap (copilot-prev) -endif - -if HasPlug('vimtex') - if g:os == 'Darwin' - let g:vimtex_view_method = 'skim' - endif - nmap lv (vimtex-view) - nmap lc :VimtexCompile - let g:vimtex_quickfix_open_on_warning = 0 -endif -if HasPlug('minimap.vim') - nnoremap mm :MinimapToggle - let g:minimap_highlight_search = 1 - let g:minimap_git_colors = 1 - let g:minimap_enable_highlight_colorgroup = 1 - let g:minimap_block_filetypes = ['help', 'nerdtree'] -endif - -if HasPlug('vista.vim') - let g:vista_default_executive = 'vim_lsp' - if HasPlug('coc.nvim') - let g:vista_default_executive = 'coc' - elseif HasPlug('coc.nvim') - let g:vista_default_executive = 'ctags' - endif - nnoremap v :Vista!! - let g:vista_cursor_delay = 0 - let g:vista_echo_cursor = 0 - let g:vista_echo_cursor_strategy = 'floating_win' - let g:vista_close_on_jump = 0 - let g:vista_floating_delay = 0 - let g:vista_ignore_kinds = ['Variable', 'Field', 'EnumMember', - \ 'String', 'Object', 'Array', 'Constant', 'Package', 'Boolean', 'Number' - \ ] - let g:vista_floating_border = 'rounded' - let g:vista_disable_statusline = 1 - " let g:vista_keep_fzf_colors = 1 - let g:vista_update_on_text_changed_delay = 0 - let g:vista_update_on_text_changed = 1 - let g:vista#renderer#enable_kind = 1 - let g:vista#renderer#enable_icon = 1 - - " return to last position of vista - let g:vista_last_row = v:null - function VistaCursorJump() - " let found = vista#util#BinarySearch(g:vista.raw, line('.'), 'line', '') - let found = g:vista_last_row - if empty(found) - return - endif - let vlnum = get(found, 'vlnum', v:null) - call cursor(vlnum, 3) - endfunction - - " save tag for VistaCursorJump use - function VistaH2() - if exists('*vista#util#BinarySearch') - let bufs = map(filter(copy(getbufinfo()), 'v:val.listed'), 'v:val.bufnr') - if index(bufs, bufnr('%')) < 0 - return - endif - let found = vista#util#BinarySearch(g:vista.raw, line('.'), 'line', '') - if empty(found) - return - endif - let g:vista_last_row = found - endif - endfunction - autocmd BufLeave * call VistaH2() - autocmd FileType vista call VistaCursorJump() - -endif - -if HasPlug('indentLine') - let g:indentLine_fileTypeExclude = ['startify'] -endif - -if HasPlug('vim-illuminate') && g:vim_type == 'vim' " nvim doesn't need this config - let g:Illuminate_ftHighlightGroups = { - \ 'vim:blacklist': ['vimLet', 'vimFuncKey', 'vimNotFunc', 'vimOperParen', 'vimLineComment'], - \ 'java:blacklist' : [ 'javaType', 'javaScopeDecl', 'javaMethodDecl', - \ 'javaComment', 'javaStorageClass', 'javaClassDecl', 'javaExternal', - \ 'javaTypedef', 'javaLineComment', 'javaStatement', 'javaCommentTitle', 'javaDocComment' ], - \ 'lua:blacklist' : [ 'luaComment', 'luaCond', 'luaStatement', 'luaFunction' ] - \ } - let g:Illuminate_ftwhitelist = ['vim', 'sh', 'python', 'rust', 'java', - \ 'c', 'cpp', 'javascript', 'typescript', 'lua'] - - " ugly workaround for the bug that illuminate not working after first - " enter vim - function s:init_illuminate(...) - hi illuminatedWord cterm=underline gui=underline - endfunction - - call s:registerLateInit('s:init_illuminate') - augroup illuminate_augroup - autocmd! - autocmd ColorScheme * hi illuminatedWord cterm=underline gui=underline - augroup END - -endif - -if HasPlug('wilder.nvim') - - call wilder#setup({ - \ 'modes': [':'], - \ 'next_key': '', - \ 'previous_key': '', - \ 'enable_cmdline_enter': 0, - \ }) - - call wilder#set_option('pipeline', [ - \ wilder#debounce(10), - \ wilder#branch( - \ wilder#cmdline_pipeline({'language': g:vim_type == 'nvim' ? 'python' : 'vim'}), - \ ), - \ ]) - - if g:vim_type == 'vim' - call wilder#set_option('renderer', wilder#popupmenu_renderer()) - else - call wilder#set_option('renderer', wilder#popupmenu_renderer( - \ wilder#popupmenu_border_theme({ - \ 'highlights': { - \ 'default': 'Normal', - \ }, - \ 'pumblend': 20, - \ 'border': 'rounded', - \ }))) - endif -endif - -if HasPlug('vim-tmux-navigator') - let g:tmux_navigator_no_mappings = 1 - - noremap :TmuxNavigateLeft - noremap :TmuxNavigateDown - noremap :TmuxNavigateUp - noremap :TmuxNavigateRight - " noremap {Previous-Mapping} :TmuxNavigatePrevious -endif - -if HasPlug("vim-startify") - if g:vim_type == 'nvim' - let buffer_str_len = (&columns - 60) / 2 - let g:startify_custom_header = GenVimAsciiArt(buffer_str_len) - else - let buffer_str_len = (&columns - 30) / 2 - let g:startify_custom_header = GenVimAsciiArt(buffer_str_len) - endif - - let g:startify_lists = [ - \ { 'header': [' RECENT'], 'type': 'files' }, - \ { 'header': [' SESSIONS'], 'type': 'sessions' }, - \ ] - - " session related KeyBinding. These KeyBinding uses function from startify - nnoremap s :SSave! - nnoremap l :SLoad - nnoremap d :SDelete! - nnoremap c :SClose - -endif - -if HasPlug("vim-devicons") - let g:webdevicons_enable_airline_statusline = 0 -endif - -if HasPlug("winresizer") - let g:winresizer_vert_resize = 2 - let g:winresizer_horiz_resize = 2 - " nnoremap r :WinResizerStartResize - let g:winresizer_start_key = 'r' -endif - -if HasPlug("vim-gutentags") - if exists("*gutentags#statusline()") - set statusline+=%{gutentags#statusline()} - endif - let g:gutentags_trace = 1 - let g:gutentags_cache_dir=g:vim_dir . '/.vimtags/' - let g:gutentags_project_root=['.git', '.hg', '.svn', '.bzr', '_darcs', '_FOSSIL_', '.fslckout', 'src'] -endif - -if HasPlug("vim-easymotion") - " f{char} to move to {char} - map f (easymotion-bd-f) - nmap f (easymotion-overwin-f) - - " s{char}{char} to move to {char}{char} - nmap s (easymotion-overwin-f2) - - " Move to line - map L (easymotion-bd-jk) - nmap L (easymotion-overwin-line) - - " Move to word - map w (easymotion-bd-w) - nmap w (easymotion-overwin-w) -endif - -if HasPlug("coc-fzf") - " nnoremap :CocFzfList - " nnoremap o :CocFzfList outline -endif - -if HasPlug("vim-bufferline") && HasPlug("vim-airline") - let g:bufferline_echo = 0 - let g:bufferline_modified = '+' - - " scrolling with fixed current buffer position - - let g:bufferline_active_buffer_left = '[' - let g:bufferline_active_buffer_right = ']' - let g:bufferline_inactive_highlight = 'airline_c' - let g:bufferline_active_highlight = 'airline_c_bold' -endif - -if HasPlug("undotree") - nnoremap ut :UndotreeToggle -endif - -if HasPlug("vim-rooter") - let g:rooter_patterns = ['.vscode', '.git', '*.sln', 'src'] - let g:rooter_change_directory_for_non_project_files = 'current' - let g:rooter_silent_chdir = 1 -endif - -if (g:vim_type == 'vim' || g:vim_version < 0.8) && HasPlug('nerdtree') - if HasPlug('vim-nerdtree-syntax-highlight') - let g:NERDTreeLimitedSyntax = 1 - endif - let g:NERDShutUp=1 - - " work around for nerdtree bug: https://github.com/preservim/nerdtree/issues/1321 - let g:NERDTreeMinimalMenu = v:true - let g:NERDTreeMinimalUI = v:true - - function! NERDTreeEchoPathHandler(node) - echo a:node.path.str() - endfunction - - autocmd! User nerdtree call NERDTreeAddKeyMap({ - \ 'key': 'p', - \ 'callback': 'NERDTreeEchoPathHandler', - \ 'quickhelpText': 'echo full path of current node', - \ 'scope': 'Node' }) - - function! NERDTreeFindToggle() - let my_filetype = &filetype - let specical_fts = ['nerdtree', 'startify'] - if my_filetype == '' || index(specical_fts, my_filetype) >= 0 - :NERDTreeToggle - else - :NERDTreeFind - endif - endfunction - nnoremap e :call NERDTreeFindToggle() - - "let NERDTreeShowBookmarks=1 - "let NERDTreeIgnore=['\.py[cd]$', '\~$', '\.swo$', '\.swp$', '^\.git$', '^\.hg$', '^\.svn$', '\.bzr$'] - let NERDTreeChDirMode = 0 - let NERDTreeQuitOnOpen = 1 - let NERDTreeMouseMode = 2 - let NERDTreeShowHidden = 1 - - if HasPlug('vim-devicons') || HasPlug('nerdfont.vim') - let NERDTreeDirArrowCollapsible = '' - let NERDTreeDirArrowExpandable = '' - else - " let NERDTreeDirArrowCollapsible = '' - " let NERDTreeDirArrowExpandable = '' - endif - " Exit Vim if NERDTree is the only window remaining in the only tab. - autocmd BufEnter * if tabpagenr('$') == 1 && winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif -endif - -if HasPlug("vim-airline") - - " Set configuration options for the statusline plugin vim-airline. - " Use the powerline theme and optionally enable powerline symbols. - - " TODO - " 22 is a magic number, it is best it can change as buffer width - " changing - - " This must use my fork version of bufferline - " the number of cols bufferline cannot use out of max of screen cols - let g:bufferline_forbided_col = 32 - call airline#parts#define_function('bufnum', 'AirlineBufferNumber') - call airline#parts#define_function('cocstatus', 'AirlineCocStatus') - call airline#parts#define_accent('cocstatus', 'italic') - call airline#parts#define_accent('bufnum', 'bold') - call airline#parts#define_accent('bufnum', 'italic') - call airline#parts#define_accent('filetype', 'italic') - - let g:airline_experimental = g:vim_v >= 900 ? 1 : 0 - - function! AirlineInit() - let _airline_section_y = '' - if HasPlug('coc.nvim') - let _airline_section_y = airline#section#create(['cocstatus']) - endif - " this create function returns a format string for status line (:h - " stl). the string we append is what will happend if we pass - " cocstatus into the create function. By appending them we have - " more freedom format the highlight - " let g:airline_section_y = '%{%airline#util#wrap(AirlineCocStatus(), 0)%}' - let g:airline_section_a = airline#section#create(['mode']) - let g:airline_section_b = '' - let g:airline_section_error = '' - let g:airline_section_warning = '' - " let g:airline_section_x = airline#section#create(['bufnum']) - let g:airline_section_x = '' - let g:airline_section_y = _airline_section_y - let g:airline_section_z = airline#section#create(['filetype']) - " see source for current list - function s:airline_refresh(timer) - :AirlineRefresh! - endfunction - - " autocmd! CursorMoved * call s:airline_refresh(0) - - endfunction - - function! s:airlineconfig() - " TODO - " the problem is that colorscheme command will trigger this function - " and at that time background=new but airline_theme=old - " Right now I decide to modify airline them first and if the - " colorscheme has it's own ariline theme it will override user - " choice. - " call add(g:msgs, g:ccc) - " call add(g:msgs, g:airline_theme) - " call add(g:msgs, &background) - " let g:my_config[&background].airline_theme = g:airline_theme - endfunction - - augroup AirlineAu - autocmd! - autocmd User AirlineAfterTheme call s:airlineconfig() - autocmd User AirlineAfterInit call AirlineInit() - augroup end - - let g:airline#extensions#localsearch#enabled = 0 - let g:airline_extensions = ['bufferline'] - let g:airline_exclude_filetypes = ['vista', 'minimap'] - let g:airline_skip_empty_sections = 1 - " without this airline will overwrite some setting like bufferline_active_buffer_left, etc. - let g:airline#extensions#bufferline#overwrite_variables = 0 - let g:airline_mode_map = { - \ '__' : '-', - \ 'c' : 'C', - \ 'i' : 'I', - \ 'ic' : 'I', - \ 'ix' : 'I', - \ 'n' : 'N', - \ 'multi' : 'M', - \ 'ni' : 'N', - \ 'no' : 'N', - \ 'R' : 'R', - \ 'Rv' : 'R', - \ 's' : 'S', - \ 'S' : 'S', - \ '' : 'S', - \ 't' : 'T', - \ 'v' : 'V', - \ 'V' : 'V', - \ '' : 'V', - \ } - -endif - -if HasPlug("fzf") && HasPlug("fzf.vim") - " [Buffers] Jump to the existing window if possible - let g:fzf_buffers_jump = 1 - "let $FZF_DEFAULT_COMMAND='find . \( -name node_modules -o -name .git \) -prune -o -print' - - " - CTRL-/ will toggle preview window. - if g:os == 'Windows' - let g:fzf_preview_window = [] - else - let g:fzf_preview_window = ['right:50%'] - end - - hi! fzfborderhi term=bold cterm=bold ctermbg=236 gui=bold guibg=#272c42 - hi! fzfqueryhi term=underline cterm=underline gui=underline - - let g:fzf_force_termguicolors = 1 - - let g:fzf_colors = { 'gutter': ['bg', 'Normal'], 'bg+': ['bg', 'Normal'], 'bg': ['bg', 'Normal'], 'fg+': ['fg', 'WarningMsg'] } - - let g:fzf_files_options = ['--border-label', 'Files', '--border-label-pos', '9', '--no-scrollbar', '--no-hscroll', '--no-separator'] - " check if ripgrep is installed - function! FzfRg() - if ! executable('rg') - let cmd = 'grep -R --line-number --exclude-dir=".git;.svn" --color=always -- '.shellescape('') - else - let cmd = "rg --column --line-number --no-heading --color=always --smart-case -- ".shellescape('') - endif - - let RgOptions = ['--border-label', 'Grep', '--border-label-pos', '9', '--no-scrollbar', - \ '--no-hscroll', '--no-separator'] - let with_preview = fzf#vim#with_preview() - let with_preview.options = RgOptions + with_preview.options - call fzf#vim#grep(cmd, 1, with_preview, 0) - endfunction - - function! FzfColorSelect(color_name) - execute("colorscheme " . a:color_name) - let g:my_config.background = &background - let g:my_config[&background].theme = a:color_name - if has_key(g:colo2airline, a:color_name ) - call SetStatusLineTheme(&background, g:colo2airline[a:color_name]) - endif - endfunction - - function! FzfAirlineColorSelect(color_name) - call SetStatusLineTheme(&background, a:color_name) - endfunction - - noremap fr :call FzfRg() - noremap ff :Files - - if HasPlug('fzf-color-preview') - let g:FzfColorComfirmCb = function('FzfColorSelect') - let g:FzfAirlineComfirmCb = function('FzfAirlineColorSelect') - noremap fa :AirlinePreview - noremap fc :ColorsPreview - else - noremap fc :Colors - endif -endif - -if HasPlug("coc.nvim") && executable('node') - " coc-clangd: c/c++, may need to install clangd seperatly - - if filereadable(g:dotfiledir . "/coc-nvim-config.vim") - exec "source " . g:dotfiledir . "/coc-nvim-config.vim" - endif - " warning that coc work best for vim >= 8.3 - let g:coc_disable_startup_warning = 1 -endif - -"""""" THEME_CONFIGURATION """""" - " GOTO menu - " THEME_README - " THEME_PLUGINS_CONFIG - " THEME_ULTILITIES - " THEME_INIT " Setup theme when vim first start - " THEME_OPTIONS - - """ THEME_README """ - - " set custom callback functions to use when when enabling/diabling transparent - " for certain colorscheme - " let g:light_transparent_enable_cb = '' - " let g:light_transparent_disable_cb = '' - " let g:dark_transparent_enable_cb = '' - " let g:dark_transparent_disable_cb = '' - - """ THEME_PLUGINS_CONFIG """ - - if HasPlug('nvim-transparent') - - " generic nvim transparent enable and disable function - function Nvim_TB_enable() - :TransparentEnable - endfunction - function Nvim_TB_disable() - :TransparentDisable - endfunction - - let g:light_transparent_enable_cb = 'Nvim_TB_enable' - let g:light_transparent_disable_cb = 'Nvim_TB_disable' - let g:dark_transparent_enable_cb = 'Nvim_TB_enable' - let g:dark_transparent_disable_cb = 'Nvim_TB_disable' - endif - - if HasPlug('everforest') - let g:everforest_better_performance = 1 - let g:everforest_background = 'hard' - " let g:everforest_enable_italic = 1 - function! Everforest_trans_enable() - let g:everforest_transparent_background = 2 - colorscheme everforest - call SetStatusLineTheme(&background, 'everforest') - " hack to fix caret characters appearing in the statusline when StatusLine - " and StatusLineNC has same highlight(https://vi.stackexchange.com/questions/15873/carets-in-status-line) - hi StatusLine guifg=#d3c6aa ctermfg=223 - endfunction - function! Everforest_trans_disable() - let g:everforest_transparent_background = 0 - colorscheme everforest - call SetStatusLineTheme(&background, 'everforest') - endfunction - function! CB_dark_tb_enable_everforest() - call Everforest_trans_enable() - endfunction - function! CB_light_tb_enable_everforest() - call Everforest_trans_enable() - endfunction - function! CB_dark_tb_disable_everforest() - call Everforest_trans_disable() - endfunction - function! CB_light_tb_disable_everforest() - call Everforest_trans_disable() - endfunction - - endif - if HasPlug('papercolor-theme') - function! CB_dark_tb_enable_PaperColor() - let g:PaperColor_Theme_Options = { - \ 'theme': {'default.dark': { 'transparent_background': 1 }}} - colorscheme PaperColor - endfunction - function! CB_light_tb_enable_PaperColor() - let g:PaperColor_Theme_Options = { - \ 'theme': {'default.light': { 'transparent_background': 1 }}} - colorscheme PaperColor - endfunction - function! CB_dark_tb_disable_PaperColor() - let g:PaperColor_Theme_Options = { - \ 'theme': {'default.dark': { 'transparent_background': 0 }}} - colorscheme PaperColor - endfunction - function! CB_light_tb_disable_PaperColor() - let g:PaperColor_Theme_Options = { - \ 'theme': {'default.light': { 'transparent_background': 0 }}} - colorscheme PaperColor - endfunction - endif - - """ THEME_ULTILITIES """ - nmap db :call ShowHighLightGroup() - - function! SetTheme(bg, ...) - let colors_name = a:0 > 0 ? a:1 : g:my_config[a:bg].theme - if HasColorscheme(colors_name) - let g:my_config.background = a:bg - let g:my_config[a:bg].theme = colors_name - call SetStatusLineTheme(a:bg) - execute("colorscheme " . colors_name) - if &background != a:bg - execute('set background='.a:bg) - endif - endif - endfunction - - " Change bottom airline/lualine theme - function! SetStatusLineTheme(bg, ...) - if has('nvim-0.5') - " lualine will change theme automatically - else - if HasPlug('vim-airline') && exists(':AirlineTheme') - let theme = a:0 > 0 ? a:1 : g:my_config[a:bg].airline_theme - try - execute('AirlineTheme ' . theme) - catch - let theme = g:default_config[a:bg].airline_theme - execute('AirlineTheme ' . theme) - endtry - let g:my_config[a:bg].airline_theme = theme - endif - endif - endfunction - - function! EnableTransparent() - let colorscheme_name = ColourSchemeName() - let bg = &background - let cb_name = 'CB_' .bg. '_tb_enable_'.colorscheme_name - if exists('*' . cb_name) - execute('call ' . cb_name . '()') - elseif exists('g:'.bg.'_transparent_enable_cb') && g:dark_transparent_enable_cb != '' - let cb_name = get(g:, bg.'_transparent_enable_cb', '') - if cb_name != '' - execute('call '.cb_name.'()') - endif - else - return - endif - let g:my_config[&background].transparent = v:true - endfunction - - function! DisableTransparent() - let colorscheme_name = ColourSchemeName() - let bg = &background - let cb_name = 'CB_' . bg . '_tb_disable_'.colorscheme_name - if exists('*' . cb_name) - execute('call ' . cb_name . '()') - elseif exists('g:'.bg.'_transparent_disable_cb') - let cb_name = get(g:, bg.'_transparent_disable_cb', '') - if cb_name != '' - execute('call '.cb_name.'()') - endif - else - return - endif - let g:my_config[&background].transparent = v:false - endfunction - - " ToggleTransparent background - function! ToggleTransparent() - if g:my_config[&background].transparent - call DisableTransparent() - else - call EnableTransparent() - endif - endfunction - - " Allow to trigger background - function! ToggleBG() - " Inversion - let newbg = &background == "dark" ? 'light' : 'dark' - call SetTheme(newbg) - if g:my_config[&background].transparent - call EnableTransparent() - else - call DisableTransparent() - endif - endfunction - - """ THEME_INIT """ - function! s:theme_initilize() - let bg = g:my_config.background - call SetStatusLineTheme(bg) - if HasColorscheme(g:my_config[bg].theme) - call SetTheme(bg) - else - call SetTheme(bg, g:my_config[bg].default) - endif - - if g:my_config[bg].transparent - call EnableTransparent() - else - call DisableTransparent() - endif - endfunction - - if g:vim_type == 'vim' - " workaround that statusline theme doesn't work right - call s:registerLateInit('s:theme_initilize') - endif - autocmd VimEnter * call s:theme_initilize() - - - """ THEME_OPTIONS """ - - if has('termguicolors') - set termguicolors - endif - - let g:default_config = { - \ 'background': 'dark', - \ 'dark': { - \ 'theme': 'default', - \ 'default': 'default', - \ 'transparent': v:false, - \ 'airline_theme': 'angr', - \ }, - \ 'light': { - \ 'theme': 'default', - \ 'default': 'default', - \ 'transparent': v:false, - \ 'airline_theme': 'silver', - \ }, - \ } - - let g:my_config = {} - - let g:colo2airline = { - \ } - - " permenent default - if HasPlug("everforest") - let g:default_config = Merge(g:default_config, { - \ 'dark': { - \ 'airline_theme': 'everforest', - \ 'default': 'everforest', - \ }, - \ 'light': { - \ 'airline_theme': 'everforest', - \ 'default': 'everforest', - \ }, - \ }) - endif - - let g:my_config = Merge(g:default_config, LoadConfig()) -" } - -"""""" KEY_MAPS """""" -" (This doesn't include plugin specific mapping. -" For them check plugin Preferences) - - nnoremap ws :call TrimWhitespace() - - " Toggle dark/light theme - noremap bg :call ToggleBG() - - " Toggle transparent background - noremap tb :call ToggleTransparent() - - " Buffer navigation - nnoremap q :bprevious - nnoremap e :bnext - - " leader s change all occurence - nnoremap s :%s/\<\>/ - - " disable two easily mispressed yet useless key - nnoremap q: - nnoremap Q - - " leader num change tab - " only for vim or nvim without lualine - - if (g:vim_type == 'vim' || !has('nvim-0.5')) && HasPlug('vim-bufferline') - for i in range(1, 9) - execute "nnoremap " . i . - \ " :call bufferline#jump(" . i . ")" - endfor - for i in range(10, 20) - execute "nnoremap " . i . - \ " :call bufferline#jump(" . i . ")" - endfor - end - - " split window comform with other window management shortcuts - nnoremap % :vsplit - nnoremap " :split - -"""""" OTHERS """""" - -" Lua configuration -if has('nvim') && filereadable(g:dotfiledir . '.vimrc.lua') - execute('source ' . g:dotfiledir . '/.vimrc.lua') -endif - -call s:executeLateInit() diff --git a/.vimrc.lua b/.vimrc.lua deleted file mode 100644 index b363cec..0000000 --- a/.vimrc.lua +++ /dev/null @@ -1,590 +0,0 @@ -------------------------------------------------- --------------------OPTIONS----------------------- -------------------------------------------------- - --- enable animation of command like "" and "", or cursor --- jump animation. (Performence will be effected) -local animation_enable = vim.g.animation_enable -local high_performence = vim.g.high_performence -local debug_mode = vim.g.debug_mode - --- false basicly enable plugins like noice, nvim-notify etc. -local classic_vim_ui = vim.g.classic_vim_ui - -------------------------------------------------- -------------------UTILITIES---------------------- -------------------------------------------------- - -local vim = vim -function HasPlug(name) - return vim.fn.HasPlug(name) -end - --- use as a wrapper function to set keymap that call a function with --- parameters -local _wrap = function(func, ...) - local args = { ... } - return function() - func(unpack(args)) - end -end --- use to print object -function _G.put(...) - local objects = {} - for i = 1, select('#', ...) do - local v = select(i, ...) - table.insert(objects, vim.inspect(v)) - end - - print(table.concat(objects, '\n')) - return ... -end - -local wk = nil -local function wk_register(opt) - if wk == nil then - return - end - wk.register(opt) -end - -------------------------------------------------- -----------------CONFIGURATION-------------------- -------------------------------------------------- - -local vim_version = vim.version() - -local vim_version_minor = vim_version['minor'] - -local show_icon = false -if HasPlug('nvim-web-devicons') then - show_icon = true -end - -local function nvim_noice_config() - if classic_vim_ui - or not HasPlug('noice.nvim') - or not HasPlug('nvim-notify') - or not HasPlug('nui.nvim') then - return - end - - require("noice").setup({ - lsp = { - -- override markdown rendering so that **cmp** and other plugins use **Treesitter** - override = { - ["vim.lsp.util.convert_input_to_markdown_lines"] = true, - ["vim.lsp.util.stylize_markdown"] = true, - ["cmp.entry.get_documentation"] = true, - }, - }, - -- you can enable a preset for easier configuration - presets = { - bottom_search = true, -- use a classic bottom cmdline for search - -- command_palette = true, -- position the cmdline and popupmenu together - long_message_to_split = true, -- long messages will be sent to a split - inc_rename = false, -- enables an input dialog for inc-rename.nvim - lsp_doc_border = false, -- add a border to hover docs and signature help - }, - cmdline = { - enabled = true, -- enables the Noice cmdline UI - -- view = "cmdline", -- view for rendering the cmdline. Change to `cmdline` to get a classic cmdline at the bottom - opts = {}, -- global options for the cmdline. See section on views - format = { - -- cmdline = false, - search_down = false, - search_up = false, - -- filter = false, - -- help = false, - -- input = {}, -- Used by input() - -- lua = false, -- to disable a format, set to `false` - }, - }, - messages = { - -- NOTE: If you enable messages, then the cmdline is enabled automatically. - -- This is a current Neovim limitation. - enabled = true, -- enables the Noice messages UI - view = "notify", -- default view for messages - view_error = "notify", -- view for errors - view_warn = "notify", -- view for warnings - view_history = "messages", -- view for :messages - view_search = false, -- view for search count messages. Set to `false` to disable - }, - }) -end - -local function nvim_scrollbar_config() - if classic_vim_ui or - not HasPlug('nvim-scrollbar') then - return - end - require("scrollbar").setup({ - excluded_filetypes = { - "prompt", - "TelescopePrompt", - "noice", - "startify", - "vista", - }, - }) -end - -local function toggleterm_config() - if not HasPlug('toggleterm.nvim') then - return - end - require("toggleterm").setup({ - open_mapping = [[]], - direction = 'float', - float_opts = { - border = 'rounded', - width = function(term) return math.floor(vim.o.columns * 0.5) end, - height = function(term) return math.floor(vim.o.lines * 0.5) end, - winblend = 20, - row = vim.o.lines * 0.5 - 3, - col = vim.o.columns * 0.5, - }, - }) - function _G.set_terminal_keymaps() - local opts = { buffer = 0 } - vim.keymap.set('t', '', [[]], opts) - vim.keymap.set('t', 'jk', [[]], opts) - vim.keymap.set('t', '', [[wincmd h]], opts) - vim.keymap.set('t', '', [[wincmd j]], opts) - vim.keymap.set('t', '', [[wincmd k]], opts) - vim.keymap.set('t', '', [[wincmd l]], opts) - vim.keymap.set('t', '', [[]], opts) - end - - vim.cmd('autocmd! TermOpen term://* lua set_terminal_keymaps()') -end - -local function vim_illuminate_config() - if not HasPlug('vim-illuminate') then - return - end - local illuminate = require('illuminate') - illuminate.configure({ - providers = { - 'lsp', - 'treesitter', - 'regex', - }, - delay = 0, - filetype_overrides = {}, - filetypes_denylist = { - 'dirvish', - 'fugitive', - 'NvimTree', - 'help', - 'vista', - }, - filetypes_allowlist = {}, - modes_denylist = {}, - modes_allowlist = {}, - providers_regex_syntax_denylist = {}, - providers_regex_syntax_allowlist = {}, - under_cursor = true, - large_file_cutoff = nil, - large_file_overrides = nil, - min_count_to_highlight = 1, - }) -end - -local function which_key_config() - if not HasPlug('which-key.nvim') then - return - end - wk = require("which-key") - wk.setup({ - triggers_blacklist = { - i = { "j", "k" }, - v = { "j", "k" }, - c = { "w" }, - }, - }) -end -vim.g.hhx = '' -local function telescope_config() - if not HasPlug('telescope.nvim') then - return - end - local actions = require("telescope.actions") - local action_state = require "telescope.actions.state" - if HasPlug('telescope-fzf-native.nvim') then - require('telescope').setup { - pickers = { - colorscheme = { - enable_preview = true, - mappings = { - i = { - [""] = function(bufnr) - local selection = action_state.get_selected_entry() - actions.select_default() - local bg = vim.o.background - local config = vim.g.my_config - vim.fn.SetTheme(bg, selection.value) - end, - }, - }, - } - }, - extensions = { - fzf = { - fuzzy = true, -- false will only do exact matching - override_generic_sorter = true, - override_file_sorter = true, - case_mode = "smart_case", -- or "ignore_case" or "respect_case" - } - } - } - require('telescope').load_extension('fzf') - end - - local builtin = require('telescope.builtin') - - vim.keymap.set('n', 'ff', builtin.find_files, { desc = "Search files inside cwd" }) - -- need to install ripgrep - vim.keymap.set('n', 'fr', builtin.live_grep, { desc = "Regex search inside files" }) - vim.keymap.set('n', 'fb', builtin.buffers, { desc = "Search buffers" }) - vim.keymap.set('n', 'fc', builtin.colorscheme, { desc = "Search colorscheme" }) - wk_register({ ["f"] = { name = "+Telescope" } }) - - vim.api.nvim_create_autocmd("User", { - pattern = "TelescopePreviewerLoaded", - command = "setlocal wrap number" - }) -end - -local function github_theme_config() - if not HasPlug('github-nvim-theme') then - return - end - -- Example config in Lua - require("github-theme").setup({ - -- Overwrite the highlight groups - overrides = function(c) - return { - NormalFloat = { link = 'Pmenu' }, - } - end - }) -end - -local function animate_config() - if not animation_enable then - return - end - - if HasPlug('mini.animate') then - local animate = require('mini.animate') - animate.setup({ - cursor = { - -- Whether to enable this animation - enable = true, - -- Timing of animation (how steps will progress in time) - -- timing = --, - }, - scroll = { - -- Whether to enable this animation - enable = true, - -- Timing of animation (how steps will progress in time) - timing = animate.gen_timing.linear({ duration = 150, unit = 'total' }), - }, - open = { - -- Whether to enable this animation - enable = false, - }, - }) - vim.api.nvim_create_autocmd("FileType", { - pattern = { "help", "alpha", "dashboard", "neo-tree", "Trouble", "lazy", "mason", - "NvimTree", "vista", "toggleterm", "noice" }, - callback = function() - vim.b.minianimate_disable = true - end, - }) - end - - -- if HasPlug('neoscroll.nvim') then - -- require('neoscroll').setup({ - -- -- Set any options as needed - -- mappings = {'', '', '', '', - -- }, - -- }) - - -- local t = {} - -- -- Syntax: t[keys] = {function, {function arguments}} - -- t[''] = {'scroll', {'-vim.wo.scroll', 'true', '150'}} - -- t[''] = {'scroll', { 'vim.wo.scroll', 'true', '150'}} - -- t[''] = {'scroll', {'-vim.api.nvim_win_get_height(0)', 'true', '200'}} - -- t[''] = {'scroll', { 'vim.api.nvim_win_get_height(0)', 'true', '200'}} - -- -- t['zb'] = {'zb', {'250'}} - - -- require('neoscroll.config').set_mappings(t) - -- end -end - -local function indentline_config() - if not animation_enable then - if HasPlug('indent-blankline.nvim') then - -- Example config in Lua - require("indent_blankline").setup { - show_current_context = true, - filetype_exclude = { "lspinfo", "packer", "checkhealth", - "help", "man", "", "startify", } - -- use_treesitter = true, - } - end - else - if HasPlug('mini.indentscope') then - MiniIndentscope = require('mini.indentscope') - MiniIndentscope.setup({ - symbol = '│', - -- draw = { - -- animation = MiniIndentscope.gen_animation.linear({ - -- easing = 'out', - -- duration = 150, - -- unit = 'total' - -- }) - -- }, - }) - vim.api.nvim_create_autocmd("FileType", { - pattern = { "help", "alpha", "dashboard", "neo-tree", "Trouble", "lazy", "mason", - "NvimTree", "vista", "startify", "toggleterm" }, - callback = function() - vim.b.miniindentscope_disable = true - end, - }) - end - end -end - -local function transparent_config() - if not HasPlug('nvim-transparent') then - return - end - require("transparent").setup({ - extra_groups = { -- table/string: additional groups that should be cleared - -- In particular, when you set it to 'all', that means all available groups - "NvimTreeNormal", - "VertSplit", - }, - exclude_groups = {}, -- table: groups you don't want to clear - }) -end - -local function lualine_config() - if not HasPlug('lualine.nvim') then - return - end - - vim.api.nvim_set_hl(0, 'CocstatusSucceed', { fg = "#e32be0" }) - vim.api.nvim_set_hl(0, 'CocstatusLoading', { fg = "#35f0e9" }) - -- custom lualine plugin show coc lsp status - local function cocstatus() - local loading = { "⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏" } - local step = #loading - local ok, result = pcall(vim.fn.CocAction, 'services') - if not ok then - return - end - local ft = vim.bo.filetype - local state, id - for _, entry in ipairs(result) do - if entry['languageIds'][1] == ft then - state = entry['state'] - id = entry['id'] - break - end - end - - local speed = 1600 - local loadidx = (vim.loop.now() % speed) - local msg = "lsp:" .. id - if state == "starting" then - return msg .. " %#CocstatusLoading#" .. loading[math.floor(loadidx / (step * (speed / 100))) + 1] - elseif state == "running" then - return msg .. " %#CocstatusSucceed#✔" - end - return '' - end - - local function debugstats() - local t = vim.fn.Debugstats() - return "ft:" .. t['filetype'] .. " bt:" .. t['buftype'] .. " wid:" .. t['winid'] - end - - local _section_x = {} - local _section_y = { 'encoding' } - if HasPlug('coc.nvim') then table.insert(_section_x, cocstatus) end - if debug_mode then _section_y = { debugstats } end - - local disabled_filetypes_data = {} - if vim_version_minor < 7 then - -- globalstatus only work for nvim >= 0.7 - disabled_filetypes_data = { - -- Filetypes to disable lualine for. - statusline = {}, -- only ignores the ft for statusline. - winbar = {}, -- only ignores the ft for winbar. - 'NvimTree', - 'vista', - } - end - - local opt = { - options = { - icons_enabled = show_icon, - theme = 'auto', -- lualine theme - -- component_separators = { left = '', right = ''}, - -- section_separators = { left = '', right = ''}, - component_separators = { left = '', right = '' }, - section_separators = { left = '', right = '' }, - always_divide_middle = false, - globalstatus = true, - disabled_filetypes = disabled_filetypes_data, - refresh = { statusline = 200 } - }, - sections = { - lualine_a = { 'mode' }, - lualine_b = {}, - lualine_c = { - { - 'buffers', - mode = 2, - filetype_names = { - TelescopePrompt = 'Telescope', - dashboard = 'Dashboard', - packer = 'Packer', - fzf = 'FZF', - alpha = 'Alpha', - NvimTree = '', - vista = '', - }, - } - }, - -- lualine_x = {'encoding', 'fileformat', 'filetype'}, - lualine_x = _section_x, - lualine_y = _section_y, - lualine_z = { 'location' } - }, - } - - require('lualine').setup(opt) - - for i = 1, 9 do - -- :nnoremap 1 :LualineBuffersJump 1 - vim.api.nvim_set_keymap('n', '' .. i, ':LualineBuffersJump ' .. i .. '', - { noremap = true, silent = true, nowait = true }) - end - for i = 10, 20 do - -- :nnoremap 1 :LualineBuffersJump 1 - vim.api.nvim_set_keymap('n', '' .. i, ':LualineBuffersJump ' .. i .. '', - { noremap = true, silent = true, nowait = true }) - end -end - -local function nvim_treesitter_config() - if not HasPlug('nvim-treesitter') then - return - end - require('nvim-treesitter.configs').setup { - ensure_installed = { "c", "bash", "lua", "python", "vim" }, - sync_install = false, - auto_install = true, - highlight = { - enable = true, - additional_vim_regex_highlighting = false, - }, - } -end - -local function nvim_tree_config() - if not HasPlug('nvim-tree.lua') then - return - end - -- disable netrw at the very start of your init.lua (strongly advised) - vim.g.loaded_netrw = 1 - vim.g.loaded_netrwPlugin = 1 - - local api = require('nvim-tree.api') - local M = {} - - function M.print_node_path() - local node = api.tree.get_node_under_cursor() - print(node.absolute_path) - end - - function M.on_attach(bufnr) - local function opts(desc) - return { desc = 'nvim-tree: ' .. desc, buffer = bufnr, noremap = true, silent = true, nowait = true } - end - -- vim.keymap.set('n', 'u', api.node.navigate.parent, opts('Parent Directory')) - vim.keymap.set('n', 'u', api.tree.change_root_to_parent, opts('Up')) - vim.keymap.set('n', 'a', api.fs.create, opts('Create')) - vim.keymap.set('n', 'dd', api.fs.remove, opts('Delete')) - vim.keymap.set('n', 'rn', api.fs.rename_basename, opts('Rename: Basename')) - vim.keymap.set('n', 'I', api.tree.toggle_gitignore_filter, opts('Toggle Git Ignore')) - vim.keymap.set('n', 'cd', api.tree.change_root_to_node, opts('CD')) - vim.keymap.set('n', 'X', api.tree.collapse_all, opts('Collapse')) - vim.keymap.set('n', 'O', api.tree.expand_all, opts('Expand All')) - vim.keymap.set('n', 'p', M.print_node_path, opts('Print node path')) - vim.keymap.set('n', 'o', api.node.open.edit, opts('Open')) - vim.keymap.set('n', '', api.node.open.edit, opts('Open')) - end - - vim.api.nvim_set_keymap('n', 'e', ':NvimTreeFindFileToggle', - { desc = 'Toggle nvim-tree', noremap = true, silent = true, nowait = true }) - require("nvim-tree").setup({ - sort_by = "case_sensitive", - on_attach = M.on_attach, - view = { - width = 30, - }, - filters = { - dotfiles = false, - }, - git = { - ignore = false, - }, - actions = { - open_file = { - quit_on_open = true, - resize_window = true, - window_picker = { - exclude = { - filetype = { "notify", "packer", "qf", "diff", "fugitive", "fugitiveblame", "vista" }, - buftype = { "nofile", "terminal", "help" }, - }, - }, - }, - }, - }) - -end - -if vim_version_minor >= 5 then - vim_illuminate_config() - transparent_config() - github_theme_config() - indentline_config() - which_key_config() - animate_config() - nvim_scrollbar_config() - lualine_config() -end -if vim_version_minor >= 7 then - nvim_treesitter_config() - telescope_config() - toggleterm_config() -end -if vim_version_minor >= 8 then - nvim_tree_config() - nvim_noice_config() -end - -local function late_loading() -end - --- late loading -vim.api.nvim_create_autocmd({ "VimEnter" }, - { pattern = { "*" }, callback = late_loading, }) diff --git a/README.md b/README.md index 8c3c11e..a0ef1b3 100644 --- a/README.md +++ b/README.md @@ -24,3 +24,4 @@ To do ## Screenshots ![vim config](https://github.com/Donaldttt/dotfiles/blob/resource/vim-config.gif?raw=true) + diff --git a/bash_tools/fzf_file_seletor.sh b/bash_tools/fzf_file_seletor.sh index 7f13e42..2959307 100755 --- a/bash_tools/fzf_file_seletor.sh +++ b/bash_tools/fzf_file_seletor.sh @@ -11,9 +11,6 @@ fzf_command_list_all=(\ # fzf match files fzf_command_list_file=(\ -cat \ -#vim \ -#nvim \ set_wallpaper \ ) diff --git a/coc-settings.json b/coc-settings.json deleted file mode 100644 index 06a5173..0000000 --- a/coc-settings.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "diagnostic.errorSign": ">" -} diff --git a/config/fish/config.fish b/config/fish/config.fish new file mode 100644 index 0000000..41e52e9 --- /dev/null +++ b/config/fish/config.fish @@ -0,0 +1,7 @@ +set __fish_git_prompt_show_informative_status 1 +function fish_prompt -d "Write out the prompt" + # This shows up as USER@HOST /home/user/ >, with the directory colored + # $USER and $hostname are set by fish, so you can just use them + # instead of using `whoami` and `hostname` + printf ' %s%s%s%s$ ' (set_color $fish_color_cwd) (prompt_pwd) (set_color normal) (fish_git_prompt) +end diff --git a/config/nvim/init.vim b/config/nvim/init.vim deleted file mode 100644 index 6115e0e..0000000 --- a/config/nvim/init.vim +++ /dev/null @@ -1,6 +0,0 @@ -set runtimepath^=~/.vim runtimepath+=~/.vim/after -let &packpath=&runtimepath -source ~/.vimrc -" set termguicolors -" lua require'bufferline'.setup{} - diff --git a/user/git_config.sh b/config/user/git_config.sh similarity index 100% rename from user/git_config.sh rename to config/user/git_config.sh diff --git a/config/vim/.gitignore b/config/vim/.gitignore new file mode 100644 index 0000000..1854e41 --- /dev/null +++ b/config/vim/.gitignore @@ -0,0 +1 @@ +theme_config.vim diff --git a/config/vim/autoload/airline/themes/sunbather_dark.vim b/config/vim/autoload/airline/themes/sunbather_dark.vim new file mode 100644 index 0000000..a7eb55e --- /dev/null +++ b/config/vim/autoload/airline/themes/sunbather_dark.vim @@ -0,0 +1,85 @@ +" Base16 Classic Dark vim-airline-theme (https://github.com/dawikur/base16-vim-airline-themes) +" For vim-airline (https://github.com/vim-airline/vim-airline) +" By Jason Heeris (http://heeris.id.au) + +let s:scheme_slug = 'sunbather_dark' + +let g:airline#themes#{s:scheme_slug}#palette = {} + +" GUI color definitions +let s:gui00 = '#151515' +let s:gui01 = '#202020' +let s:gui02 = '#303030' +let s:gui03 = '#505050' +let s:gui04 = '#B0B0B0' +let s:gui05 = '#D0D0D0' +let s:gui06 = '#E0E0E0' +let s:gui07 = '#F5F5F5' +let s:gui08 = '#AC4142' +let s:gui09 = '#D28445' +let s:gui0A = '#F4BF75' +let s:gui0B = '#90A959' +let s:gui0C = '#75B5AA' +let s:gui0D = '#6A9FB5' +let s:gui0E = '#AA759F' +let s:gui0F = '#8F5536' + +" Terminal color definitions +let s:cterm00 = "00" +let s:cterm03 = "08" +let s:cterm05 = "07" +let s:cterm07 = "15" +let s:cterm08 = "01" +let s:cterm0A = "03" +let s:cterm0B = "02" +let s:cterm0C = "06" +let s:cterm0D = "04" +let s:cterm0E = "05" +if exists("base16colorspace") && base16colorspace == "256" + let s:cterm01 = "18" + let s:cterm02 = "19" + let s:cterm04 = "20" + let s:cterm06 = "21" + let s:cterm09 = "16" + let s:cterm0F = "17" +else + let s:cterm01 = "10" + let s:cterm02 = "11" + let s:cterm04 = "12" + let s:cterm06 = "13" + let s:cterm09 = "09" + let s:cterm0F = "14" +endif + +let g:airline#themes#{s:scheme_slug}#palette.normal = airline#themes#generate_color_map( + \ [ s:gui01, s:gui04, s:cterm01, s:cterm04 ], + \ [ s:gui04, s:gui02, s:cterm04, s:cterm02 ], + \ [ s:gui04, s:gui01, s:cterm04, s:cterm01 ]) +let g:airline#themes#{s:scheme_slug}#palette.normal_modified = { + \ 'airline_c' : [ s:gui07, s:gui01, s:cterm07, s:cterm01 ]} + +let g:airline#themes#{s:scheme_slug}#palette.insert = airline#themes#generate_color_map( + \ [ s:gui01, s:gui0B, s:cterm01, s:cterm0B ], + \ [ s:gui04, s:gui02, s:cterm04, s:cterm02 ], + \ [ s:gui04, s:gui01, s:cterm04, s:cterm01 ]) +let g:airline#themes#{s:scheme_slug}#palette.insert_modified = { + \ 'airline_c' : [ s:gui07, s:gui01, s:cterm07, s:cterm01 ]} + +let g:airline#themes#{s:scheme_slug}#palette.replace = airline#themes#generate_color_map( + \ [ s:gui01, s:gui0E, s:cterm01, s:cterm0E ], + \ [ s:gui04, s:gui02, s:cterm04, s:cterm02 ], + \ [ s:gui04, s:gui01, s:cterm04, s:cterm01 ]) +let g:airline#themes#{s:scheme_slug}#palette.replace_modified = { + \ 'airline_c' : [ s:gui07, s:gui01, s:cterm07, s:cterm01 ]} + +let g:airline#themes#{s:scheme_slug}#palette.visual = airline#themes#generate_color_map( + \ [ s:gui01, s:gui09, s:cterm01, s:cterm09 ], + \ [ s:gui04, s:gui02, s:cterm04, s:cterm02 ], + \ [ s:gui04, s:gui01, s:cterm04, s:cterm01 ]) +let g:airline#themes#{s:scheme_slug}#palette.visual_modified = { + \ 'airline_c' : [ s:gui07, s:gui01, s:cterm07, s:cterm01 ]} + +let g:airline#themes#{s:scheme_slug}#palette.inactive = airline#themes#generate_color_map( + \ [ s:gui01, s:gui01, s:cterm01, s:cterm01 ], + \ [ s:gui04, s:gui01, s:cterm04, s:cterm01 ], + \ [ s:gui05, s:gui01, s:cterm05, s:cterm01 ]) diff --git a/config/vim/autoload/airline/themes/sunbather_light.vim b/config/vim/autoload/airline/themes/sunbather_light.vim new file mode 100644 index 0000000..9a93401 --- /dev/null +++ b/config/vim/autoload/airline/themes/sunbather_light.vim @@ -0,0 +1,85 @@ +" Base16 Summerfruit Light vim-airline-theme (https://github.com/dawikur/base16-vim-airline-themes) +" For vim-airline (https://github.com/vim-airline/vim-airline) +" By Christopher Corley (http://christop.club/) + +let s:scheme_slug = 'sunbather_light' + +let g:airline#themes#{s:scheme_slug}#palette = {} + +" GUI color definitions +let s:gui00 = '#FFFFFF' +let s:gui01 = '#E0E0E0' +let s:gui02 = '#D0D0D0' +let s:gui03 = '#B0B0B0' +let s:gui04 = '#000000' +let s:gui05 = '#101010' +let s:gui06 = '#151515' +let s:gui07 = '#202020' +let s:gui08 = '#FF0086' +let s:gui09 = '#FD8900' +let s:gui0A = '#ABA800' +let s:gui0B = '#00C918' +let s:gui0C = '#1FAAAA' +let s:gui0D = '#3777E6' +let s:gui0E = '#AD00A1' +let s:gui0F = '#CC6633' + +" Terminal color definitions +let s:cterm00 = "00" +let s:cterm03 = "08" +let s:cterm05 = "07" +let s:cterm07 = "15" +let s:cterm08 = "01" +let s:cterm0A = "03" +let s:cterm0B = "02" +let s:cterm0C = "06" +let s:cterm0D = "04" +let s:cterm0E = "05" +if exists("base16colorspace") && base16colorspace == "256" + let s:cterm01 = "18" + let s:cterm02 = "19" + let s:cterm04 = "20" + let s:cterm06 = "21" + let s:cterm09 = "16" + let s:cterm0F = "17" +else + let s:cterm01 = "10" + let s:cterm02 = "11" + let s:cterm04 = "12" + let s:cterm06 = "13" + let s:cterm09 = "09" + let s:cterm0F = "14" +endif + +let g:airline#themes#{s:scheme_slug}#palette.normal = airline#themes#generate_color_map( + \ [ s:gui01, s:gui04, s:cterm01, s:cterm04 ], + \ [ s:gui04, s:gui02, s:cterm04, s:cterm02 ], + \ [ s:gui04, s:gui01, s:cterm04, s:cterm01 ]) +let g:airline#themes#{s:scheme_slug}#palette.normal_modified = { + \ 'airline_c' : [ s:gui07, s:gui01, s:cterm07, s:cterm01 ]} + +let g:airline#themes#{s:scheme_slug}#palette.insert = airline#themes#generate_color_map( + \ [ s:gui01, s:gui0B, s:cterm01, s:cterm0B ], + \ [ s:gui04, s:gui02, s:cterm04, s:cterm02 ], + \ [ s:gui04, s:gui01, s:cterm04, s:cterm01 ]) +let g:airline#themes#{s:scheme_slug}#palette.insert_modified = { + \ 'airline_c' : [ s:gui07, s:gui01, s:cterm07, s:cterm01 ]} + +let g:airline#themes#{s:scheme_slug}#palette.replace = airline#themes#generate_color_map( + \ [ s:gui01, s:gui0E, s:cterm01, s:cterm0E ], + \ [ s:gui04, s:gui02, s:cterm04, s:cterm02 ], + \ [ s:gui04, s:gui01, s:cterm04, s:cterm01 ]) +let g:airline#themes#{s:scheme_slug}#palette.replace_modified = { + \ 'airline_c' : [ s:gui07, s:gui01, s:cterm07, s:cterm01 ]} + +let g:airline#themes#{s:scheme_slug}#palette.visual = airline#themes#generate_color_map( + \ [ s:gui01, s:gui09, s:cterm01, s:cterm09 ], + \ [ s:gui04, s:gui02, s:cterm04, s:cterm02 ], + \ [ s:gui04, s:gui01, s:cterm04, s:cterm01 ]) +let g:airline#themes#{s:scheme_slug}#palette.visual_modified = { + \ 'airline_c' : [ s:gui07, s:gui01, s:cterm07, s:cterm01 ]} + +let g:airline#themes#{s:scheme_slug}#palette.inactive = airline#themes#generate_color_map( + \ [ s:gui01, s:gui01, s:cterm01, s:cterm01 ], + \ [ s:gui04, s:gui01, s:cterm04, s:cterm01 ], + \ [ s:gui05, s:gui01, s:cterm05, s:cterm01 ]) diff --git a/config/vim/autoload/clipboard.vim b/config/vim/autoload/clipboard.vim new file mode 100644 index 0000000..3d60173 --- /dev/null +++ b/config/vim/autoload/clipboard.vim @@ -0,0 +1,27 @@ +" vim build with clipboard support doesn't need this and it work +" better than neovim + +func s:helper() + call system('printf "%s" '.shellescape(join(v:event['regcontents'], "\n")).' | xclip -sel clip' ) +endfunc + +func! clipboard#get() +endfunc + +func! clipboard#enable() + augroup WSLClipboard + au! + au TextYankPost * call s:helper() + augroup END +endfunc + +func! clipboard#disable() + augroup WSLClipboard + au! + augroup END +endfunc + +func! clipboard#paste() + return system('xclip -o -sel clip' ) +endfunc + diff --git a/config/vim/autoload/config.vim b/config/vim/autoload/config.vim new file mode 100644 index 0000000..73b38ea --- /dev/null +++ b/config/vim/autoload/config.vim @@ -0,0 +1,45 @@ +let s:path = get(g:, '_config_path', fnamemodify( + \ resolve(expand(':p')), ':h:h').'/_config.vim') +let s:config = {} + +function! config#saveConfig() + let p = utils#readvar(s:path) + if type(p) != type({}) + let p = {} + endif + let vim_type = has('nvim') ? 'nvim' : 'vim' + let config = has_key(p, vim_type) && type(p[vim_type]) == v:t_dict + \ ? p[vim_type] : {} + let config = utils#merge(config, s:config) + + " vim and nvim may have diferenrt available plugins + let p[vim_type] = config + call utils#savevar(p, s:path) +endfunction + +function! s:loadConfig() + let result = utils#readvar(s:path) + " if it is dictionary + let vim_type = has('nvim') ? 'nvim' : 'vim' + if type(result) == v:t_dict + if has_key(result, vim_type) + let config = result[vim_type] + if type(config) == v:t_dict + let s:config = config + return + endif + endif + endif +endfunction + +function! config#setConfig(dict) + let s:config = utils#merge(s:config, a:config) +endfunction + +function! config#init() + call config#loadConfig() + augroup config + autocmd! + autocmd VimLeave * call config#saveConfig() + augroup END +endfunction diff --git a/config/vim/autoload/options.vim b/config/vim/autoload/options.vim new file mode 100644 index 0000000..6186d62 --- /dev/null +++ b/config/vim/autoload/options.vim @@ -0,0 +1,169 @@ + +" this intent to create a list of options that can be toggled on/off + +let s:options = {} + +if !has('nvim') + import autoload 'utils/selector.vim' +endif + +" opt is a dictionary with the following keys(* = required): +" togglefunc and enablefunc/disablefunc are mutually exclusive +" params: +" - name: name of the option +" - opt: a dictionary with following options(): +" - desc: description, +" - togglefunc: function reference, if exists, enablefunc and disablefunc +" will be ignored, +" - enablefunc: function reference, if this exists, disablefunc must exists +" as well and vice verse +" - disablefunc: function reference, +" - isEnabled: string, true or false or function reference. only needed when +" using enablefunc and disablefunc +function! options#add(name, opt) abort + if (!has_key(a:opt, 'togglefunc') + \ && (!has_key(a:opt, 'enablefunc') || !has_key(a:opt, 'disablefunc'))) + throw 'invalid option (togglefunc or enablefunc/disablefunc must be set))' + endif + + if !has_key(a:opt, 'isEnabled') && !has_key(a:opt, 'togglefunc') + throw 'specify initial state(isEnabled) or set togglefunc' + endif + + for key in ['togglefunc', 'enablefunc', 'disablefunc'] + if has_key(a:opt, key) && type(a:opt[key]) != v:t_func + throw key . ' must be a function reference' + endif + endfor + + if !has_key(a:opt, 'desc') + let a:opt['desc'] = '' + endif + + let s:options[a:name] = a:opt +endfunction + +" Register a simple vim option +" params: +" - name: name of the option +" - dictionary(optional): +" - desc: description of the option +function! options#addVimOption(name, ...) abort + let opt = {} + + func opt.togglefunc(key) + if eval('&' . a:key) + execute('set no' . a:key) + else + execute('set ' . a:key) + endif + endfunc + + if a:0 > 0 + let opt['desc'] = a:1 + endif + + call options#add(a:name, opt) +endfunction + +function! options#getAll() abort + let list = [] + for [key, val] in items(s:options) + let desc = val.desc != '' ? ' - ' . val.desc : '' + call add(list, [key, key . desc]) + endfor + return list +endfunction + +function! options#getAllRaw() abort + let list = [] + for [key, val] in items(s:options) + call add(list, [key, desc]) + endfor + return list +endfunction + +function! options#toggle(name) abort + if !has_key(s:options, a:name) + throw 'invalid option name: ' . a:name + endif + + let opt = s:options[a:name] + if has_key(opt, 'togglefunc') + call opt.togglefunc(a:name) + else + if type(opt.isEnabled) == v:t_func + let isEnabled = opt.isEnabled() + else + let isEnabled = opt.isEnabled + endif + if isEnabled + call opt.disablefunc() + else + call opt.enablefunc() + endif + if type(opt.isEnabled) != v:t_func + let s:options[a:name].isEnabled = opt.isEnabled ? v:false : v:true + endif + endif +endfunction + +function! options#preSet() + call options#addVimOption('number', 'show line number') + call options#addVimOption('relativenumber') + + let colorcolumnOpt = { + \ 'desc': 'show color column', + \ 'isEnabled': &colorcolumn != '' + \ } + function colorcolumnOpt.togglefunc(...) + if &colorcolumn == '' + let &colorcolumn = '80' + else + let &colorcolumn = '' + endif + endfunction + + call options#add('colorcolumn', colorcolumnOpt) + + let toggleBgOpt = { + \ 'desc': 'toggle dark/light theme', + \ } + function toggleBgOpt.togglefunc(...) + call theme#toggleBg() + endfunction + call options#add('dark/light', toggleBgOpt) +endfunction + +function! s:select(wid, result) + let result = a:result[0] + if result != v:null + let key = s:rmap[result] + call options#toggle(key) + endif +endfunction + +function! options#fzf_options() + let list = [] + let s:rmap = {} + for [key, val] in items(s:options) + let desc = val.desc != '' ? key . ' - ' . val.desc : key + call add(list, desc) + let s:rmap[desc] = key + endfor + let s:fzf_list = list + call selector.Start( list, + \ { + \ 'select_cb' : function('s:select'), + \ 'yoffset' : 0.3, + \ 'height' : 0.4, + \ 'title' : 'Options', + \ 'width' : 0.4 + \ }) +endfunc + +function! options#init() + call options#preSet() + command! -nargs=0 Options call options#fzf_options() + nnoremap fo :Options +endfunction diff --git a/config/vim/autoload/os.vim b/config/vim/autoload/os.vim new file mode 100644 index 0000000..52fba39 --- /dev/null +++ b/config/vim/autoload/os.vim @@ -0,0 +1,14 @@ +func! os#getOS() + if has("win64") || has("win32") || has("win16") + return "Windows" + else + return substitute(system('uname'), '\n', '', '') + endif +endfunc + +function! os#setWindows() + set updatetime=50 + set shell=powershell +endfunction + + diff --git a/config/vim/autoload/theme.vim b/config/vim/autoload/theme.vim new file mode 100644 index 0000000..e0df6d6 --- /dev/null +++ b/config/vim/autoload/theme.vim @@ -0,0 +1,383 @@ +let s:path = get(g:, 'theme_config_path', fnamemodify( + \ resolve(expand(':p')), ':h:h').'/theme_config.vim') + +let s:themefixes = [] + +let s:bgType = has('termguicolors') ? 'guibg' : 'ctermbg' + +" sometimes even in termguicolors, when guibg is not set, the bg will fall +" back to use ctermbg, so we have to set them both to none +let s:bgNonType = !has('termguicolors') ? 'guibg=NONE' : 'ctermbg=NONE' +let s:transBlendOpt = has('nvim') ? ' blend=0' : '' + +let s:default_config = { + \ 'background': 'dark', + \ 'light': { + \ 'theme': 'sunbather_light', + \ 'default': 'sunbather_light', + \ 'transparent': v:false, + \ 'airline_theme': 'sunbather_light', + \ }, + \ 'dark': { + \ 'theme': 'base16-harmonic-dark', + \ 'default': 'base16-harmonic-dark', + \ 'transparent': v:false, + \ 'airline_theme': 'base16-harmonic-dark', + \ }, +\ } + +" When enable transparent background, these group will be set to transparent +let s:transgroups = [ + \ 'Normal', 'NormalNC', 'Comment', 'Constant', 'Special', 'Identifier', + \ 'Folded', 'Statusline', 'StatuslineNC', + \ 'Statement', 'PreProc', 'Type', 'Underlined', 'String', 'Function', + \ 'Conditional', 'Repeat', 'Operator', 'Structure', 'LineNr', 'NonText', + \ 'SignColumn', 'CursorLineNr', 'EndOfBuffer', 'VertSplit', + \ 'DiagnosticSignWarn', 'DiagnosticSignError', 'DiagnosticSignInfo',] + +" background group that will be set to normal's background color +let s:cleanbg = ['DiagnosticSignWarn', 'DiagnosticSignError', 'DiagnosticSignInfo', + \ 'VertSplit', 'LineNr', 'SignColumn', 'NormalFloat'] + +let s:config = get(g:, 'theme_config', s:default_config) + +function! theme#setConfig(bg, key, value) + let s:config[a:bg][a:key] = a:value +endfunction +" register extra transparent hi group +function! theme#getCleanBg() + return s:cleanbg +endfunction + +function! theme#getBgType() + return s:bgType +endfunction + +function! theme#getTransGroup() + return s:transgroups +endfunction + +" register extra transparent hi group +function theme#addCleanBg(group) + let li = type(a:group) == 1 ? [a:group] : a:group + for hi in li + if index(s:cleanbg, hi) == -1 + call add(s:cleanbg, hi) + endif + endfor +endfunction + +" register extra transparent hi group +function theme#addTransGroup(group) + let li = type(a:group) == 1 ? [a:group] : a:group + for hi in li + if index(s:transgroups, hi) == -1 + call add(s:transgroups, hi) + endif + endfor +endfunction + +function! theme#setColor(bg, ...) + let colors_name = a:0 > 0 ? a:1 : s:config[a:bg].theme + if !utils#hascolorscheme(colors_name) + let colors_name = 'default' + endif + noa let &bg = a:bg + call theme#setStlColor(a:bg) + let s:config.background = a:bg + let s:config[a:bg].theme = colors_name + noa execute("colorscheme " . colors_name) + if &background != a:bg + noa let &bg = a:bg + endif + " some theme will pick their own airline theme or airline will + " automatically pick theme based on colorscheme + if exists('g:airline_theme') && g:airline_theme != s:config[a:bg].airline_theme + call theme#setStlColor(a:bg, g:airline_theme) + endif +endfunction + +" Change bottom airline/lualine theme +function! theme#setStlColor(bg, ...) + if has('nvim-0.5') + " lualine will change theme automatically + else + if utils#hasplug('vim-airline') && exists(':AirlineTheme') + let theme = a:0 > 0 ? a:1 : s:config[a:bg].airline_theme + try + execute('AirlineTheme ' . theme) + catch + let theme = s:default_config[a:bg].airline_theme + execute('AirlineTheme ' . theme) + endtry + let s:config[a:bg].airline_theme = theme + endif + endif +endfunction + +function! theme#inTransparent() + return s:config[&background].transparent +endfunction + +" return 1 if link to other group +" return 2 if not exists +" return 0 if normal +function! s:hiType(group) + try + let hi = execute('hi '.a:group) + if hi =~# 'link' + return 2 + endif + catch + return 1 + endtry + return 0 +endfunction + +function s:applyTransparent() + let tail = ' ' . s:bgType . '=NONE term=NONE gui=NONE cterm=NONE ' + if has('nvim') + let tail .= s:transBlendOpt + else + let tail .= s:bgNonType + endif + for group in s:transgroups + if s:hiType(group) != 0 + continue + endif + " cterm and term sometimes are set to reverse so we need to clean them + " too + " for the last part, we can't clear all terms or it will fall back to + " default which is not transparent + execute('hi! '.group . tail) + endfor + call s:generalThemeFix() + " for group in s:cleanbg + " if s:hiType(group) != 0 + " continue + " endif + " execute('hi! '.group . tail) + " endfor +endfunction + +" some callback function to enable transparent background +" for specific colorscheme + +" or general callback for all colorscheme when specific colorscheme callback +" is not available +" g:dark_transparent_enable_cb +" g:light_transparent_enable_cb + +function! theme#enableTransparent() abort + let colorscheme_name = utils#colorschemename() + let bg = &background + if exists('g:'.bg.'_transparent_enable_cb') && g:dark_transparent_enable_cb != '' + let cb_name = get(g:, bg.'_transparent_enable_cb', '') + if cb_name != '' + execute('call '.cb_name.'()') + endif + elseif exists('g:Transparent_enable_func') + if type(g:Transparent_enable_func) != v:t_func + echoerr 'g:Transparent_enable_func is not a function' + endif + call g:Transparent_enable_func() + else + call s:applyTransparent() + augroup SetTransparent + autocmd! + autocmd ColorScheme * call s:applyTransparent() + augroup END + endif + let s:config[bg].transparent = v:true +endfunction + +function! theme#disableTransparent() abort + augroup SetTransparent + autocmd! + augroup END + let bg = &background + let s:config[bg].transparent = v:false + let colorscheme_name = utils#colorschemename() + if exists('g:'.bg.'_transparent_disable_cb') + let cb_name = get(g:, bg.'_transparent_disable_cb', '') + if cb_name != '' + execute('call '.cb_name.'()') + endif + elseif exists('g:Transparent_disable_func') + if type(g:Transparent_disable_func) != v:t_func + echoerr 'g:Transparent_disable_func is not a function' + endif + call g:Transparent_disable_func() + else + execute('colorscheme ' . s:config[bg].theme) + endif +endfunction + +" ToggleTransparent background +function! theme#toggleTransparent() + if s:config[&background].transparent + call theme#disableTransparent() + else + call theme#enableTransparent() + endif +endfunction + +" Allow to trigger background +function! theme#toggleBg() + " Inversion + let newbg = &background == "dark" ? 'light' : 'dark' + call theme#setColor(newbg) + if s:config[&background].transparent + call theme#enableTransparent() + elseif !s:config[&background].transparent + call theme#disableTransparent() + endif +endfunction + +function! theme#saveConfig() + let p = utils#readvar(s:path) + if type(p) != type({}) + let p = {} + endif + + let vim_type = has('nvim') ? 'nvim' : 'vim' + + let config = has_key(p, vim_type) && type(p[vim_type]) == 4 + \ ? p[vim_type] : {} + + let config = utils#merge(config, s:config) + + " vim and nvim may have diferenrt available plugins + let p[vim_type] = config + call utils#savevar(p, s:path) +endfunction + +function! theme#loadConfig() + let result = utils#readvar(s:path) + " if it is dictionary + let vim_type = has('nvim') ? 'nvim' : 'vim' + if type(result) == 4 + if has_key(result, vim_type) + let config = result[vim_type] + if type(config) == 4 + return config + endif + endif + endif + return {} +endfunction + +function! theme#getHiTerms(group) + let output = execute('hi ' . a:group) + if stridx(output, 'links to') > 0 + let higroup = matchstr(output, 'links.to.\?\zs\S\+\ze') + return theme#getHiTerms(higroup) + endif + let list = split(output, '') + let dict = {} + + for item in list + if stridx(item, '=') > 0 + let splited = split(item, '=') + let dict[splited[0]] = splited[1] + endif + endfor + + for item in ['guibg', 'ctermbg', 'term', 'cterm', 'guifg', 'ctermfg'] + if ! has_key(dict, item) + let dict[item] = 'NONE' + endif + endfor + return dict +endfunction + +function! theme#getHiTerm(group, term) + " Store output of group to variable + let output = theme#getHiTerms(a:group) + return output[a:term] +endfunction + +function! s:regiesterThemeFix(Func) + call add(s:theme_fix, a:Func) +endfunction + +function! s:generalThemeFix() +" The following is for getting rid of the vim split bar and match its +" and number cols' color with backgroud + " if theme#inTransparent() + " return + " endif + if &bg != s:config.background + execute('set bg=' . s:config.background) + endif + + let normal = theme#getHiTerms('normal') + let hiTerms = ' ' + for term in ['guibg', 'ctermbg', 'term', 'cterm'] + let hiTerms .= term . '=' . normal[term] . ' ' + endfor + + for group in s:cleanbg + " if s:hiType(group) != 0 + " continue + " endif + " transBlendOpt is used to prevent hi from being clear + execute('hi! ' . group . hiTerms) + endfor + + " highlight cursorline number only + " this needs option set cursorlineopt=number + if s:hiType('CursorLineNr') == 0 + hi! CursorLineNr guibg=NONE ctermbg=NONE cterm=bold gui=bold + endif + + for Func in s:themefixes + call Func() + endfor +endfunction + +function! theme#Init() + if has('termguicolors') + set termguicolors + endif + + if has('nvim') + set fillchars+=stl:\ ,stlnc:\ , + endif + + let s:config = utils#merge(s:default_config, theme#loadConfig()) + + let bg = s:config.background + if utils#hascolorscheme(s:config[bg].theme) + call theme#setColor(bg) + else + call theme#setColor(bg, s:config[bg].default) + endif + + if s:config[bg].transparent + call theme#enableTransparent() + else + call theme#disableTransparent() + endif + call s:generalThemeFix() + + if exists('*options#add') + let toggle_transparent = { 'desc' : 'Toggle transparent background' } + func toggle_transparent.togglefunc(...) + call theme#toggleTransparent() + endfunc + call options#add('toggle_transparent', toggle_transparent) + endif + + augroup GeneralTheme + autocmd! + autocmd ColorScheme * call s:generalThemeFix() + autocmd ColorScheme * let s:config.background = &bg | call theme#setColor(&bg, expand('')) + autocmd VimLeave * call theme#saveConfig() + augroup END + +endfunction + +function! theme#getConfig() + return s:config +endfunction diff --git a/config/vim/autoload/utils.vim b/config/vim/autoload/utils.vim new file mode 100644 index 0000000..a4758e7 --- /dev/null +++ b/config/vim/autoload/utils.vim @@ -0,0 +1,194 @@ + +" return a python version available (from 3 to 2) +fun! utils#get_usable_py() + let py = '' + if executable('python3') + let py = 'python3' + elseif executable('python2') + let py = 'python2' + elseif executable('python') + let py = 'python' + endif + return py +endfun + +" Check if plugin exists +function! utils#hasplug(plug_name, ...) + let plug_dir_name = get(a:, 1, a:plug_name) " optional argument for the name of plug's folder + if has_key(g:plugs, a:plug_name) && isdirectory(g:plugin_dir . "/" . plug_dir_name) + if has_key(g:plugs[a:plug_name], 'for') || has_key(g:plugs[a:plug_name], 'on') + if (has_key(g:plugs[a:plug_name], 'for') && len(g:plugs[a:plug_name]['for']) == 0) || + \ (has_key(g:plugs[a:plug_name], 'on') && len(g:plugs[a:plug_name]['on']) == 0) + return v:false + endif + endif + return v:true + endif + return v:false +endfunction + +" This function is used to save a variable to a file +function! utils#savevar(var, file) + let serialized = string(a:var) + call writefile([serialized], a:file) +endfun + +" This function is used to retrieve a variable from a file +" only first line is count +function! utils#readvar(file) + if !filereadable(a:file) + return v:null + endif + let serialized = readfile(a:file) + if(len(serialized) == 0) + return v:null + endif + execute "let result = " . serialized[0] + return result +endfun + +" Merge two dictionaries, also recursively merging nested keys. +" Use extend() if you don't need to merge nested keys. +fun! utils#merge(defaults, override) + let l:new = copy(a:defaults) + for [l:k, l:v] in items(a:override) + let l:new[l:k] = (type(l:v) is v:t_dict && type(get(l:new, l:k)) is v:t_dict) + \ ? utils#merge(l:new[l:k], l:v) + \ : l:v + endfor + return l:new +endfun + +"Remove all trailing whitespace by pressing ws +fun! utils#trimwhitespace() + let l:save = winsaveview() + keeppatterns %s/\s*\r\=$//e + call winrestview(l:save) +endfun + +function! utils#hascolorscheme(name) + let scheme = a:name + let colors = globpath(&runtimepath, printf('colors/%s.vim', scheme), 1, 1) + if len(colors) > 0 | return 1 | endif + let colors += globpath(&packpath, printf('pack/*/start/*/colors/%s.vim', scheme), 1, 1) + if len(colors) > 0 | return 1 | endif + let colors += globpath(&packpath, printf('pack/*/opt/*/colors/%s.vim', scheme), 1, 1) + if len(colors) > 0 | return 1 | endif + if has('nvim') + let colors = globpath(&runtimepath, printf('colors/%s.lua', scheme), 1, 1) + if len(colors) > 0 | return 1 | endif + let colors += globpath(&packpath, printf('pack/*/start/*/colors/%s.lua', scheme), 1, 1) + if len(colors) > 0 | return 1 | endif + let colors += globpath(&packpath, printf('pack/*/opt/*/colors/%s.lua', scheme), 1, 1) + if len(colors) > 0 | return 1 | endif + endif + return 0 +endfunction + +" get current colorscheme name +" return default if not found +function! utils#colorschemename() + return execute('colo')[1:] + try + return g:colors_name + catch /^Vim:E121/ + return "default" + catch /.*/ + return "default" + endtry +endfunction + +" debug function print out highlight group of cursor position +function! utils#showHiGroup(...) + if !exists("*synstack") + return + endif + let l = a:0 == 2 ? a:1 : line('.') + let c = a:0 == 2 ? a:2 : col('.') + echo map(synstack(l, c), 'synIDattr(v:val, "name")') + + :echo "hi<" . synIDattr(synID(l,c,1),"name") . '> trans<' + \ . synIDattr(synID(l,c,0),"name") . "> lo<" + \ . synIDattr(synIDtrans(synID(l,c,1)),"name") . ">" + +endfunc + +" get highlight group information and return as dictionary +function! utils#getHi(group) + let output = execute('hi ' . a:group) + let list = split(output, '\s\+') + let dict = {} + for item in list + if match(item, '=') > 0 + let splited = split(item, '=') + let dict[splited[0]] = splited[1] + endif + endfor + return dict +endfunction + +function! utils#isTransparent() + let dict = utils#getHi('Normal') + let isGui = &termguicolors + if isGui + if !has_key(dict, 'guibg') + return 1 + endif + elseif !isGui + if !has_key(dict, 'ctermfg') + return 1 + endif + endif + return 0 +endfunction + +function! s:scratch() + split + noswapfile hide enew + setlocal buftype=nofile + setlocal bufhidden=hide + setlocal nobuflisted +endfunction + +" search highlight group with pattern +function! utils#searchHi(pattern) + execute("filter /" . a:pattern . "/ highlight") + " color not working + " let temp_reg = @" + " redir @" + " silent! execute("filter /" . a:pattern . "/ highlight") + " redir END + " let output = copy(@") + " let @" = temp_reg + " call s:scratch() + " put! =output +endfunc + +function! utils#swapword() + let word = expand("") + let l1 = g:swap_dict[0] + let l2 = g:swap_dict[1] + let inx = index(l1, word) + if inx != -1 + let newword = l2[inx] + else + let inx = index(l2, word) + if inx != -1 + let newword = l1[inx] + endif + endif + if inx != -1 + execute "normal ciw" . newword . "\" + endif +endfunction + +function! utils#files(...) + if a:0 > 0 + let path = a:1 + else + let path = getcwd() + endif + let files = glob(path . '/**', 1, 1, 1) + return files +endfunction + diff --git a/config/vim/bin/preview.py b/config/vim/bin/preview.py new file mode 100755 index 0000000..d751efb --- /dev/null +++ b/config/vim/bin/preview.py @@ -0,0 +1,98 @@ +#!/usr/bin/env python3 + +""" preview.py theme arg +""" + +import os +import sys + +class bcolors: + HEADER = '\033[95m' + OKBLUE = '\033[94m' + OKCYAN = '\033[96m' + OKGREEN = '\033[92m' + WARNING = '\033[93m' + RED = '\033[31m' + YELLOW = '\033[33m' + FAIL = '\033[91m' + ENDC = '\033[0m' + BOLD = '\033[1m' + UNDERLINE = '\033[4m' + +def is_tool(name): + """Check whether `name` is on PATH and marked as executable.""" + from shutil import which + return which(name) is not None + +def get_preview_tool(): + exec = None + if is_tool('bat'): + exec = 'bat' + elif is_tool('batcat'): + exec = 'batcat' + elif is_tool('cat'): + exec = 'cat' + return exec + +if __name__ == '__main__': + + theme = sys.argv[1] + if theme == 'light': + theme = 'ansi' + tcolor = '31' + color = bcolors.RED + else: + theme = '1337' + tcolor = '33' + color = bcolors.YELLOW + + filepath = ''.join(sys.argv[2:]) + args = filepath.split(":") + args += [None, None] + + file = args[0] + center = args[1] + # print(sys.argv[2:]) + # exit(0) + # if os.name == 'nt': + # file += args[1] + # center = args[2] + + if file == None or not os.path.isfile(file): + print("File not found {}".format(file)) + exit(0) + + if center is None: center = 0 + + batcmd = get_preview_tool() + cmdstr = None + + if file[0] == '-': + file = './' + file + if batcmd: + if batcmd == 'cat': + if center: + cmdstr = 'cat -n {} | perl -pe "s/^.*?\s{}\s.*?$/\e[1;{}m$&\e[0m/g"'.format(file, center, tcolor) + else: + cmdstr = 'cat -n {}'.format(file) + elif batcmd == 'bat': + cmdstr = 'bat --theme={} --style=numbers --color=always \ + --pager=never --highlight-line={} "{}"'.format(theme, center, file) + if cmdstr: + os.system(cmdstr) + else: + f = open(file, 'r') + Lines = f.readlines() + center = int(center) + linenr = 1 + + for line in Lines: + if linenr == center: + print("{}{:4d} {}{}".format(color, linenr, line, bcolors.ENDC), end='') + else: + print("{:4d} {}".format(linenr, line), end='') + linenr += 1 + f.close() + + + diff --git a/config/vim/colors/sunbather_dark.vim b/config/vim/colors/sunbather_dark.vim new file mode 100644 index 0000000..ad939ea --- /dev/null +++ b/config/vim/colors/sunbather_dark.vim @@ -0,0 +1,214 @@ +" Name: sunbather.vim +" Version: 0.1.0 +" Maintainer: github.com/nikolvs +" License: The MIT License (MIT) +" +" A minimal pink colorscheme for Vim. +" +" Forked from paramount: +" https://github.com/owickstrom/vim-colors-paramount +" +""" +hi clear + +if exists('syntax on') + syntax reset +endif + +let g:colors_name='sunbather_dark' + +let s:black = { "gui": "#000000", "cterm": "232" } +let s:medium_gray = { "gui": "#767676", "cterm": "243" } +let s:white = { "gui": "#F1F1F1", "cterm": "15" } +let s:actual_white = { "gui": "#FFFFFF", "cterm": "231" } +let s:subtle_black = { "gui": "#121212", "cterm": "233" } +let s:light_black = { "gui": "#262626", "cterm": "235" } +let s:lighter_black = { "gui": "#4E4E4E", "cterm": "239" } +let s:light_gray = { "gui": "#A8A8A8", "cterm": "248" } +let s:lighter_gray = { "gui": "#C6C6C6", "cterm": "251" } +let s:lightest_gray = { "gui": "#EEEEEE", "cterm": "255" } +let s:dark_pink = { "gui": "#ff5f87", "cterm": "204" } +let s:light_pink = { "gui": "#d75f87", "cterm": "168" } +let s:dark_red = { "gui": "#C30771", "cterm": "1" } +let s:light_red = { "gui": "#E32791", "cterm": "1" } +let s:orange = { "gui": "#D75F5F", "cterm": "167" } +let s:darker_blue = { "gui": "#005F87", "cterm": "18" } +let s:dark_blue = { "gui": "#008EC4", "cterm": "32" } +let s:blue = { "gui": "#20BBFC", "cterm": "12" } +let s:light_blue = { "gui": "#b6d6fd", "cterm": "153" } +let s:dark_cyan = { "gui": "#20A5BA", "cterm": "6" } +let s:light_cyan = { "gui": "#4FB8CC", "cterm": "14" } +let s:dark_green = { "gui": "#10A778", "cterm": "2" } +let s:light_green = { "gui": "#5FD7A7", "cterm": "10" } +let s:light_purple = { "gui": "#a790d5", "cterm": "140" } +let s:yellow = { "gui": "#F3E430", "cterm": "11" } +let s:light_yellow = { "gui": "#ffff87", "cterm": "228" } +let s:dark_yellow = { "gui": "#A89C14", "cterm": "3" } + +let s:background = 'dark' + +let s:bg = s:black +let s:bg_subtle = s:lighter_black +let s:bg_very_subtle = s:subtle_black +let s:norm = s:lighter_gray +let s:norm_subtle = s:medium_gray +let s:pink = s:light_pink +let s:cyan = s:light_cyan +let s:green = s:light_green +let s:red = s:light_red +let s:visual = s:light_pink +let s:yellow = s:light_yellow + +" https://github.com/noahfrederick/vim-hemisu/ +function! s:h(group, style) + execute "highlight" a:group + \ "guifg=" (has_key(a:style, "fg") ? a:style.fg.gui : "NONE") + \ "guibg=" (has_key(a:style, "bg") ? a:style.bg.gui : "NONE") + \ "guisp=" (has_key(a:style, "sp") ? a:style.sp.gui : "NONE") + \ "gui=" (has_key(a:style, "gui") ? a:style.gui : "NONE") + \ "ctermfg=" (has_key(a:style, "fg") ? a:style.fg.cterm : "NONE") + \ "ctermbg=" (has_key(a:style, "bg") ? a:style.bg.cterm : "NONE") + \ "cterm=" (has_key(a:style, "cterm") ? a:style.cterm : "NONE") +endfunction + +call s:h("Normal", {"bg": s:bg, "fg": s:norm}) + +" restore &background's value in case changing Normal changed &background (:help :hi-normal-cterm) +execute "set background=" . s:background + +call s:h("Cursor", {"bg": s:pink, "fg": s:norm }) +call s:h("Comment", {"fg": s:bg_subtle, "gui": "italic"}) + +call s:h("Constant", {"fg": s:pink}) +hi! link Character Constant +hi! link Number Constant +hi! link Boolean Constant +hi! link Float Constant +hi! link String Constant + +"call s:h("Identifier", {"fg": s:dark_blue}) +hi! link Identifier Normal +hi! link Function Identifier + +call s:h("Statement", {"fg": s:norm_subtle}) +hi! link Conditonal Statement +hi! link Repeat Statement +hi! link Label Statement +hi! link Keyword Statement +hi! link Exception Statement + +call s:h("Operator", {"fg": s:norm, "cterm": "bold", "gui": "bold"}) + +call s:h("PreProc", {"fg": s:norm_subtle}) +hi! link Include PreProc +hi! link Define PreProc +hi! link Macro PreProc +hi! link PreCondit PreProc + +call s:h("Type", {"fg": s:norm}) +hi! link StorageClass Type +hi! link Structure Type +hi! link Typedef Type + +call s:h("Special", {"fg": s:norm_subtle, "gui": "italic"}) +hi! link SpecialChar Special +hi! link Tag Special +hi! link Delimiter Special +hi! link SpecialComment Special +hi! link Debug Special + +call s:h("Underlined", {"fg": s:norm, "gui": "underline", "cterm": "underline"}) +call s:h("Ignore", {"fg": s:bg}) +call s:h("Error", {"fg": s:actual_white, "bg": s:red, "cterm": "bold"}) +call s:h("Todo", {"fg": s:pink, "gui": "underline", "cterm": "underline"}) +call s:h("SpecialKey", {"fg": s:light_green}) +call s:h("NonText", {"fg": s:medium_gray}) +call s:h("Directory", {"fg": s:dark_blue}) +call s:h("ErrorMsg", {"fg": s:red}) +call s:h("IncSearch", {"bg": s:yellow, "fg": s:light_black}) +call s:h("Search", {"bg": s:light_green, "fg": s:light_black}) +call s:h("MoreMsg", {"fg": s:medium_gray, "cterm": "bold", "gui": "bold"}) +hi! link ModeMsg MoreMsg +call s:h("LineNr", {"fg": s:bg_subtle}) +call s:h("CursorLineNr", {"fg": s:pink, "bg": s:bg_very_subtle}) +call s:h("Question", {"fg": s:red}) +call s:h("StatusLine", {"bg": s:bg_very_subtle}) +call s:h("StatusLineNC", {"bg": s:bg_very_subtle, "fg": s:medium_gray}) +call s:h("VertSplit", {"bg": s:bg_very_subtle, "fg": s:bg_very_subtle}) +call s:h("Title", {"fg": s:dark_blue}) +call s:h("Visual", {"fg": s:norm, "bg": s:visual}) +call s:h("VisualNOS", {"bg": s:bg_subtle}) +call s:h("WarningMsg", {"fg": s:yellow}) +call s:h("WildMenu", {"fg": s:bg, "bg": s:norm}) +call s:h("Folded", {"fg": s:medium_gray}) +call s:h("FoldColumn", {"fg": s:bg_subtle}) +call s:h("DiffAdd", {"fg": s:green}) +call s:h("DiffDelete", {"fg": s:red}) +call s:h("DiffChange", {"fg": s:dark_yellow}) +call s:h("DiffText", {"fg": s:dark_blue}) +call s:h("SignColumn", {"fg": s:light_green}) + + +if has("gui_running") + call s:h("SpellBad", {"gui": "underline", "sp": s:red}) + call s:h("SpellCap", {"gui": "underline", "sp": s:light_green}) + call s:h("SpellRare", {"gui": "underline", "sp": s:light_purple}) + call s:h("SpellLocal", {"gui": "underline", "sp": s:dark_green}) +else + call s:h("SpellBad", {"cterm": "underline", "fg": s:red}) + call s:h("SpellCap", {"cterm": "underline", "fg": s:light_green}) + call s:h("SpellRare", {"cterm": "underline", "fg": s:light_purple}) + call s:h("SpellLocal", {"cterm": "underline", "fg": s:dark_green}) +endif + +call s:h("Pmenu", {"fg": s:norm, "bg": s:bg_very_subtle}) +call s:h("PmenuSel", {"fg": s:subtle_black, "bg": s:pink}) +call s:h("PmenuSbar", {"fg": s:norm, "bg": s:bg_subtle}) +call s:h("PmenuThumb", {"fg": s:norm, "bg": s:bg_subtle}) +call s:h("TabLine", {"fg": s:norm, "bg": s:bg_very_subtle}) +call s:h("TabLineSel", {"fg": s:subtle_black, "bg": s:pink, "gui": "bold", "cterm": "bold"}) +call s:h("TabLineFill", {"fg": s:norm, "bg": s:bg_very_subtle}) +call s:h("CursorColumn", {"bg": s:bg_very_subtle}) +call s:h("CursorLine", {"bg": s:bg_very_subtle}) +call s:h("ColorColumn", {"bg": s:bg_subtle}) + +call s:h("MatchParen", {"bg": s:bg_subtle, "fg": s:norm}) +call s:h("qfLineNr", {"fg": s:medium_gray}) + +call s:h("htmlH1", {"bg": s:bg, "fg": s:norm}) +call s:h("htmlH2", {"bg": s:bg, "fg": s:norm}) +call s:h("htmlH3", {"bg": s:bg, "fg": s:norm}) +call s:h("htmlH4", {"bg": s:bg, "fg": s:norm}) +call s:h("htmlH5", {"bg": s:bg, "fg": s:norm}) +call s:h("htmlH6", {"bg": s:bg, "fg": s:norm}) + +" Syntastic +call s:h("SyntasticWarningSign", {"fg": s:yellow}) +call s:h("SyntasticWarning", {"bg": s:yellow, "fg": s:black, "gui": "bold", "cterm": "bold"}) +call s:h("SyntasticErrorSign", {"fg": s:red}) +call s:h("SyntasticError", {"bg": s:red, "fg": s:white, "gui": "bold", "cterm": "bold"}) + +" which-key.nvim +call s:h("WhichKey", {"bg": s:bg, "fg": s:pink, "gui": "bold", "cterm": "bold"}) +call s:h("WhichKeyDesc", {"bg": s:bg, "fg": s:norm_subtle, "gui": "bold", "cterm": "bold"}) +call s:h("WhichKeySeparator", {"bg": s:bg, "fg": s:norm, "gui": "bold", "cterm": "bold"}) +call s:h("WhichKeyFloat", {"bg": s:bg}) + +hi link WhichKeyGroup WhichKey + +" Neomake +hi link NeomakeWarningSign SyntasticWarningSign +hi link NeomakeErrorSign SyntasticErrorSign + +" ALE +hi link ALEWarningSign SyntasticWarningSign +hi link ALEErrorSign SyntasticErrorSign + +" Signify, git-gutter +hi link SignifySignAdd LineNr +hi link SignifySignDelete LineNr +hi link SignifySignChange LineNr +hi link GitGutterAdd LineNr +hi link GitGutterDelete LineNr +hi link GitGutterChange LineNr +hi link GitGutterChangeDelete LineNr diff --git a/config/vim/colors/sunbather_light.vim b/config/vim/colors/sunbather_light.vim new file mode 100644 index 0000000..4abe4b6 --- /dev/null +++ b/config/vim/colors/sunbather_light.vim @@ -0,0 +1,214 @@ +" Name: sunbather.vim +" Version: 0.1.0 +" Maintainer: github.com/nikolvs +" License: The MIT License (MIT) +" +" A minimal pink colorscheme for Vim. +" +" Forked from paramount: +" https://github.com/owickstrom/vim-colors-paramount +" +""" +hi clear + +if exists('syntax on') + syntax reset +endif + +let g:colors_name='sunbather_light' + +let s:black = { "gui": "#000000", "cterm": "232" } +let s:medium_gray = { "gui": "#767676", "cterm": "243" } +let s:white = { "gui": "#F1F1F1", "cterm": "15" } +let s:actual_white = { "gui": "#FFFFFF", "cterm": "231" } +let s:subtle_black = { "gui": "#121212", "cterm": "233" } +let s:light_black = { "gui": "#262626", "cterm": "235" } +let s:lighter_black = { "gui": "#4E4E4E", "cterm": "239" } +let s:light_gray = { "gui": "#A8A8A8", "cterm": "248" } +let s:lighter_gray = { "gui": "#C6C6C6", "cterm": "251" } +let s:lightest_gray = { "gui": "#EEEEEE", "cterm": "255" } +let s:dark_pink = { "gui": "#ff5f87", "cterm": "204" } +let s:light_pink = { "gui": "#d75f87", "cterm": "168" } +let s:dark_red = { "gui": "#C30771", "cterm": "1" } +let s:light_red = { "gui": "#E32791", "cterm": "1" } +let s:orange = { "gui": "#D75F5F", "cterm": "167" } +let s:darker_blue = { "gui": "#005F87", "cterm": "18" } +let s:dark_blue = { "gui": "#008EC4", "cterm": "32" } +let s:blue = { "gui": "#20BBFC", "cterm": "12" } +let s:light_blue = { "gui": "#b6d6fd", "cterm": "153" } +let s:dark_cyan = { "gui": "#20A5BA", "cterm": "6" } +let s:light_cyan = { "gui": "#4FB8CC", "cterm": "14" } +let s:dark_green = { "gui": "#10A778", "cterm": "2" } +let s:light_green = { "gui": "#5FD7A7", "cterm": "10" } +let s:light_purple = { "gui": "#a790d5", "cterm": "140" } +let s:yellow = { "gui": "#F3E430", "cterm": "11" } +let s:light_yellow = { "gui": "#ffff87", "cterm": "228" } +let s:dark_yellow = { "gui": "#A89C14", "cterm": "3" } + +let s:background = 'light' + +let s:bg = s:actual_white +let s:bg_subtle = s:light_gray +let s:bg_very_subtle = s:lightest_gray +let s:norm = s:light_black +let s:norm_subtle = s:medium_gray +let s:pink = s:dark_pink +let s:cyan = s:dark_cyan +let s:green = s:dark_green +let s:red = s:dark_red +let s:visual = s:dark_pink +let s:yellow = s:dark_yellow + +" https://github.com/noahfrederick/vim-hemisu/ +function! s:h(group, style) + execute "highlight" a:group + \ "guifg=" (has_key(a:style, "fg") ? a:style.fg.gui : "NONE") + \ "guibg=" (has_key(a:style, "bg") ? a:style.bg.gui : "NONE") + \ "guisp=" (has_key(a:style, "sp") ? a:style.sp.gui : "NONE") + \ "gui=" (has_key(a:style, "gui") ? a:style.gui : "NONE") + \ "ctermfg=" (has_key(a:style, "fg") ? a:style.fg.cterm : "NONE") + \ "ctermbg=" (has_key(a:style, "bg") ? a:style.bg.cterm : "NONE") + \ "cterm=" (has_key(a:style, "cterm") ? a:style.cterm : "NONE") +endfunction + +call s:h("Normal", {"bg": s:bg, "fg": s:norm}) + +" restore &background's value in case changing Normal changed &background (:help :hi-normal-cterm) +execute "set background=" . s:background + +call s:h("Cursor", {"bg": s:pink, "fg": s:norm }) +call s:h("Comment", {"fg": s:bg_subtle, "gui": "italic"}) + +call s:h("Constant", {"fg": s:pink}) +hi! link Character Constant +hi! link Number Constant +hi! link Boolean Constant +hi! link Float Constant +hi! link String Constant + +"call s:h("Identifier", {"fg": s:dark_blue}) +hi! link Identifier Normal +hi! link Function Identifier + +call s:h("Statement", {"fg": s:norm_subtle}) +hi! link Conditonal Statement +hi! link Repeat Statement +hi! link Label Statement +hi! link Keyword Statement +hi! link Exception Statement + +call s:h("Operator", {"fg": s:norm, "cterm": "bold", "gui": "bold"}) + +call s:h("PreProc", {"fg": s:norm_subtle}) +hi! link Include PreProc +hi! link Define PreProc +hi! link Macro PreProc +hi! link PreCondit PreProc + +call s:h("Type", {"fg": s:norm}) +hi! link StorageClass Type +hi! link Structure Type +hi! link Typedef Type + +call s:h("Special", {"fg": s:norm_subtle, "gui": "italic"}) +hi! link SpecialChar Special +hi! link Tag Special +hi! link Delimiter Special +hi! link SpecialComment Special +hi! link Debug Special + +call s:h("Underlined", {"fg": s:norm, "gui": "underline", "cterm": "underline"}) +call s:h("Ignore", {"fg": s:bg}) +call s:h("Error", {"fg": s:actual_white, "bg": s:red, "cterm": "bold"}) +call s:h("Todo", {"fg": s:pink, "gui": "underline", "cterm": "underline"}) +call s:h("SpecialKey", {"fg": s:light_green}) +call s:h("NonText", {"fg": s:medium_gray}) +call s:h("Directory", {"fg": s:dark_blue}) +call s:h("ErrorMsg", {"fg": s:red}) +call s:h("IncSearch", {"bg": s:yellow, "fg": s:light_black}) +call s:h("Search", {"bg": s:light_green, "fg": s:light_black}) +call s:h("MoreMsg", {"fg": s:medium_gray, "cterm": "bold", "gui": "bold"}) +hi! link ModeMsg MoreMsg +call s:h("LineNr", {"fg": s:bg_subtle}) +call s:h("CursorLineNr", {"fg": s:pink, "bg": s:bg_very_subtle}) +call s:h("Question", {"fg": s:red}) +call s:h("StatusLine", {"bg": s:bg_very_subtle}) +call s:h("StatusLineNC", {"bg": s:bg_very_subtle, "fg": s:medium_gray}) +call s:h("VertSplit", {"bg": s:bg_very_subtle, "fg": s:bg_very_subtle}) +call s:h("Title", {"fg": s:dark_blue}) +call s:h("Visual", {"fg": s:norm, "bg": s:visual}) +call s:h("VisualNOS", {"bg": s:bg_subtle}) +call s:h("WarningMsg", {"fg": s:yellow}) +call s:h("WildMenu", {"fg": s:bg, "bg": s:norm}) +call s:h("Folded", {"fg": s:medium_gray}) +call s:h("FoldColumn", {"fg": s:bg_subtle}) +call s:h("DiffAdd", {"fg": s:green}) +call s:h("DiffDelete", {"fg": s:red}) +call s:h("DiffChange", {"fg": s:dark_yellow}) +call s:h("DiffText", {"fg": s:dark_blue}) +call s:h("SignColumn", {"fg": s:light_green}) + + +if has("gui_running") + call s:h("SpellBad", {"gui": "underline", "sp": s:red}) + call s:h("SpellCap", {"gui": "underline", "sp": s:light_green}) + call s:h("SpellRare", {"gui": "underline", "sp": s:light_purple}) + call s:h("SpellLocal", {"gui": "underline", "sp": s:dark_green}) +else + call s:h("SpellBad", {"cterm": "underline", "fg": s:red}) + call s:h("SpellCap", {"cterm": "underline", "fg": s:light_green}) + call s:h("SpellRare", {"cterm": "underline", "fg": s:light_purple}) + call s:h("SpellLocal", {"cterm": "underline", "fg": s:dark_green}) +endif + +call s:h("Pmenu", {"fg": s:norm, "bg": s:bg_very_subtle}) +call s:h("PmenuSel", {"fg": s:subtle_black, "bg": s:pink}) +call s:h("PmenuSbar", {"fg": s:norm, "bg": s:bg_subtle}) +call s:h("PmenuThumb", {"fg": s:norm, "bg": s:bg_subtle}) +call s:h("TabLine", {"fg": s:norm, "bg": s:bg_very_subtle}) +call s:h("TabLineSel", {"fg": s:subtle_black, "bg": s:pink, "gui": "bold", "cterm": "bold"}) +call s:h("TabLineFill", {"fg": s:norm, "bg": s:bg_very_subtle}) +call s:h("CursorColumn", {"bg": s:bg_very_subtle}) +call s:h("CursorLine", {"bg": s:bg_very_subtle}) +call s:h("ColorColumn", {"bg": s:bg_subtle}) + +call s:h("MatchParen", {"bg": s:bg_subtle, "fg": s:norm}) +call s:h("qfLineNr", {"fg": s:medium_gray}) + +call s:h("htmlH1", {"bg": s:bg, "fg": s:norm}) +call s:h("htmlH2", {"bg": s:bg, "fg": s:norm}) +call s:h("htmlH3", {"bg": s:bg, "fg": s:norm}) +call s:h("htmlH4", {"bg": s:bg, "fg": s:norm}) +call s:h("htmlH5", {"bg": s:bg, "fg": s:norm}) +call s:h("htmlH6", {"bg": s:bg, "fg": s:norm}) + +" Syntastic +call s:h("SyntasticWarningSign", {"fg": s:yellow}) +call s:h("SyntasticWarning", {"bg": s:yellow, "fg": s:black, "gui": "bold", "cterm": "bold"}) +call s:h("SyntasticErrorSign", {"fg": s:red}) +call s:h("SyntasticError", {"bg": s:red, "fg": s:white, "gui": "bold", "cterm": "bold"}) + +" which-key.nvim +call s:h("WhichKey", {"bg": s:bg, "fg": s:pink, "gui": "bold", "cterm": "bold"}) +call s:h("WhichKeyDesc", {"bg": s:bg, "fg": s:norm_subtle, "gui": "bold", "cterm": "bold"}) +call s:h("WhichKeySeparator", {"bg": s:bg, "fg": s:norm, "gui": "bold", "cterm": "bold"}) +call s:h("WhichKeyFloat", {"bg": s:bg}) + +hi link WhichKeyGroup WhichKey + +" Neomake +hi link NeomakeWarningSign SyntasticWarningSign +hi link NeomakeErrorSign SyntasticErrorSign + +" ALE +hi link ALEWarningSign SyntasticWarningSign +hi link ALEErrorSign SyntasticErrorSign + +" Signify, git-gutter +hi link SignifySignAdd LineNr +hi link SignifySignDelete LineNr +hi link SignifySignChange LineNr +hi link GitGutterAdd LineNr +hi link GitGutterDelete LineNr +hi link GitGutterChange LineNr +hi link GitGutterChangeDelete LineNr diff --git a/config/vim/configs/gui-config.vim b/config/vim/configs/gui-config.vim new file mode 100644 index 0000000..2fda1bc --- /dev/null +++ b/config/vim/configs/gui-config.vim @@ -0,0 +1,30 @@ +if has('gui') || exists('g:neovide') + set guifont=Hack\ Nerd\ Font:h13 + + " neovide doesn't support copy from host, so we have to map it ourselves + + if exists('g:neovide') + + func! s:enabletp() + let g:neovide_transparency=0.9 + endfunc + func! s:disabletp() + let g:neovide_transparency=1.0 + endfunc + let g:Transparent_disable_func = function('s:disabletp') + let g:Transparent_enable_func = function('s:enabletp') + + let g:neovide_transparency=0.9 + " let g:neovide_transparency_point=0.8 + if g:os == 'Darwin' + nnoremap "+p + cnoremap + + inoremap + + else + nnoremap "+p + cnoremap + + inoremap + + endif + endif + +endif diff --git a/config/vim/lua/fzy_lua.lua b/config/vim/lua/fzy_lua.lua new file mode 100644 index 0000000..301c64c --- /dev/null +++ b/config/vim/lua/fzy_lua.lua @@ -0,0 +1,276 @@ +-- The lua implementation of the fzy string matching algorithm + +local SCORE_GAP_LEADING = -0.005 +local SCORE_GAP_TRAILING = -0.005 +local SCORE_GAP_INNER = -0.01 +local SCORE_MATCH_CONSECUTIVE = 1.0 +local SCORE_MATCH_SLASH = 0.9 +local SCORE_MATCH_WORD = 0.8 +local SCORE_MATCH_CAPITAL = 0.7 +local SCORE_MATCH_DOT = 0.6 +local SCORE_MAX = math.huge +local SCORE_MIN = -math.huge +local MATCH_MAX_LENGTH = 1024 + +local fzy = {} + +-- Check if `needle` is a subsequence of the `haystack`. +-- +-- Usually called before `score` or `positions`. +-- +-- Args: +-- needle (string) +-- haystack (string) +-- case_sensitive (bool, optional): defaults to false +-- +-- Returns: +-- bool +function fzy.has_match(needle, haystack, case_sensitive) + if not case_sensitive then + needle = string.lower(needle) + haystack = string.lower(haystack) + end + + local j = 1 + for i = 1, string.len(needle) do + j = string.find(haystack, needle:sub(i, i), j, true) + if not j then + return false + else + j = j + 1 + end + end + + return true +end + +local function is_lower(c) + return c:match("%l") +end + +local function is_upper(c) + return c:match("%u") +end + +local function precompute_bonus(haystack) + local match_bonus = {} + + local last_char = "/" + for i = 1, string.len(haystack) do + local this_char = haystack:sub(i, i) + if last_char == "/" or last_char == "\\" then + match_bonus[i] = SCORE_MATCH_SLASH + elseif last_char == "-" or last_char == "_" or last_char == " " then + match_bonus[i] = SCORE_MATCH_WORD + elseif last_char == "." then + match_bonus[i] = SCORE_MATCH_DOT + elseif is_lower(last_char) and is_upper(this_char) then + match_bonus[i] = SCORE_MATCH_CAPITAL + else + match_bonus[i] = 0 + end + + last_char = this_char + end + + return match_bonus +end + +local function compute(needle, haystack, D, M, case_sensitive) + -- Note that the match bonuses must be computed before the arguments are + -- converted to lowercase, since there are bonuses for camelCase. + local match_bonus = precompute_bonus(haystack) + local n = string.len(needle) + local m = string.len(haystack) + + if not case_sensitive then + needle = string.lower(needle) + haystack = string.lower(haystack) + end + + -- Because lua only grants access to chars through substring extraction, + -- get all the characters from the haystack once now, to reuse below. + local haystack_chars = {} + for i = 1, m do + haystack_chars[i] = haystack:sub(i, i) + end + + for i = 1, n do + D[i] = {} + M[i] = {} + + local prev_score = SCORE_MIN + local gap_score = i == n and SCORE_GAP_TRAILING or SCORE_GAP_INNER + local needle_char = needle:sub(i, i) + + for j = 1, m do + if needle_char == haystack_chars[j] then + local score = SCORE_MIN + if i == 1 then + score = ((j - 1) * SCORE_GAP_LEADING) + match_bonus[j] + elseif j > 1 then + local a = M[i - 1][j - 1] + match_bonus[j] + local b = D[i - 1][j - 1] + SCORE_MATCH_CONSECUTIVE + score = math.max(a, b) + end + D[i][j] = score + prev_score = math.max(score, prev_score + gap_score) + M[i][j] = prev_score + else + D[i][j] = SCORE_MIN + prev_score = prev_score + gap_score + M[i][j] = prev_score + end + end + end +end + +-- Compute a matching score. +-- +-- Args: +-- needle (string): must be a subequence of `haystack`, or the result is +-- undefined. +-- haystack (string) +-- case_sensitive (bool, optional): defaults to false +-- +-- Returns: +-- number: higher scores indicate better matches. See also `get_score_min` +-- and `get_score_max`. +function fzy.score(needle, haystack, case_sensitive) + local n = string.len(needle) + local m = string.len(haystack) + + if n == 0 or m == 0 or m > MATCH_MAX_LENGTH or n > m then + return SCORE_MIN + elseif n == m then + return SCORE_MAX + else + local D = {} + local M = {} + compute(needle, haystack, D, M, case_sensitive) + return M[n][m] + end +end + +-- Compute the locations where fzy matches a string. +-- +-- Determine where each character of the `needle` is matched to the `haystack` +-- in the optimal match. +-- +-- Args: +-- needle (string): must be a subequence of `haystack`, or the result is +-- undefined. +-- haystack (string) +-- case_sensitive (bool, optional): defaults to false +-- +-- Returns: +-- {int,...}: indices, where `indices[n]` is the location of the `n`th +-- character of `needle` in `haystack`. +-- number: the same matching score returned by `score` +function fzy.positions(needle, haystack, case_sensitive) + local n = string.len(needle) + local m = string.len(haystack) + + if n == 0 or m == 0 or m > MATCH_MAX_LENGTH or n > m then + return {}, SCORE_MIN + elseif n == m then + local consecutive = {} + for i = 1, n do + consecutive[i] = i + end + return consecutive, SCORE_MAX + end + + local D = {} + local M = {} + compute(needle, haystack, D, M, case_sensitive) + + local positions = {} + local match_required = false + local j = m + for i = n, 1, -1 do + while j >= 1 do + if D[i][j] ~= SCORE_MIN and (match_required or D[i][j] == M[i][j]) then + match_required = (i ~= 1) and (j ~= 1) and ( + M[i][j] == D[i - 1][j - 1] + SCORE_MATCH_CONSECUTIVE) + positions[i] = j + j = j - 1 + break + else + j = j - 1 + end + end + end + + return positions, M[n][m] +end + +-- Apply `has_match` and `positions` to an array of haystacks. +-- +-- Args: +-- needle (string) +-- haystack ({string, ...}) +-- case_sensitive (bool, optional): defaults to false +-- +-- Returns: +-- {{idx, positions, score}, ...}: an array with one entry per matching line +-- in `haystacks`, each entry giving the index of the line in `haystacks` +-- as well as the equivalent to the return value of `positions` for that +-- line. +function fzy.filter(needle, haystacks, case_sensitive) + local result = {} + local idx = 1 + for line in haystacks() do + if fzy.has_match(needle, line, case_sensitive) then + local p, s = fzy.positions(needle, line, case_sensitive) + table.insert(result, vim.list({idx, vim.list(p), s})) + end + idx = idx + 1 + end + table.sort(result, function(a,b) return a[3] > b[3] end) + return vim.list(result) +end + +-- The lowest value returned by `score`. +-- +-- In two special cases: +-- - an empty `needle`, or +-- - a `needle` or `haystack` larger than than `get_max_length`, +-- the `score` function will return this exact value, which can be used as a +-- sentinel. This is the lowest possible score. +function fzy.get_score_min() + return SCORE_MIN +end + +-- The score returned for exact matches. This is the highest possible score. +function fzy.get_score_max() + return SCORE_MAX +end + +-- The maximum size for which `fzy` will evaluate scores. +function fzy.get_max_length() + return MATCH_MAX_LENGTH +end + +-- The minimum score returned for normal matches. +-- +-- For matches that don't return `get_score_min`, their score will be greater +-- than than this value. +function fzy.get_score_floor() + return MATCH_MAX_LENGTH * SCORE_GAP_INNER +end + +-- The maximum score for non-exact matches. +-- +-- For matches that don't return `get_score_max`, their score will be less than +-- this value. +function fzy.get_score_ceiling() + return MATCH_MAX_LENGTH * SCORE_MATCH_CONSECUTIVE +end + +-- The name of the currently-running implmenetation, "lua" or "native". +function fzy.get_implementation_name() + return "lua" +end + +return fzy diff --git a/config/vim/lua/lua-plugin-settings/aerial-nvim-config.lua b/config/vim/lua/lua-plugin-settings/aerial-nvim-config.lua new file mode 100644 index 0000000..11fd1e9 --- /dev/null +++ b/config/vim/lua/lua-plugin-settings/aerial-nvim-config.lua @@ -0,0 +1,18 @@ + +if HasPlug('github-nvim-theme') then + require('aerial').setup({ + -- optionally use on_attach to set keymaps when aerial has attached to a buffer + layout = { + width = 50, + default_direction = "right", + preserve_equality = true, + }, + on_attach = function(bufnr) + -- Jump forwards/backwards with '{' and '}' + vim.keymap.set('n', '{', 'AerialPrev', { buffer = bufnr }) + vim.keymap.set('n', '}', 'AerialNext', { buffer = bufnr }) + end + }) + -- You probably also want to set a keymap to toggle aerial + vim.keymap.set('n', 'v', 'AerialToggle!') +end diff --git a/config/vim/lua/lua-plugin-settings/github-nvim-theme-config.lua b/config/vim/lua/lua-plugin-settings/github-nvim-theme-config.lua new file mode 100644 index 0000000..e68dbef --- /dev/null +++ b/config/vim/lua/lua-plugin-settings/github-nvim-theme-config.lua @@ -0,0 +1,13 @@ + +if HasPlug('github-nvim-theme') then + -- Example config in Lua + require("github-theme").setup({ + -- Overwrite the highlight groups + overrides = function(c) + return { + NormalFloat = { link = 'Pmenu' }, + } + end + }) +end + diff --git a/config/vim/lua/lua-plugin-settings/gitsigns-nvim-config.lua b/config/vim/lua/lua-plugin-settings/gitsigns-nvim-config.lua new file mode 100644 index 0000000..16a7a51 --- /dev/null +++ b/config/vim/lua/lua-plugin-settings/gitsigns-nvim-config.lua @@ -0,0 +1,50 @@ + +if HasPlug('gitsigns.nvim') then + require('gitsigns').setup({ + signcolumn = true, -- Toggle with `:Gitsigns toggle_signs` + numhl = false, -- Toggle with `:Gitsigns toggle_numhl` + linehl = false, -- Toggle with `:Gitsigns toggle_linehl` + word_diff = false, -- Toggle with `:Gitsigns toggle_word_diff` + on_attach = function(bufnr) + local gs = package.loaded.gitsigns + local function map(mode, l, r, opts) + opts = opts or {} + opts.buffer = bufnr + vim.keymap.set(mode, l, r, opts) + end + + -- Navigation + map('n', ']c', function() + if vim.wo.diff then return ']c' end + vim.schedule(function() gs.next_hunk() end) + return '' + end, { expr = true }) + + map('n', '[c', function() + if vim.wo.diff then return '[c' end + vim.schedule(function() gs.prev_hunk() end) + return '' + end, { expr = true }) + + -- Actions + map({ 'n', 'v' }, 'hs', ':Gitsigns stage_hunk') + map({ 'n', 'v' }, 'hr', ':Gitsigns reset_hunk') + map('n', 'hS', gs.stage_buffer) + map('n', 'hu', gs.undo_stage_hunk) + map('n', 'hR', gs.reset_buffer) + map('n', 'hp', gs.preview_hunk) + map('n', 'hb', function() gs.blame_line { full = true } end) + map('n', 'tb', gs.toggle_current_line_blame) + map('n', 'hd', gs.diffthis) + map('n', 'hD', function() gs.diffthis('~') end) + map('n', 'td', gs.toggle_deleted) + + -- Text object + map({ 'o', 'x' }, 'ih', ':Gitsigns select_hunk') + end + }) + vim.fn['theme#addCleanBg']({ 'GitSignsAdd', 'GitSignsStagedChange', + 'GitSignsStagedDelete', 'GitSignsDelete', 'GitSignsChange', + 'GitGutterAdd', 'GitGutterChange', 'GitGutterDelete', 'GitGutterChangeDelete', + }) +end diff --git a/config/vim/lua/lua-plugin-settings/impatient-nvim-config.lua b/config/vim/lua/lua-plugin-settings/impatient-nvim-config.lua new file mode 100644 index 0000000..7b57c1b --- /dev/null +++ b/config/vim/lua/lua-plugin-settings/impatient-nvim-config.lua @@ -0,0 +1,4 @@ + +if HasPlug('impatient.nvim') then + require('impatient') +end diff --git a/config/vim/lua/lua-plugin-settings/indent-blankline-nvim-config.lua b/config/vim/lua/lua-plugin-settings/indent-blankline-nvim-config.lua new file mode 100644 index 0000000..bc2be7d --- /dev/null +++ b/config/vim/lua/lua-plugin-settings/indent-blankline-nvim-config.lua @@ -0,0 +1,13 @@ + +if not Animation_enable then + if HasPlug('indent-blankline.nvim') then + -- Example config in Lua + require("indent_blankline").setup { + show_current_context = true, + use_treesitter = true, + filetype_exclude = { "lspinfo", "packer", "checkhealth", + "help", "man", "", "startify", } + -- use_treesitter = true, + } + end +end diff --git a/config/vim/lua/lua-plugin-settings/init.lua b/config/vim/lua/lua-plugin-settings/init.lua new file mode 100644 index 0000000..118de41 --- /dev/null +++ b/config/vim/lua/lua-plugin-settings/init.lua @@ -0,0 +1,60 @@ +-------------------OPTIONS----------------------- + +-- enable animation of command like "" and "", or cursor +-- jump animation. (Performence will be effected) +Animation_enable = vim.g.animation_enable +High_performence = vim.g.high_performence + +-- false basicly enable plugins like noice, nvim-notify etc. +Classic_vim_ui = vim.g.classic_vim_ui + + +------------------VIM OPTIONS----------------------- + +vim.o.signcolumn = 'auto:2' + +------------------UTILITIES---------------------- + +Vim_version = vim.version() +Vim_version_minor = Vim_version['minor'] + +function HasPlug(name) + return vim.fn['utils#hasplug'](name) +end + +-- use to print object +function _G.put(...) + local objects = {} + for i = 1, select('#', ...) do + local v = select(i, ...) + table.insert(objects, vim.inspect(v)) + end + + print(table.concat(objects, '\n')) + return ... +end + +Which_key = nil +function Wk_register(opt) + if Which_key == nil then + return + end + Which_key.register(opt) +end + +Show_icon = false +if HasPlug('nvim-web-devicons') then + Show_icon = true +end + + +----------------CONFIGURATION-------------------- + +local plugin_setting_paths = vim.fn.split(vim.fn.glob(vim.g.dotvimdir + .. "/lua/lua-plugin-settings/*config.lua"), '\n') +local plugin_settings = vim.fn.map(plugin_setting_paths, 'fnamemodify(v:val, ":t:r")') + +for _idx, name in pairs(plugin_settings) do + require('lua-plugin-settings.'..name) +end + diff --git a/config/vim/lua/lua-plugin-settings/iron-nvim-config.lua b/config/vim/lua/lua-plugin-settings/iron-nvim-config.lua new file mode 100644 index 0000000..9381fdb --- /dev/null +++ b/config/vim/lua/lua-plugin-settings/iron-nvim-config.lua @@ -0,0 +1,50 @@ + +if HasPlug('iron.nvim') then + local iron = require("iron.core") + + iron.setup { + config = { + -- Whether a repl should be discarded or not + scratch_repl = true, + -- Your repl definitions come here + repl_definition = { + sh = { + -- Can be a table or a function that + -- returns a table (see below) + command = { "zsh" } + } + }, + -- How the repl window will be displayed + -- See below for more information + repl_open_cmd = require('iron.view').bottom(40), + }, + -- Iron doesn't set keymaps by default anymore. + -- You can set them here or manually add keymaps to the functions in iron.core + keymaps = { + send_motion = "sc", + visual_send = "sc", + send_file = "sf", + send_line = "sl", + send_mark = "sm", + mark_motion = "mc", + mark_visual = "mc", + remove_mark = "md", + cr = "s", + interrupt = "s", + exit = "sq", + clear = "cl", + }, + -- If the highlight is on, you can change how it looks + -- For the available options, check nvim_set_hl + highlight = { + italic = true + }, + ignore_blank_lines = true, -- ignore blank lines when sending visual select lines + } + + -- iron also has a list of commands, see :h iron-commands for all available commands + vim.keymap.set('n', 'rs', 'IronRepl') + vim.keymap.set('n', 'rr', 'IronRestart') + vim.keymap.set('n', 'rf', 'IronFocus') + vim.keymap.set('n', 'rh', 'IronHide') +end diff --git a/config/vim/lua/lua-plugin-settings/leap-nvim-config.lua b/config/vim/lua/lua-plugin-settings/leap-nvim-config.lua new file mode 100644 index 0000000..86f186a --- /dev/null +++ b/config/vim/lua/lua-plugin-settings/leap-nvim-config.lua @@ -0,0 +1,4 @@ + +if HasPlug('leap.nvim') then + require('leap').add_default_mappings() +end diff --git a/config/vim/lua/lua-plugin-settings/lualine-nvim-config.lua b/config/vim/lua/lua-plugin-settings/lualine-nvim-config.lua new file mode 100644 index 0000000..a02b548 --- /dev/null +++ b/config/vim/lua/lua-plugin-settings/lualine-nvim-config.lua @@ -0,0 +1,108 @@ + +if HasPlug('lualine.nvim') then + + -- custom lualine plugin show coc lsp status + local function cocstatus() + local loading = { "⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏" } + local step = #loading + local ok, result = pcall(vim.fn.CocAction, 'services') + if not ok then + return + end + local ft = vim.bo.filetype + local state, id + for _, entry in ipairs(result) do + if entry['languageIds'][1] == ft then + state = entry['state'] + id = entry['id'] + break + end + end + local speed = 1600 + local loadidx = (vim.loop.now() % speed) + local msg = id + if state == "starting" then + return msg .. " " .. loading[math.floor(loadidx / (step * (speed / 100))) + 1] + elseif state == "running" then + return msg + end + return '' + end + + local _section_x = {} + local _section_y = {} + -- if HasPlug('coc.nvim') then table.insert(_section_x, cocstatus) end + table.insert(_section_x, cocstatus) + local disabled_filetypes_data = {} + if Vim_version_minor < 7 then + -- globalstatus only work for nvim >= 0.7 + disabled_filetypes_data = { -- Filetypes to disable lualine for. + statusline = {}, -- only ignores the ft for statusline. + winbar = {}, -- only ignores the ft for winbar. + 'NvimTree', + 'vista', + } + end + + local opt = { + options = { + icons_enabled = Show_icon, + theme = 'auto', -- lualine theme + -- component_separators = { left = '', right = ''}, + -- section_separators = { left = '', right = ''}, + component_separators = { left = '', right = '' }, + section_separators = { left = '', right = '' }, + always_divide_middle = false, + globalstatus = true, + disabled_filetypes = disabled_filetypes_data, + refresh = { statusline = 200 } + }, + sections = { + lualine_a = { 'mode' }, + lualine_b = {}, + lualine_c = { + { + 'buffers', + mode = 2, + max_length = function() + return vim.o.columns - 30 + end, + filetype_names = { + TelescopePrompt = 'Telescope', + dashboard = 'Dashboard', + packer = 'Packer', + fzf = 'FZF', + alpha = 'Alpha', + NvimTree = 'NvimTree', + vista = 'Vista', + }, + symbols = { + alternate_file = '', + }, + } + }, + -- lualine_x = {'encoding', 'fileformat', 'filetype'}, + lualine_x = _section_x, + lualine_y = _section_y, + lualine_z = { 'location' } + }, + } + + require('lualine').setup(opt) + + vim.fn['theme#addTransGroup']({'lualine_c_inactive', 'lualine_c_normal'}) + + vim.o.fillchars ='eob: ,vert:│,stl: ,stlnc: ,' + + for i = 1, 9 do + -- :nnoremap 1 :LualineBuffersJump 1 + vim.api.nvim_set_keymap('n', '' .. i, ':LualineBuffersJump ' .. i .. '', + { noremap = true, silent = true, nowait = true }) + end + for i = 10, 20 do + -- :nnoremap 1 :LualineBuffersJump 1 + vim.api.nvim_set_keymap('n', '' .. i, ':LualineBuffersJump ' .. i .. '', + { noremap = true, silent = true, nowait = true }) + end +end + diff --git a/config/vim/lua/lua-plugin-settings/mini-animate-config.lua b/config/vim/lua/lua-plugin-settings/mini-animate-config.lua new file mode 100644 index 0000000..450a9f3 --- /dev/null +++ b/config/vim/lua/lua-plugin-settings/mini-animate-config.lua @@ -0,0 +1,30 @@ + +if HasPlug('mini.animate') and Animation_enable then + local animate = require('mini.animate') + animate.setup({ + cursor = { + -- Whether to enable this animation + enable = true, + -- Timing of animation (how steps will progress in time) + -- timing = --, + }, + scroll = { + -- Whether to enable this animation + enable = true, + -- Timing of animation (how steps will progress in time) + timing = animate.gen_timing.linear({ duration = 150, unit = 'total' }), + }, + open = { + -- Whether to enable this animation + enable = false, + }, + }) + vim.api.nvim_create_autocmd("FileType", { + pattern = { "help", "alpha", "dashboard", "neo-tree", "Trouble", "lazy", "mason", + "NvimTree", "vista", "toggleterm", "noice" }, + callback = function() + vim.b.minianimate_disable = true + end, + }) +end + diff --git a/config/vim/lua/lua-plugin-settings/mini-colors-config.lua b/config/vim/lua/lua-plugin-settings/mini-colors-config.lua new file mode 100644 index 0000000..1368b67 --- /dev/null +++ b/config/vim/lua/lua-plugin-settings/mini-colors-config.lua @@ -0,0 +1,4 @@ + +if HasPlug('mini.colors') then + require('mini.colors').setup() +end diff --git a/config/vim/lua/lua-plugin-settings/mini-indentscope-config.lua b/config/vim/lua/lua-plugin-settings/mini-indentscope-config.lua new file mode 100644 index 0000000..d744497 --- /dev/null +++ b/config/vim/lua/lua-plugin-settings/mini-indentscope-config.lua @@ -0,0 +1,21 @@ + +if HasPlug('mini.indentscope') then + MiniIndentscope = require('mini.indentscope') + MiniIndentscope.setup({ + symbol = '│', + -- draw = { + -- animation = MiniIndentscope.gen_animation.linear({ + -- easing = 'out', + -- duration = 150, + -- unit = 'total' + -- }) + -- }, + }) + vim.api.nvim_create_autocmd("FileType", { + pattern = { "help", "alpha", "dashboard", "neo-tree", "Trouble", "lazy", "mason", + "NvimTree", "vista", "startify", "toggleterm" }, + callback = function() + vim.b.miniindentscope_disable = true + end, + }) +end diff --git a/config/vim/lua/lua-plugin-settings/noice-nvim-config.lua b/config/vim/lua/lua-plugin-settings/noice-nvim-config.lua new file mode 100644 index 0000000..2c227fd --- /dev/null +++ b/config/vim/lua/lua-plugin-settings/noice-nvim-config.lua @@ -0,0 +1,47 @@ +if not Classic_vim_ui + and HasPlug('noice.nvim') + and HasPlug('nvim-notify') + and HasPlug('nui.nvim') then + + require("noice").setup({ + lsp = { + -- override markdown rendering so that **cmp** and other plugins use **Treesitter** + override = { + ["vim.lsp.util.convert_input_to_markdown_lines"] = true, + ["vim.lsp.util.stylize_markdown"] = true, + ["cmp.entry.get_documentation"] = true, + }, + }, + presets = { + bottom_search = true, -- use a classic bottom cmdline for search + -- command_palette = true, -- position the cmdline and popupmenu together + long_message_to_split = true, -- long messages will be sent to a split + inc_rename = false, -- enables an input dialog for inc-rename.nvim + lsp_doc_border = false, -- add a border to hover docs and signature help + }, + cmdline = { + enabled = true, -- enables the Noice cmdline UI + view = "cmdline", -- view for rendering the cmdline. Change to `cmdline` to get a classic cmdline at the bottom + opts = {}, -- global options for the cmdline. See section on views + format = { + -- cmdline = false, + search_down = false, + search_up = false, + help = { pattern = '', icon = '' }, + }, + }, + messages = { + -- NOTE: If you enable messages, then the cmdline is enabled automatically. + -- This is a current Neovim limitation. + enabled = true, -- enables the Noice messages UI + view = "notify", -- default view for messages + view_error = "notify", -- view for errors + view_warn = "notify", -- view for warnings + view_history = "messages", -- view for :messages + view_search = false, -- view for search count messages. Set to `false` to disable + }, + }) + + vim.fn['theme#addTransGroup']({'NotifyERRORBody', 'NotifyWARNBody', 'NotifyINFOBody', 'NotifyDEBUGBody', 'NotifyTRACEBody', + 'NotifyERRORBorder', 'NotifyWARNBorder', 'NotifyINFOBorder', 'NotifyDEBUGBorder', 'NotifyTRACEBorder'}) +end diff --git a/config/vim/lua/lua-plugin-settings/nvim-scrollbar-config.lua b/config/vim/lua/lua-plugin-settings/nvim-scrollbar-config.lua new file mode 100644 index 0000000..4fb5d2a --- /dev/null +++ b/config/vim/lua/lua-plugin-settings/nvim-scrollbar-config.lua @@ -0,0 +1,17 @@ + +if HasPlug('nvim-scrollbar') then + require("scrollbar").setup({ + excluded_filetypes = { + "prompt", + "TelescopePrompt", + "noice", + "startify", + "vista", + }, + excluded_buftypes = { + "terminal", + "nofile", + "help", + }, + }) +end diff --git a/config/vim/lua/lua-plugin-settings/nvim-tree-lua-config.lua b/config/vim/lua/lua-plugin-settings/nvim-tree-lua-config.lua new file mode 100644 index 0000000..e0d28de --- /dev/null +++ b/config/vim/lua/lua-plugin-settings/nvim-tree-lua-config.lua @@ -0,0 +1,68 @@ + +if HasPlug('nvim-tree.lua') then + + local api = require('nvim-tree.api') + local M = {} + + function M.print_node_path() + local node = api.tree.get_node_under_cursor() + print(node.absolute_path) + end + + function M.on_attach(bufnr) + local function opts(desc) + return { desc = 'nvim-tree: ' .. desc, buffer = bufnr, noremap = true, silent = true, nowait = true } + end + -- vim.keymap.set('n', 'u', api.node.navigate.parent, opts('Parent Directory')) + vim.keymap.set('n', 'u', api.tree.change_root_to_parent, opts('Up')) + vim.keymap.set('n', 'a', api.fs.create, opts('Create')) + vim.keymap.set('n', 'dd', api.fs.remove, opts('Delete')) + vim.keymap.set('n', 'rn', api.fs.rename_basename, opts('Rename: Basename')) + vim.keymap.set('n', 'I', api.tree.toggle_gitignore_filter, opts('Toggle Git Ignore')) + vim.keymap.set('n', 'cd', api.tree.change_root_to_node, opts('CD')) + vim.keymap.set('n', 'X', api.tree.collapse_all, opts('Collapse')) + vim.keymap.set('n', 'O', api.tree.expand_all, opts('Expand All')) + vim.keymap.set('n', 'p', M.print_node_path, opts('Print node path')) + vim.keymap.set('n', 'o', api.node.open.edit, opts('Open')) + vim.keymap.set('n', '', api.node.open.edit, opts('Open')) + end + + vim.api.nvim_set_keymap('n', 'e', ':NvimTreeFindFileToggle', + { desc = 'Toggle nvim-tree', noremap = true, silent = true, nowait = true }) + + require("nvim-tree").setup({ + sync_root_with_cwd = true, + respect_buf_cwd = true, + update_focused_file = { + enable = true, + update_root = true, + }, + sort_by = "case_sensitive", + on_attach = M.on_attach, + view = { + width = 30, + }, + filters = { + dotfiles = false, + }, + git = { + ignore = false, + }, + actions = { + open_file = { + quit_on_open = true, + resize_window = true, + window_picker = { + exclude = { + filetype = { "notify", "packer", "qf", "diff", "fugitive", "fugitiveblame", "vista" }, + buftype = { "nofile", "terminal", "help" }, + }, + }, + }, + }, + }) + + vim.fn['theme#addTransGroup']({'NvimTreeWinSeparator', 'NvimTreeNormal', 'NvimTreeNormalNC'}) + +end + diff --git a/config/vim/lua/lua-plugin-settings/nvim-treesitter-config.lua b/config/vim/lua/lua-plugin-settings/nvim-treesitter-config.lua new file mode 100644 index 0000000..a6e8622 --- /dev/null +++ b/config/vim/lua/lua-plugin-settings/nvim-treesitter-config.lua @@ -0,0 +1,17 @@ +if HasPlug('nvim-treesitter') then + require('nvim-treesitter.configs').setup { + ensure_installed = { "c", "bash", "lua", "python", "vim" }, + sync_install = false, + auto_install = true, + highlight = { + enable = true, + additional_vim_regex_highlighting = false, + }, + indent = { + enable = true + } + } + vim.o.foldmethod = 'expr' + vim.o.foldexpr = 'nvim_treesitter#foldexpr()' +end + diff --git a/config/vim/lua/lua-plugin-settings/project-nvim-config.lua b/config/vim/lua/lua-plugin-settings/project-nvim-config.lua new file mode 100644 index 0000000..cde75c8 --- /dev/null +++ b/config/vim/lua/lua-plugin-settings/project-nvim-config.lua @@ -0,0 +1,26 @@ + +if HasPlug('project.nvim') then + require("project_nvim").setup { + detection_methods = { "lsp", "pattern" }, + patterns = { ".git", "_darcs", ".hg", ".bzr", ".svn", "Makefile", "package.json", "src" }, + + -- Don't calculate root dir on specific directories + -- Ex: { "~/.cargo/*", ... } + exclude_dirs = {}, + -- Show hidden files in telescope + show_hidden = false, + -- When set to false, you will get a message when project.nvim changes your + -- directory. + silent_chdir = false, + -- Path where project.nvim will store the project history for use in + -- telescope + datapath = vim.g.vim_dir .. "/.vimproject/" + } + + -- if HasPlug('telescope.nvim') then + -- require('telescope').load_extension('projects') + -- vim.keymap.set('n', 'fp', require'telescope'.extensions.projects.projects, + -- { desc = "Lists projects" }) + -- end + +end diff --git a/config/vim/lua/lua-plugin-settings/telescope-nvim-config.lua b/config/vim/lua/lua-plugin-settings/telescope-nvim-config.lua new file mode 100644 index 0000000..70d4108 --- /dev/null +++ b/config/vim/lua/lua-plugin-settings/telescope-nvim-config.lua @@ -0,0 +1,113 @@ +if HasPlug('telescope.nvim') then + local actions = require("telescope.actions") + local action_state = require "telescope.actions.state" + local telescope = require("telescope") + local builtin = require('telescope.builtin') + local telescopeConfig = require("telescope.config") + local vimgrep_arguments = { unpack(telescopeConfig.values.vimgrep_arguments) } + table.insert(vimgrep_arguments, "--hidden") + + require('telescope.pickers.layout_strategies').horizontal_merged = function(picker, max_columns, max_lines, + layout_config) + local layout = require('telescope.pickers.layout_strategies').horizontal(picker, max_columns, max_lines, + layout_config) + layout.prompt.title = '' + layout.results.title = '' + layout.preview.title = '' + -- layout.prompt.borderchars = { '─', '│', '─', '│', '┌', '┐', '┘', '└' } + return layout + end + telescope.setup { + defaults = { + hidden = true, + vimgrep_arguments = vimgrep_arguments, + file_ignore_patterns = {"node_modules/", ".git/"}, + layout_config = { + -- prompt_position = "top", + }, + layout_strategy = "horizontal_merged", + }, + pickers = { + find_files = { + hidden = true, + }, + colorscheme = { + enable_preview = true, + mappings = { + i = { + [""] = function(bufnr) + local selection = action_state.get_selected_entry() + actions.select_default() + local bg = vim.o.background + vim.fn['theme#setColor'](bg, selection.value) + end, + }, + }, + } + }, + extensions = { + fzf = { + fuzzy = true, -- false will only do exact matching + override_generic_sorter = true, + override_file_sorter = true, + case_mode = "smart_case", -- or "ignore_case" or "respect_case" + } + } + } + if HasPlug('telescope-fzf-native.nvim') then + telescope.load_extension('fzf') + end + + vim.fn['theme#addCleanBg']({ 'TelescopeNormal', 'TelescopeBorder', 'TelescopePromptNormal', + 'TelescopePromptBorder', 'TelescopePromptPrefix', 'TelescopeResultsTitle', 'TelescopePreviewTitle', + 'TelescopePromptTitle', 'TelescopePromptCounter' }) + + vim.keymap.set('n', 'ff', builtin.find_files, { desc = "Search files inside cwd" }) + -- need to install ripgrep + vim.keymap.set('n', 'fr', builtin.live_grep, { desc = "Regex search inside files" }) + vim.keymap.set('n', 'fb', builtin.buffers, { desc = "Search buffers" }) + vim.keymap.set('n', 'fc', builtin.colorscheme, { desc = "Search colorscheme" }) + vim.keymap.set('n', 'fs', builtin.treesitter, { desc = "Lists Function names, variables, from Treesitter!" }) + vim.keymap.set('n', 'fh', builtin.highlights, { desc = "Lists highlight" }) + vim.keymap.set('n', 'fd', builtin.help_tags, { desc = "Lists highlight" }) + + Wk_register({ ["f"] = { name = "+Telescope" } }) + + vim.api.nvim_create_autocmd("User", { + pattern = "TelescopePreviewerLoaded", + command = "setlocal wrap number" + }) + + -- options picker + local pickers = require "telescope.pickers" + local finders = require "telescope.finders" + local conf = require("telescope.config").values + + function _G.telescope_option_picker() + local opts = require("telescope.themes").get_dropdown {} + pickers.new(opts, { + prompt_title = "Options", + finder = finders.new_table { + results = vim.fn['options#getAll'](), + entry_maker = function(entry) + return { + value = entry, + display = entry[2], + ordinal = entry[2], + } + end + }, + sorter = conf.generic_sorter(opts), + attach_mappings = function(prompt_bufnr, map) + actions.select_default:replace(function() + actions.close(prompt_bufnr) + local selection = action_state.get_selected_entry() + vim.fn['options#toggle'](selection['value'][1]) + end) + return true + end, + }):find() + end + + vim.keymap.set('n', 'fo', telescope_option_picker, { desc = "Lists Function names, variables, from Treesitter!" }) +end diff --git a/config/vim/lua/lua-plugin-settings/toggleterm-nvim-config.lua b/config/vim/lua/lua-plugin-settings/toggleterm-nvim-config.lua new file mode 100644 index 0000000..3a9a6b8 --- /dev/null +++ b/config/vim/lua/lua-plugin-settings/toggleterm-nvim-config.lua @@ -0,0 +1,65 @@ + +if HasPlug('toggleterm.nvim') then + require("toggleterm").setup({ + + open_mapping = [[]], + direction = 'float', + float_opts = { + border = 'rounded', + width = function(term) return math.floor(vim.o.columns * 0.5) end, + height = function(term) return math.floor(vim.o.lines * 0.5) end, + winblend = 20, + row = vim.o.lines * 0.5 - 3, + col = vim.o.columns * 0.5, + }, + }) + function _G.set_terminal_keymaps() + local opts = { buffer = 0 } + vim.keymap.set('t', '', [[]], opts) + vim.keymap.set('t', 'jk', [[]], opts) + vim.keymap.set('t', '', [[wincmd h]], opts) + vim.keymap.set('t', '', [[wincmd j]], opts) + vim.keymap.set('t', '', [[wincmd k]], opts) + vim.keymap.set('t', '', [[wincmd l]], opts) + vim.keymap.set('t', '', [[]], opts) + end + + -- vim.cmd('autocmd TermOpen term://* lua set_terminal_keymaps()') + vim.cmd('autocmd FileType toggleterm lua set_terminal_keymaps()') + + local Terminal = require('toggleterm.terminal').Terminal + + local ipythonId = 779 + local ipython = Terminal:new({ + size = function(term) + if term.direction == "horizontal" then + return 15 elseif term.direction == "vertical" then + return vim.o.columns * 0.4 + end + end, + cmd = "ipython", + hidden = true, + direction = "vertical", + close_on_exit = false, + auto_scroll = true, + id = ipythonId, + }) + + function _ipython_toggle() + local currentWindow=vim.fn.winnr() + ipython:toggle(vim.o.columns * 0.5, 'vertical') + vim.cmd(currentWindow .. "wincmd w") + end + + vim.api.nvim_set_keymap("n", "tp", "lua _ipython_toggle()", { noremap = true, silent = true }) + + vim.api.nvim_set_keymap("n", "tl", string.format("ToggleTermSendCurrentLine %d", ipythonId), + { noremap = true, silent = true }) + -- sends all the (whole) lines in your visual selection + vim.api.nvim_set_keymap("v", "tl", string.format(":ToggleTermSendVisualLines %d", ipythonId), + { noremap = true, silent = true }) + -- sends only the visually selected text (this can be a block of text + vim.api.nvim_set_keymap("x", "tl", string.format(":ToggleTermSendVisualSelection %d", ipythonId), + { noremap = true, silent = true }) + +end diff --git a/config/vim/lua/lua-plugin-settings/vim-illuminate-config.lua b/config/vim/lua/lua-plugin-settings/vim-illuminate-config.lua new file mode 100644 index 0000000..12d0d88 --- /dev/null +++ b/config/vim/lua/lua-plugin-settings/vim-illuminate-config.lua @@ -0,0 +1,30 @@ +if HasPlug('vim-illuminate') then + local illuminate = require('illuminate') + illuminate.configure({ + providers = { + 'lsp', + 'treesitter', + 'regex', + }, + delay = 0, + filetype_overrides = {}, + filetypes_denylist = { + 'dirvish', + 'fugitive', + 'NvimTree', + 'help', + 'vista', + 'aerial', + }, + filetypes_allowlist = {}, + modes_denylist = {}, + modes_allowlist = {}, + providers_regex_syntax_denylist = {}, + providers_regex_syntax_allowlist = {}, + under_cursor = true, + large_file_cutoff = nil, + large_file_overrides = nil, + min_count_to_highlight = 1, + }) +end + diff --git a/config/vim/lua/lua-plugin-settings/vim-matchup-config.lua b/config/vim/lua/lua-plugin-settings/vim-matchup-config.lua new file mode 100644 index 0000000..4910a80 --- /dev/null +++ b/config/vim/lua/lua-plugin-settings/vim-matchup-config.lua @@ -0,0 +1,9 @@ + +if HasPlug('vim-illuminate') then + require'nvim-treesitter.configs'.setup { + matchup = { + enable = true, + disable = { }, + }, + } +end diff --git a/config/vim/lua/lua-plugin-settings/which-key-nvim-config.lua b/config/vim/lua/lua-plugin-settings/which-key-nvim-config.lua new file mode 100644 index 0000000..16bf4fd --- /dev/null +++ b/config/vim/lua/lua-plugin-settings/which-key-nvim-config.lua @@ -0,0 +1,11 @@ + +if HasPlug('which-key.nvim') then + Which_key = require("which-key") + Which_key.setup({ + triggers_blacklist = { + i = { "j", "k" }, + v = { "j", "k" }, + c = { "w" }, + }, + }) +end diff --git a/config/vim/plugin/config.vim b/config/vim/plugin/config.vim new file mode 100644 index 0000000..0563a8f --- /dev/null +++ b/config/vim/plugin/config.vim @@ -0,0 +1,13 @@ + +if exists("g:loaded_vim_config") + finish +endif +let g:loaded_vim_config = 1 + +let os = os#getOS() + +if os == 'Windows' + call os#setWindows() +endif + +call options#init() diff --git a/config/vim/vim-plugin-settings/Copilot.vim.config.vim b/config/vim/vim-plugin-settings/Copilot.vim.config.vim new file mode 100644 index 0000000..b1ca52f --- /dev/null +++ b/config/vim/vim-plugin-settings/Copilot.vim.config.vim @@ -0,0 +1,6 @@ + +if utils#hasplug('Copilot.vim') + " imap (copilot-next) + " imap (copilot-prev) +endif + diff --git a/config/vim/vim-plugin-settings/coc-fzf.config.vim b/config/vim/vim-plugin-settings/coc-fzf.config.vim new file mode 100644 index 0000000..6a77a14 --- /dev/null +++ b/config/vim/vim-plugin-settings/coc-fzf.config.vim @@ -0,0 +1,8 @@ + +if utils#hasplug('coc-fzf') + + let g:coc_fzf_preview = 'right:50%' + nnoremap fs :CocFzfList outline + let s:preview_exe = expand(g:dotvimdir.'/bin/preview.py') + let g:coc_fzf_opts = ['--border-label', 'Coc Outlines', '--border-label-pos', '9', '--no-scrollbar', '--no-hscroll', '--no-separator'] +endif diff --git a/coc-nvim-config.vim b/config/vim/vim-plugin-settings/coc.nvim.config.vim similarity index 60% rename from coc-nvim-config.vim rename to config/vim/vim-plugin-settings/coc.nvim.config.vim index 2838696..89ea77c 100644 --- a/coc-nvim-config.vim +++ b/config/vim/vim-plugin-settings/coc.nvim.config.vim @@ -1,6 +1,13 @@ +if utils#hasplug('coc.nvim') +" let g:coc_global_extensions = ['coc-pyright', 'coc-tsserver', 'coc-vimlsp', +" \ 'coc-marksman'] -" let g:coc_global_extensions = ['coc-pyright', 'coc-rls', 'coc-clangd', 'coc-tsserver', 'coc-html', 'coc-cmake', 'coc-json', 'coc-sh', 'coc-java'] -" let g:coc_global_extensions = ['coc-pyright', 'coc-tsserver'] +" for tabline info +" coc-sumneko-lua offers autocomplete for neovim lua api +let g:coc_global_extensions = ['coc-nav', 'coc-sumneko-lua'] + +" warning that coc work best for vim >= 8.3 +let g:coc_disable_startup_warning = 1 let g:coc_data_home = g:vim_dir . '/coc' let g:coc_config_home = g:vim_dir . '/coc' @@ -88,15 +95,90 @@ let g:coc_user_config = { \ 'suggest.noselect': v:true, \ 'suggest.enablePreselect': v:false, } -call coc#config("java.jdt.ls.vmargs", '-javaagent:' . g:mydotfiles_directory . '/config/coc/java/lombok-1.18.26.jar') +call coc#config("java.jdt.ls.vmargs", '-javaagent:' . g:dotfiledir . '/config/coc/java/lombok-1.18.26.jar') call coc#config("java.jdt.ls.lombokSupport.enabled", v:false) call coc#config("java.inlayHints.parameterNames.enabled", v:false) call coc#config("inlayHint.enable", v:false) +if has('nvim') + " nvim has tree-sitter + call coc#config("semanticTokens.enable", v:false) +else + call coc#config("semanticTokens.enable", v:true) +endif + +call coc#config("sumneko-lua.enableNvimLuaDev", v:true) + for section in ['suggest', 'diagnostic', 'signature', 'hover'] call coc#config(section.'.floatConfig.border', v:true) call coc#config(section.'.floatConfig.rounded', v:true) call coc#config(section.'.floatConfig.highlight', 'Normal') + " transparent setting (only for neovim) - call coc#config(section.'.floatConfig.winblend', 6) + " call coc#config(section.'.floatConfig.winblend', 6) endfor + +function! CocHighlight() + hi! CocErrorHighlight guifg=#E74C3C term=underline,bold gui=underline,bold cterm=underline,bold + hi! CocErrorSign guifg=#E74C3C + + hi! CocWarningHighlight guifg=#E74C3C term=underline gui=underline cterm=underline + hi! CocWarningSign guifg=#E67E22 + + hi CocInfoHighlight term=underline gui=underline cterm=underline + hi CocHintHighlight term=underline gui=underline cterm=underline + hi CocUnusedHighlight term=underline gui=underline cterm=underline +endfunction + +call theme#addCleanBg(['CocWarningSign', 'CocErrorSign']) + +augroup CocHighlight + autocmd! + autocmd ColorScheme * call CocHighlight() +augroup END + +function! Breadcrumbs() + if ! exists('b:coc_nav') + return '' + endif + let items = b:coc_nav + " let t = '  ' + let t = ' ' + let c = 0 + for obj in items + let hi = obj['highlight'] + let name = obj['name'] + if c == 0 + let t ..= '%#'.. hi ..'#' .. name .. '%#Normal#' + else + let t ..= '  %#'.. hi ..'#' .. name .. '%#Normal#' + endif + let c += 1 + endfor + return t +endfunction + +func! s:sigbar_enable() + set tabline=%#Normal#🌠%{%Breadcrumbs()%} + set showtabline=2 +endfunc + +func! s:sigbar_disable() + set tabline= + set showtabline=1 +endfunc + +" set tabline=%=%#Normal#%=%{%Breadcrumbs()%} +" set showtabline=2 + +let sigbar_opt = { + \ 'desc': 'Show function signature bar', + \ 'enablefunc': function('s:sigbar_enable'), + \ 'disablefunc': function('s:sigbar_disable'), + \ 'isEnabled': 0, + \ } +call options#add('signature bar', sigbar_opt) + +call theme#addTransGroup(['CocFloating']) + +endif diff --git a/config/vim/vim-plugin-settings/codi.vim.config.vim b/config/vim/vim-plugin-settings/codi.vim.config.vim new file mode 100644 index 0000000..da69883 --- /dev/null +++ b/config/vim/vim-plugin-settings/codi.vim.config.vim @@ -0,0 +1,3 @@ +if utils#hasplug('coc.nvim') + let g:codi#virtual_text = 0 +endif diff --git a/config/vim/vim-plugin-settings/ctrlp.vim.config.vim b/config/vim/vim-plugin-settings/ctrlp.vim.config.vim new file mode 100644 index 0000000..7927352 --- /dev/null +++ b/config/vim/vim-plugin-settings/ctrlp.vim.config.vim @@ -0,0 +1,4 @@ + +if utils#hasplug('ctrlp.vim') + let g:ctrlp_map = 'ff' +endif diff --git a/config/vim/vim-plugin-settings/everforest.config.vim b/config/vim/vim-plugin-settings/everforest.config.vim new file mode 100644 index 0000000..96c97fc --- /dev/null +++ b/config/vim/vim-plugin-settings/everforest.config.vim @@ -0,0 +1,32 @@ + +if utils#hasplug('everforest') + let g:everforest_better_performance = 1 + let g:everforest_background = 'hard' + " let g:everforest_enable_italic = 1 + function! Everforest_trans_enable() + let g:everforest_transparent_background = 2 + colorscheme everforest + call theme#setStlColor(&background, 'everforest') + " hack to fix caret characters appearing in the statusline when StatusLine + " and StatusLineNC has same highlight(https://vi.stackexchange.com/questions/15873/carets-in-status-line) + hi StatusLine guifg=#d3c6aa ctermfg=223 + endfunction + function! Everforest_trans_disable() + let g:everforest_transparent_background = 0 + colorscheme everforest + call theme#setStlColor(&background, 'everforest') + endfunction + function! CB_dark_tb_enable_everforest() + call Everforest_trans_enable() + endfunction + function! CB_light_tb_enable_everforest() + call Everforest_trans_enable() + endfunction + function! CB_dark_tb_disable_everforest() + call Everforest_trans_disable() + endfunction + function! CB_light_tb_disable_everforest() + call Everforest_trans_disable() + endfunction + +endif diff --git a/config/vim/vim-plugin-settings/fzf.vim.config.vim b/config/vim/vim-plugin-settings/fzf.vim.config.vim new file mode 100644 index 0000000..079d00d --- /dev/null +++ b/config/vim/vim-plugin-settings/fzf.vim.config.vim @@ -0,0 +1,121 @@ + +if utils#hasplug("fzf") && utils#hasplug("fzf.vim") + " [Buffers] Jump to the existing window if possible + let g:fzf_buffers_jump = 1 + "let $FZF_DEFAULT_COMMAND='find . \( -name node_modules -o -name .git \) -prune -o -print' + + " - CTRL-/ will toggle preview window. + let g:fzf_preview_window = ['right:50%'] + + hi! fzfborderhi term=bold cterm=bold ctermbg=236 gui=bold guibg=#272c42 + hi! fzfqueryhi term=underline cterm=underline gui=underline + + let g:fzf_force_termguicolors = 1 + + if g:os != 'Windows' + let $FZF_DEFAULT_COMMAND = "find . -type f -not -path '*/\.git/*'" + endif + + let s:preview_exe = expand(g:dotvimdir.'/bin/preview.py') + let s:color_opts = ['--color', 'gutter:-1,bg+:-1,bg:-1,preview-bg:-1,preview-fg:-1,fg+:-1'] + + " check if ripgrep is installed + function! FzfRg() + let s:previewcmd = join([utils#get_usable_py(), s:preview_exe, &bg, '{}']) + if ! executable('rg') + let cmd = 'grep -R --line-number --exclude-dir=".git;.svn" --color=always -- '.shellescape('') + else + let cmd = "rg --column --line-number --no-heading --color=always --smart-case -- ".shellescape('') + endif + + let options = s:color_opts + ['--border-label', 'Grep', '--border-label-pos', '9', '--no-scrollbar', + \ '--no-hscroll', '--no-separator', '--preview', s:previewcmd] + let with_preview = fzf#vim#with_preview() + if len(with_preview) == 0 + let with_preview = {'options':['--preview-window','right:50%' ] + options} + else + " make fzf preview repect colorsheme + let with_preview.options = with_preview.options[:-3] + options + endif + call fzf#vim#grep(cmd, 1, with_preview, 0) + endfunction + + function! FzfFiles(...) + let s:previewcmd = join([utils#get_usable_py(), s:preview_exe, &bg, '{}']) + let options = s:color_opts + ['--border-label', 'Files', '--border-label-pos', '9', '--no-scrollbar', + \ '--no-hscroll', '--no-separator', '--preview', s:previewcmd] + let with_preview = fzf#vim#with_preview() + if len(with_preview) == 0 + " in windows with_preview return empty dict + let with_preview = {'options':['--preview-window','right:50%' ] + options} + else + let with_preview.options = with_preview.options[:-3] + options + endif + let dir = '' + if a:0 >= 1 && isdirectory(expand(a:1)) + let dir = a:1 + endif + call fzf#vim#files(dir, with_preview, 0) + endfunction + + function! FzfColorSelect(color_name) + call theme#setColor(&bg, a:color_name) + endfunction + + function! FzfAirlineColorSelect(color_name) + call theme#setStlColor(&background, a:color_name) + endfunction + + let $FZF_DEFAULT_OPTS='--color=' . s:color_opts[1] + + function! FzfHelpTags() + let s:previewcmd = join([utils#get_usable_py(), s:preview_exe, &bg, '{}']) + let options = s:color_opts + ['--border-label', 'Files', '--border-label-pos', '9', '--no-scrollbar', + \ '--no-hscroll', '--no-separator'] + let with_preview = fzf#vim#with_preview({ "placeholder": "--tag {2}:{3}:{4}" }) + if len(with_preview) == 0 + " in windows with_preview return empty dict + let with_preview = {'options':['--preview-window','right:50%' ] + options} + else + let with_preview.options = with_preview.options + options + endif + call fzf#vim#helptags(with_preview, 0) + endfunction + + let s:optionmap = {} + let s:feedfzf = [] + func! s:optioncb(str) + call options#toggle(s:optionmap[a:str]) + endfunc + func! FzfOptions() + let s:feedfzf = [] + let s:optsource = options#getAll() + for e in s:optsource + let s:optionmap[e[1]] = e[0] + call add(s:feedfzf, e[1]) + endfor + call fzf#run(fzf#wrap({ + \ 'source': s:feedfzf, + \ 'sink': function('s:optioncb'), + \ 'options': ['--border-label', 'Options'], + \ 'window': { 'width': 0.4, 'height': 0.6 } + \ })) + endfunc + + " noremap fo :call FzfOptions() + " noremap fr :call FzfRg() + " noremap ff :call FzfFiles() + noremap fh :call FzfHelpTags() + " noremap fb :BLines + noremap fu :call FzfFiles('~') + + if utils#hasplug('fzf-color-preview') + let g:FzfColorComfirmCb = function('FzfColorSelect') + let g:FzfAirlineComfirmCb = function('FzfAirlineColorSelect') + noremap fa :AirlinePreview + noremap fc :ColorsPreview + else + noremap fc :Colors + endif +endif + diff --git a/config/vim/vim-plugin-settings/goyo.vim.config.vim b/config/vim/vim-plugin-settings/goyo.vim.config.vim new file mode 100644 index 0000000..5972bcc --- /dev/null +++ b/config/vim/vim-plugin-settings/goyo.vim.config.vim @@ -0,0 +1,16 @@ + +if utils#hasplug('goyo.vim') + nnoremap g :Goyo + let g:goyo_width= floor(&co * 0.65) + + function! s:fix() + " resize the goyo after being messed up by other plugins + au BufEnter * if winnr('$') == '5' | exe "normal \=" | endif + endfunction + augroup GoyoAu + au! + augroup END + + autocmd User GoyoEnter au GoyoAu BufEnter * if winnr('$') == '5' | exe "normal \=" | endif + autocmd User GoyoLeave augroup GoyoAu | au! | augroup END +endif diff --git a/config/vim/vim-plugin-settings/indentLine.config.vim b/config/vim/vim-plugin-settings/indentLine.config.vim new file mode 100644 index 0000000..76a40ea --- /dev/null +++ b/config/vim/vim-plugin-settings/indentLine.config.vim @@ -0,0 +1,5 @@ + +if utils#hasplug('indentLine') + let g:indentLine_char = '│' + let g:indentLine_setConceal = 0 +endif diff --git a/config/vim/vim-plugin-settings/lightline.vim.config.vim b/config/vim/vim-plugin-settings/lightline.vim.config.vim new file mode 100644 index 0000000..85e5f4f --- /dev/null +++ b/config/vim/vim-plugin-settings/lightline.vim.config.vim @@ -0,0 +1,136 @@ + +" giveup +if utils#hasplug('lightline.vim') + set noshowmode + set laststatus=2 + + " enable bufferline + " let g:bufferline_echo = 1 + + let g:bufferline_inactive_highlight = 'Search' + let g:bufferline_active_highlight = 'Search' + let g:bufferline_forbided_col = 32 + + let g:lightline = { + \ 'colorscheme': 'wombat', + \ 'active': { + \ 'left': [ [ 'mode'], + \ [ 'bufferline'] ], + \ 'right': [['lineinfo'], ['cocstatus']], + \ }, + \ 'inactive': { + \ 'left': [], + \ 'right': [], + \ }, + \ 'component_expand': { + \ 'bufferline': 'BufferlineStr', + \ }, + \ 'component_function': { + \ 'cocstatus': 'AirlineCocStatus', + \ }, + \ } + + + function! s:restore() + let g:lightline.active = { + \ 'left': [ [ 'mode'], + \ [ 'bufferline'] ], + \ 'right': [['lineinfo'], ['cocstatus']], + \ } + call lightline#init() + call lightline#update() + endfunction + + let s:special_ft = ['nerdtree', 'vista'] + let s:special_bt = ['nofile'] + function! s:lightlineInit() + let g:lightline.active = { + \ 'left': [], + \ 'right': [], + \ } + call lightline#init() + call lightline#update() + echom 'hello'. &bt + autocmd WinLeave * ++once call s:restore() + endfunction + + " \ 'bufferline': 'lightline#bufferline#buffers' + augroup Lightline + autocmd! + " autocmd BufWinEnter * call s:lightlineInit() + " autocmd WinNew * call s:funck() + autocmd FileType nerdtree call s:lightlineInit() + " autocmd BufWritePost,TextChanged,TextChangedI,BufNew,BufEnter * call lightline#update() + augroup END + + function! BufferlineStr() + call bufferline#get_echo_string() + let s = bufferline#get_status_string() + return s + endfunction + + function! s:lightline_update() + if !exists('g:loaded_lightline') + return + endif + try + if g:colors_name =~# 'wombat\|solarized\|landscape\|jellybeans\|seoul256\|Tomorrow' + let g:lightline.colorscheme = + \ substitute(substitute(g:colors_name, '-', '_', 'g'), '256.*', '', '') + call lightline#init() + call lightline#colorscheme() + call lightline#update() + endif + catch + endtry + endfunction + + augroup LightlineColorscheme + autocmd! + autocmd ColorScheme * call s:lightline_update() + augroup END + + function! AirlineCocStatus() + if ! exists('*CocAction') + return + endif + let loading = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"] + try + let result = CocAction('services') + catch + " call timer_start(200, {->execute('AirlineRefresh')}) + return 'no coc ' + endtry + let state = '' + let id = '' + for e in result + if e['languageIds'][0] == &ft + let state = e['state'] + let id = e['id'] + endif + endfor + if id == '' + return 'no lsp ' + endif + + " messy way to get time in millisecond in vim + let time = float2nr(str2float(reltime()->reltimestr()[4:]) * 1000) + let speed = 800 + let loadidx = time % speed + let msg = id + if state == "starting" + if ! exists('s:cocstatustimer') || len(timer_info(s:cocstatustimer)) == 0 + let s:cocstatustimer = timer_start(100, {->execute('AirlineRefresh')}, {'repeat': 800}) + endif + return msg . " " . loading[loadidx/(speed/10)] . " " + elseif state == "running" + if exists('s:cocstatustimer') + call timer_stop(s:cocstatustimer) + unlet s:cocstatustimer + endif + return msg . " ✔ " + endif + return '' + endfunction + +endif diff --git a/config/vim/vim-plugin-settings/minimap.vim.config.vim b/config/vim/vim-plugin-settings/minimap.vim.config.vim new file mode 100644 index 0000000..8452a3c --- /dev/null +++ b/config/vim/vim-plugin-settings/minimap.vim.config.vim @@ -0,0 +1,13 @@ + +if utils#hasplug('minimap.vim') + nnoremap mm :MinimapToggle + let g:minimap_highlight_search = 1 + let g:minimap_git_colors = 1 + let g:minimap_enable_highlight_colorgroup = 1 + let g:minimap_block_filetypes = ['fugitive', 'nvim-tree', 'tagbar', 'fzf', 'telescope', 'NvimTree', 'nerdtree'] + let g:minimap_block_buftypes = ['help', 'nerdtree', 'nofile', 'nowrite', 'quickfix', 'terminal', 'prompt', 'NvimTree'] + let g:minimap_close_filetypes = ['startify', 'netrw', 'vim-plug', 'NvimTree'] + let g:minimap_range_color = 'Visual' + let g:minimap_cursor_color = 'Cursor' +endif + diff --git a/config/vim/vim-plugin-settings/nerdtree.config.vim b/config/vim/vim-plugin-settings/nerdtree.config.vim new file mode 100644 index 0000000..80a7094 --- /dev/null +++ b/config/vim/vim-plugin-settings/nerdtree.config.vim @@ -0,0 +1,53 @@ +if utils#hasplug('nerdtree') + if utils#hasplug('vim-nerdtree-syntax-highlight') + let g:NERDTreeLimitedSyntax = 1 + endif + let g:NERDShutUp=1 + + " work around for nerdtree bug: https://github.com/preservim/nerdtree/issues/1321 + let g:NERDTreeMinimalMenu = v:true + let g:NERDTreeMinimalUI = v:true + + function! NERDTreeFindToggle() + let has_nerdtree = 0 + let winfo = getwininfo() + for obj in winfo + let bufnr = obj['bufnr'] + let ft = getbufvar(bufnr, '&filetype') + if ft == 'nerdtree' + let has_nerdtree = 1 + break + endif + endfor + if has_nerdtree + :NERDTreeClose + else + " we cannot use NERDTreeFind on startify as it is not a file + if &ft == 'startify' || &ft == '' + :NERDTreeToggle + else + :NERDTreeFind + " NERDTreeToggleVCS + endif + endif + endfunction + nnoremap e :call NERDTreeFindToggle() + + "let NERDTreeShowBookmarks=1 + let NERDTreeChDirMode = 0 + let NERDTreeQuitOnOpen = 1 + let NERDTreeMouseMode = 2 + let NERDTreeShowHidden = 1 + + " remapping + let g:NERDTreeMapOpenExpl = '' + if utils#hasplug('vim-devicons') || utils#hasplug('nerdfont.vim') + let NERDTreeDirArrowCollapsible = '' + let NERDTreeDirArrowExpandable = '' + else + " let NERDTreeDirArrowCollapsible = '' + " let NERDTreeDirArrowExpandable = '' + endif + " Exit Vim if NERDTree is the only window remaining in the only tab. + autocmd BufEnter * if tabpagenr('$') == 1 && winnr('$') == 1 && exists('b:NERDTree') && b:NERDTree.isTabTree() | quit | endif +endif diff --git a/config/vim/vim-plugin-settings/papercolor-theme.config.vim b/config/vim/vim-plugin-settings/papercolor-theme.config.vim new file mode 100644 index 0000000..7a843a0 --- /dev/null +++ b/config/vim/vim-plugin-settings/papercolor-theme.config.vim @@ -0,0 +1,24 @@ + +if utils#hasplug('papercolor-theme') + function! CB_dark_tb_enable_PaperColor() + let g:PaperColor_Theme_Options = { + \ 'theme': {'default.dark': { 'transparent_background': 1 }}} + colorscheme PaperColor + endfunction + function! CB_light_tb_enable_PaperColor() + let g:PaperColor_Theme_Options = { + \ 'theme': {'default.light': { 'transparent_background': 1 }}} + colorscheme PaperColor + endfunction + function! CB_dark_tb_disable_PaperColor() + let g:PaperColor_Theme_Options = { + \ 'theme': {'default.dark': { 'transparent_background': 0 }}} + colorscheme PaperColor + endfunction + function! CB_light_tb_disable_PaperColor() + let g:PaperColor_Theme_Options = { + \ 'theme': {'default.light': { 'transparent_background': 0 }}} + colorscheme PaperColor + endfunction +endif + diff --git a/config/vim/vim-plugin-settings/tagbar.config.vim b/config/vim/vim-plugin-settings/tagbar.config.vim new file mode 100644 index 0000000..d668a98 --- /dev/null +++ b/config/vim/vim-plugin-settings/tagbar.config.vim @@ -0,0 +1,14 @@ +if utils#hasplug('tagbar') + let g:tagbar_width = 30 + let g:tagbar_sort = 0 + let g:tagbar_compact = 2 + let g:tagbar_autoshowtag = 1 + let g:tagbar_foldlevel = 99 + let g:tagbar_no_status_line = 1 + let g:tagbar_visibility_symbols = { + \ 'public' : '+', + \ 'protected' : '#', + \ 'private' : '-' + \ } + nnoremap v TagbarToggle +endif diff --git a/config/vim/vim-plugin-settings/vim-airline.config.vim b/config/vim/vim-plugin-settings/vim-airline.config.vim new file mode 100644 index 0000000..8e15860 --- /dev/null +++ b/config/vim/vim-plugin-settings/vim-airline.config.vim @@ -0,0 +1,159 @@ + +if utils#hasplug("vim-airline") + + " Extensions + function! AirlineCocStatus() + if ! exists('*CocAction') + return + endif + let loading = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"] + try + let result = CocAction('services') + catch + " call timer_start(200, {->execute('AirlineRefresh')}) + return 'no coc ' + endtry + let state = '' + let id = '' + for e in result + if e['languageIds'][0] == &ft + let state = e['state'] + let id = e['id'] + endif + endfor + if id == '' + return 'no lsp ' + endif + + " messy way to get time in millisecond in vim + let time = float2nr(str2float(reltime()->reltimestr()[4:]) * 1000) + let speed = 800 + let loadidx = time % speed + let msg = id + if state == "starting" + if ! exists('s:cocstatustimer') || len(timer_info(s:cocstatustimer)) == 0 + let s:cocstatustimer = timer_start(100, {->execute('AirlineRefresh')}, {'repeat': 800}) + endif + return msg . " " . loading[loadidx/(speed/10)] . " " + elseif state == "running" + if exists('s:cocstatustimer') + call timer_stop(s:cocstatustimer) + unlet s:cocstatustimer + endif + return msg . " ✔ " + endif + return '' + endfunction + + function! AirlineBufferNumber() + return len(g:index_to_buffer) + endfunction + + " This must use my fork version of bufferline + " the number of cols bufferline cannot use out of max of screen cols + let g:bufferline_forbided_col = 32 + + let g:airline_experimental = g:vim_v >= 900 ? 1 : 0 + + function! AirlineInit() + " call airline#parts#define_function('bufnum', 'AirlineBufferNumber') + call airline#parts#define_function('cocstatus', 'AirlineCocStatus') + call airline#parts#define_minwidth('mode', 10) + let _airline_section_y = '' + if utils#hasplug('coc.nvim') + " let _airline_section_y = airline#section#create(['cocstatus']) + endif + let g:airline_section_a = airline#section#create(['mode']) + let g:airline_section_b = '' + let g:airline_section_error = '' + let g:airline_section_warning = '' + " let g:airline_section_x = airline#section#create(['bufnum']) + let g:airline_section_x = '' + let g:airline_section_y = _airline_section_y + let g:airline_section_z = airline#section#create(['cocstatus', '│ ', '%(%l:%c%)']) + + endfunction + + function! AirlineColouriseSplits() + " get rid of the vertical split between two windows in statusline + hi! link StatusLine airline_z + hi! link StatusLineNC airline_z_inactive + endfunction + + augroup AirlineAu + autocmd! + autocmd ColorScheme * call AirlineColouriseSplits() + autocmd User AirlineAfterInit ++once call AirlineInit() + augroup end + + " let g:airline_left_sep = '' + " let g:airline_left_alt_sep = '' + " let g:airline_right_sep = '' + " let g:airline_right_alt_sep = '' + + function s:airline_refresh(...) + " this has to be set late otherwise it will cause 'mode' extension be + " skipped at startup + let g:airline_skip_empty_sections = 1 + endfunction + call RegisterLateInit(function('s:airline_refresh'), 1) + + " let g:airline_skip_empty_sections = 1 + + let g:airline_inactive_collapse = 1 + let g:airline_focuslost_inactive = 0 + let g:airline_extensions = ['bufferline'] + + let g:airline_filetype_overrides = { + \ 'vista': ['Vista', ''], + \ 'minimap': ['', ''], + \ 'nerdtree': [ get(g:, 'NERDTreeStatusline', 'NERD'), ''], + \ } + + " hide airline in startify + function! HideStartify(...) + let ctx = a:2 + if ! ctx.active + return 1 + end + if &filetype == 'startify' + let builder = a:1 + call builder.add_section('Normal', '') + return 1 + endif + if &filetype == 'help' + let builder = a:1 + call builder.add_section('airline_a_bold', ' Help ') + call builder.add_section('airline_c', ' %f') + return 1 + endif + + endfunction + call airline#add_statusline_func('HideStartify') + + " " without this airline will overwrite some setting like bufferline_active_buffer_left, etc. + let g:airline#extensions#bufferline#overwrite_variables = 0 + " call theme#addTransGroup(['airline_c', 'airline_c_bold']) + " let g:airline_mode_map = { + " \ '__' : '-', + " \ 'c' : 'C', + " \ 'i' : 'I', + " \ 'ic' : 'I', + " \ 'ix' : 'I', + " \ 'n' : 'N', + " \ 'multi' : 'M', + " \ 'ni' : 'N', + " \ 'no' : 'N', + " \ 'R' : 'R', + " \ 'Rv' : 'R', + " \ 's' : 'S', + " \ 'S' : 'S', + " \ '' : 'S', + " \ 't' : 'T', + " \ 'v' : 'V', + " \ 'V' : 'V', + " \ '' : 'V', + " \ } + +endif + diff --git a/config/vim/vim-plugin-settings/vim-bufferline.config.vim b/config/vim/vim-plugin-settings/vim-bufferline.config.vim new file mode 100644 index 0000000..446303e --- /dev/null +++ b/config/vim/vim-plugin-settings/vim-bufferline.config.vim @@ -0,0 +1,17 @@ + +if utils#hasplug("vim-bufferline") + let g:bufferline_echo = 0 + let g:bufferline_modified = '+' + + " scrolling with fixed current buffer position + + let g:bufferline_active_buffer_left = '[' + let g:bufferline_active_buffer_right = ']' + if utils#hasplug("vim-airline") + let g:bufferline_inactive_highlight = 'airline_c' + let g:bufferline_active_highlight = 'airline_c_bold' + elseif ! utils#hasplug("vim-global-statusline") + call bufferline#init_echo() + endif +endif + diff --git a/config/vim/vim-plugin-settings/vim-devicons.config.vim b/config/vim/vim-plugin-settings/vim-devicons.config.vim new file mode 100644 index 0000000..e330a1e --- /dev/null +++ b/config/vim/vim-plugin-settings/vim-devicons.config.vim @@ -0,0 +1,5 @@ + +if utils#hasplug("vim-devicons") + let g:webdevicons_enable_airline_statusline = 0 +endif + diff --git a/config/vim/vim-plugin-settings/vim-floaterm.config.vim b/config/vim/vim-plugin-settings/vim-floaterm.config.vim new file mode 100644 index 0000000..6c1dcad --- /dev/null +++ b/config/vim/vim-plugin-settings/vim-floaterm.config.vim @@ -0,0 +1,53 @@ + +if utils#hasplug('vim-floaterm') + let g:floaterm_keymap_toggle = '' + let g:floaterm_wintype = 'float' + let g:floaterm_position = 'bottomright' + let g:floaterm_width = 0.5 + let g:floaterm_height = 0.5 + let g:floaterm_autohide = 2 + + call theme#addCleanBg(['FloatermBorder', 'Floaterm']) + + autocmd QuitPre * :FloatermKill! + + " press ener normal mode in terminal. autocmd prevent this key map + " in other plugin like fzf + autocmd FileType floaterm tmap N + + function! s:hasterm(name) + let bufs = floaterm#buflist#gather() + for bufnr in bufs + let bufinfo = getbufinfo(bufnr)[0] + let termname = bufinfo['variables']['floaterm_name'] + if termname == a:name + return v:true + endif + endfor + return v:false + endfunction + + function! ToggleRepl() + let name = 'REPL' + let currentWindow=winnr() + if s:hasterm(name) + execute('FloatermToggle ' . name) + else + :FloatermNew --name=REPL --width=0.5 --wintype=vsplit --position=botright --autoclose=2 ipython + endif + exe currentWindow . "wincmd w" + endfunction + + function! ToggleNormal() + let name = 'normalterm' + if s:hasterm(name) + execute('FloatermToggle ' . name) + else + :FloatermNew --name=normalterm --width=0.5 --height=0.5 --wintype=float --position=bottomright --autoclose=2 + endif + endfunction + + nnoremap tp :call ToggleRepl() + nnoremap tn :call ToggleNormal() + vnoremap tl :FloatermSend --name=REPL +endif diff --git a/config/vim/vim-plugin-settings/vim-gitgutter.config.vim b/config/vim/vim-plugin-settings/vim-gitgutter.config.vim new file mode 100644 index 0000000..bfaa09a --- /dev/null +++ b/config/vim/vim-plugin-settings/vim-gitgutter.config.vim @@ -0,0 +1,5 @@ + +if utils#hasplug('vim-gitgutter') + call theme#addCleanBg(['GitGutterAdd', 'GitGutterChange', 'GitGutterDelete', 'GitGutterChangeDelete']) + nnoremap gt :GitGutterBufferToggle +endif diff --git a/config/vim/vim-plugin-settings/vim-gutentags.config.vim b/config/vim/vim-plugin-settings/vim-gutentags.config.vim new file mode 100644 index 0000000..f40a509 --- /dev/null +++ b/config/vim/vim-plugin-settings/vim-gutentags.config.vim @@ -0,0 +1,10 @@ + +if utils#hasplug("vim-gutentags") + if exists("*gutentags#statusline()") + set statusline+=%{gutentags#statusline()} + endif + let g:gutentags_trace = 1 + let g:gutentags_cache_dir=g:vim_dir . '/.vimtags/' + let g:gutentags_project_root=['.git', '.hg', '.svn', '.bzr', '_darcs', '_FOSSIL_', '.fslckout', 'src'] +endif + diff --git a/config/vim/vim-plugin-settings/vim-illuminate.config.vim b/config/vim/vim-plugin-settings/vim-illuminate.config.vim new file mode 100644 index 0000000..fd1da18 --- /dev/null +++ b/config/vim/vim-plugin-settings/vim-illuminate.config.vim @@ -0,0 +1,35 @@ + +if utils#hasplug('vim-illuminate') && g:vim_type == 'vim' " nvim doesn't need this config + let g:Illuminate_highlightUnderCursor = 1 + let g:Illuminate_ftHighlightGroups = { + \ 'vim:blacklist': ['vimLet', 'vimFuncKey', 'vimNotFunc', 'vimOperParen', 'vimLineComment'], + \ 'java:blacklist' : [ 'javaType', 'javaScopeDecl', 'javaMethodDecl', + \ 'javaComment', 'javaStorageClass', 'javaClassDecl', 'javaExternal', + \ 'javaTypedef', 'javaLineComment', 'javaStatement', 'javaCommentTitle', 'javaDocComment' ], + \ 'lua:blacklist' : [ 'luaComment', 'luaCond', 'luaStatement', 'luaFunction' ] + \ } + let g:Illuminate_ftwhitelist = ['vim', 'sh', 'python', 'rust', 'java', + \ 'c', 'cpp', 'javascript', 'typescript', 'lua'] + + " ugly workaround for the bug that illuminate not working after first enter vim + " { + function s:init_illuminate(...) + let bgType = theme#getBgType() + let bg = theme#getHiTerm('Visual', bgType) + if bg != 'NONE' && &bg == 'dark' + execute('hi illuminatedWord '.bgType.'='.bg) + execute('hi illuminatedCurWord '.bgType.'='.bg) + else + hi illuminatedWord cterm=underline gui=underline + hi illuminatedCurWord cterm=underline gui=underline + end + endfunction + call RegisterLateInit(function('s:init_illuminate'), 0) + " } + + augroup illuminate_augroup + autocmd! + autocmd ColorScheme * call s:init_illuminate() + augroup END + +endif diff --git a/config/vim/vim-plugin-settings/vim-matchup.config.vim b/config/vim/vim-plugin-settings/vim-matchup.config.vim new file mode 100644 index 0000000..9bf46cb --- /dev/null +++ b/config/vim/vim-plugin-settings/vim-matchup.config.vim @@ -0,0 +1,5 @@ + +if utils#hasplug('vim-matchup') + let g:matchup_matchparen_offscreen = {} + call theme#addCleanBg('MatchWord') +endif diff --git a/config/vim/vim-plugin-settings/vim-rooter.config.vim b/config/vim/vim-plugin-settings/vim-rooter.config.vim new file mode 100644 index 0000000..2548501 --- /dev/null +++ b/config/vim/vim-plugin-settings/vim-rooter.config.vim @@ -0,0 +1,8 @@ + +if utils#hasplug("vim-rooter") + let g:rooter_patterns = ['.vscode', '.git', '*.sln', 'src'] + let g:rooter_change_directory_for_non_project_files = '' + let g:rooter_silent_chdir = 0 + " let g:rooter_manual_only = 1 +endif + diff --git a/config/vim/vim-plugin-settings/vim-sneak.config.vim b/config/vim/vim-plugin-settings/vim-sneak.config.vim new file mode 100644 index 0000000..c4c8311 --- /dev/null +++ b/config/vim/vim-plugin-settings/vim-sneak.config.vim @@ -0,0 +1,5 @@ +if utils#hasplug("vim-sneak") + let g:sneak#label = 1 + " map f Sneak_s + " map F Sneak_S +endif diff --git a/config/vim/vim-plugin-settings/vim-startify.config.vim b/config/vim/vim-plugin-settings/vim-startify.config.vim new file mode 100644 index 0000000..7c36c08 --- /dev/null +++ b/config/vim/vim-plugin-settings/vim-startify.config.vim @@ -0,0 +1,58 @@ + +if utils#hasplug("vim-startify") + if has('nvim') + let buffer_str_len = (&columns - 60) / 2 + let buf_str = repeat(' ', buffer_str_len) + let ascii_art = [ + \ buf_str . '', + \ buf_str . '', + \ buf_str . ' __ __ ________ ______ __ __ ______ __ __ ', + \ buf_str . '| \ | \| \ / \ | \ | \| \| \ / \', + \ buf_str . '| $$\ | $$| $$$$$$$$| $$$$$$\| $$ | $$ \$$$$$$| $$\ / $$', + \ buf_str . '| $$$\| $$| $$__ | $$ | $$| $$ | $$ | $$ | $$$\ / $$$', + \ buf_str . '| $$$$\ $$| $$ \ | $$ | $$ \$$\ / $$ | $$ | $$$$\ $$$$', + \ buf_str . '| $$\$$ $$| $$$$$ | $$ | $$ \$$\ $$ | $$ | $$\$$ $$ $$', + \ buf_str . '| $$ \$$$$| $$_____ | $$__/ $$ \$$ $$ _| $$_ | $$ \$$$| $$', + \ buf_str . '| $$ \$$$| $$ \ \$$ $$ \$$$ | $$ \| $$ \$ | $$', + \ buf_str . ' \$$ \$$ \$$$$$$$$ \$$$$$$ \$ \$$$$$$ \$$ \$$', + \] + else + let buffer_str_len = (&columns - 30) / 2 + let buf_str = repeat(' ', buffer_str_len) + let ascii_art = [ + \ buf_str . '', + \ buf_str . '', + \ buf_str . ' __ __ ______ __ __ ', + \ buf_str . '| \ | \| \| \ / \', + \ buf_str . '| $$ | $$ \$$$$$$| $$\ / $$', + \ buf_str . '| $$ | $$ | $$ | $$$\ / $$$', + \ buf_str . ' \$$\ / $$ | $$ | $$$$\ $$$$', + \ buf_str . ' \$$\ $$ | $$ | $$\$$ $$ $$', + \ buf_str . ' \$$ $$ _| $$_ | $$ \$$$| $$', + \ buf_str . ' \$$$ | $$ \| $$ \$ | $$', + \ buf_str . ' \$ \$$$$$$ \$$ \$$', + \] + endif + + let g:startify_padding_left = &columns / 2 - &columns / 4 - &columns / 8 + let g:startify_custom_header = ascii_art + let g:startify_change_to_dir = 0 + let g:startify_files_number = 5 + + let g:startify_bookmarks = [ g:dotfiledir . 'main.vim' ] + let g:startify_lists = [ + \ { 'header': startify#pad([' RECENT']), 'type': 'files' }, + \ { 'header': startify#pad([' SESSIONS']), 'type': 'sessions' }, + \ { 'header': startify#pad([' BOOKMARKS']), 'type': 'bookmarks' }, + \ ] + + " session related KeyBinding. These KeyBinding uses function from startify + nnoremap s :SSave! + nnoremap l :SLoad + nnoremap d :SDelete! + nnoremap c :SClose + + au VimLeave * SSave! last + +endif + diff --git a/config/vim/vim-plugin-settings/vim-tmux-navigator.config.vim b/config/vim/vim-plugin-settings/vim-tmux-navigator.config.vim new file mode 100644 index 0000000..e895f28 --- /dev/null +++ b/config/vim/vim-plugin-settings/vim-tmux-navigator.config.vim @@ -0,0 +1,11 @@ + +if utils#hasplug('vim-tmux-navigator') + let g:tmux_navigator_no_mappings = 1 + + noremap :TmuxNavigateLeft + noremap :TmuxNavigateDown + noremap :TmuxNavigateUp + noremap :TmuxNavigateRight + " noremap {Previous-Mapping} :TmuxNavigatePrevious +endif + diff --git a/config/vim/vim-plugin-settings/vim9/fuzzyy.config.vim b/config/vim/vim-plugin-settings/vim9/fuzzyy.config.vim new file mode 100644 index 0000000..46da714 --- /dev/null +++ b/config/vim/vim-plugin-settings/vim9/fuzzyy.config.vim @@ -0,0 +1,7 @@ +vim9script + +if utils#hasplug('fuzzyy') + g:files_respect_gitignore = 1 + g:fuzzyy_menu_matched_hl = 'error' + g:fuzzyy_dropdown = 1 +endif diff --git a/config/vim/vim-plugin-settings/vim9/vim-global-statusline.config.vim b/config/vim/vim-plugin-settings/vim9/vim-global-statusline.config.vim new file mode 100644 index 0000000..ecd1ccc --- /dev/null +++ b/config/vim/vim-plugin-settings/vim9/vim-global-statusline.config.vim @@ -0,0 +1,188 @@ +vim9script + +if utils#hasplug('vim-global-statusline') + + g:stl_nonbtbg = 'folded' + g:stl_bg = 'normal' + g:bufferline_forbided_col = 32 + + def ReverseHl(name: string, hl: string) + var hl_terms = theme#getHiTerms(hl) + var normal_terms = theme#getHiTerms('normal') + for [term, val] in items(hl_terms) + if val == 'NONE' + hl_terms[term] = normal_terms[term] + endif + endfor + exe 'hi ' .. name .. ' guibg=' .. hl_terms['guifg'] .. ' guifg=' + .. hl_terms['guibg'] .. ' ctermbg=' .. hl_terms['ctermfg'] + .. ' ctermfg=' .. hl_terms['ctermbg'] + enddef + + def StlHighlight() + hi normalModeGstl cterm=reverse gui=reverse + ReverseHl('insertModeGstl', 'function') + ReverseHl('visualModeGstl', 'statement') + ReverseHl('commandModeGstl', 'number') + enddef + autocmd ColorScheme * StlHighlight() + var mode_color = { + n: 'normalModeGstl', + i: 'insertModeGstl', + v: 'visualModeGstl', + V: 'visualModeGstl', + c: 'commandModeGstl', + } + var mode_str = { + n: ' NORMAL ', + i: ' INSERT ', + v: ' VISUAL ', + V: ' V-LINE ', + c: ' COMMAND ', + } + mode_str[nr2char(22)] = ' V-BLOCK ' + mode_color[nr2char(22)] = 'curSearch' + def Modestr(): void + var m = mode() + if has_key(mode_str, m) + g:StlSetPart(0, mode_str[m], mode_color[m], 'mode') + else + echom char2nr(m) + g:StlSetPart(0, ' ' .. &ft .. ' ', 'TabLineSel', 'mode') + endif + g:StlRefresh() + enddef + + def Fnstr(): void + g:StlSetPart(10, 'filename: ' .. bufname(), '', 'filename') + g:StlRefresh() + enddef + + def Bufstr(): void + var bufstr = bufferline#get_echo_string() + g:StlSetPart(9, ' ' .. bufstr, '', 'bufstr') + g:StlRefresh() + enddef + + def Lncol(): void + var col = virtcol(".") + var ln = line('.') + var m = mode() + var color = '' + if has_key(mode_color, m) + color = mode_color[m] + else + color = 'TabLineSel' + endif + g:StlSetPart(&co - 9, printf(" %d:%d", ln, col), color, 'linenr') + g:StlRefresh() + enddef + + var cocstatustimer = -1 + + def Cocstatus(): string + const loading = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"] + var results = [] + var result = '𐄂' + var fticon = '𐄂' + try + if exists('g:CocAction') + results = g:CocAction('services') + endif + catch + endtry + var state = '' + var id = '' + if len(results) == 0 + timer_start(100, function(Lsp)) + endif + for e in results + if e['languageIds'][0] == &ft + state = e['state'] + id = e['id'] + endif + endfor + + # messy way to get time in millisecond in vim + var time = float2nr(str2float(reltime()->reltimestr()[4 : ]) * 1000) + var speed = 800 + var loadidx = time % speed + var msg = id + if state == "starting" + if len(timer_info(cocstatustimer)) == 0 + cocstatustimer = timer_start(100, function(Lsp), {'repeat': 800}) + endif + fticon = loading[loadidx / (speed / 10)] + elseif state == "running" + if len(timer_info(cocstatustimer)) != 0 + timer_stop(cocstatustimer) + cocstatustimer = -1 + endif + if exists('g:WebDevIconsGetFileTypeSymbol') + fticon = g:WebDevIconsGetFileTypeSymbol() + endif + endif + # return fticon .. ' ' .. result + return 'lsp ' .. fticon + enddef + + def Lsp(...timer: list): void + var s = Cocstatus() + g:StlSetPart(&co - 17, ' ' .. s .. ' ', '', 'lsp') + g:StlRefresh() + enddef + + var fancytimer = 0 + def Fancy(...timer: list): void + var expressions = [' (◕_◕)', ' (◕‿◕)', '\(◕◡◕\)', ' (◣_◢)', ' (◣‿◢)', '\(◣◡◣\)', ' (◠‿◠)', ' (◠_◠)', '\(◠◡◠\)', ' (◡‿◡)', ' (◡_◡)', '\(◡◡◡\)', ' (┳Д┳)', ' (个_个)', ' ( ≧Д≦)', ' 흫_흫', ' 句_句'] + + # var letters = [𝔞 𝔟 𝔠 𝔡 𝔢 𝔣 𝔤 𝔥 𝔦 𝔧 𝔨 𝔩 𝔪 𝔫 𝔬 𝔭 𝔮 𝔯 𝔰 𝔱 𝔲 𝔳 𝔴 𝔵 𝔶 𝔷] + + # string "I love you" using unicode letters + var lang = '' + if &ft == 'python' + lang = '𝕻𝖞𝖙𝖍𝖔𝖓' + elseif &ft == 'java' + lang = '𝕵𝖆𝖛𝖆' + elseif &ft == 'javascript' + lang = '𝕵𝖆𝖛𝖆𝖘𝖈𝖗𝖎𝖕𝖙' + elseif &ft == 'lua' + lang = '𝕷𝖚𝖆' + elseif &ft == 'vim' + lang = '𝓥𝓲𝓶 𝓢𝓬𝓻𝓲𝓹𝓽' + else + lang = &ft + endif + var str = lang .. ' 𝔦𝔰 𝔱𝔥𝔢 𝔟𝔢𝔰𝔱 𝔩𝔞𝔫𝔤𝔲𝔞𝔤𝔢' + + # fancytimer = (fancytimer + 1) % len(str) + g:StlSetPart(&co - 27 - strcharlen(str), str, '', 'fancy') + enddef + + def Theme(): void + # const light = '☀' + # const dark = '☽' + const light = '🌕' + const dark = '🌑' + var theme = &bg == 'light' ? light : dark + g:StlSetPart(&co - 23, '│ ' .. theme, '', 'bgc') + g:StlRefresh() + enddef + + def EnterInit(): void + # Theme() + Lncol() + Lsp() + # autocmd GlobalStl ColorScheme * Theme() + enddef + + augroup GlobalStl + autocmd! + autocmd VimEnter,ModeChanged * Modestr() | Lncol() + autocmd BufEnter,BufDelete,BufWritePost * Bufstr() | Modestr() + autocmd CursorHold * Lncol() + autocmd BufEnter,BufReadPost * Lsp() + autocmd VimEnter * EnterInit() + augroup END + +endif diff --git a/config/vim/vim-plugin-settings/vimtex.config.vim b/config/vim/vim-plugin-settings/vimtex.config.vim new file mode 100644 index 0000000..1e52737 --- /dev/null +++ b/config/vim/vim-plugin-settings/vimtex.config.vim @@ -0,0 +1,7 @@ +if utils#hasplug('vimtex') + noremap lc :VimtexCompile + noremap lv :VimtexView + if g:os == 'Darwin' + let g:vimtex_view_method = 'skim' + endif +endif diff --git a/config/vim/vim-plugin-settings/vista.vim.config.vim b/config/vim/vim-plugin-settings/vista.vim.config.vim new file mode 100644 index 0000000..b83ddfe --- /dev/null +++ b/config/vim/vim-plugin-settings/vista.vim.config.vim @@ -0,0 +1,60 @@ + +if utils#hasplug('vista.vim') + let g:vista_default_executive = 'vim_lsp' + if utils#hasplug('coc.nvim') + let g:vista_default_executive = 'coc' + elseif executable('ctags') + let g:vista_default_executive = 'ctags' + endif + nnoremap v :Vista!! + let g:vista_cursor_delay = 0 + let g:vista_echo_cursor = 0 + let g:vista_echo_cursor_strategy = 'floating_win' + let g:vista_close_on_jump = 0 + let g:vista_floating_delay = 0 + let g:vista_ignore_kinds = ['Variable', 'Field', 'EnumMember', + \ 'String', 'Object', 'Array', 'Constant', 'Package', 'Boolean', 'Number' + \ ] + let g:vista_floating_border = 'rounded' + let g:vista_disable_statusline = 1 + " let g:vista_keep_fzf_colors = 1 + let g:vista_update_on_text_changed_delay = 0 + let g:vista_update_on_text_changed = 1 + let g:vista#renderer#enable_kind = 1 + let g:vista#renderer#enable_icon = 1 + + " return to last position of vista + let g:vista_last_row = v:null + function! VistaCursorJump() + " let found = vista#util#BinarySearch(g:vista.raw, line('.'), 'line', '') + let found = g:vista_last_row + if empty(found) + return + endif + let vlnum = get(found, 'vlnum', v:null) + call cursor(vlnum, 3) + endfunction + + " save tag for VistaCursorJump use + function! VistaH2() + if exists('*vista#util#BinarySearch') + let bufs = map(filter(copy(getbufinfo()), 'v:val.listed'), 'v:val.bufnr') + if index(bufs, bufnr('%')) < 0 + return + endif + let found = vista#util#BinarySearch(g:vista.raw, line('.'), 'line', '') + if empty(found) + return + endif + let g:vista_last_row = found + endif + endfunction + + augroup VistaAu + autocmd! + autocmd BufLeave * call VistaH2() + autocmd FileType vista call VistaCursorJump() + augroup END + +endif + diff --git a/config/vim/vim-plugin-settings/wilder.nvim.config.vim b/config/vim/vim-plugin-settings/wilder.nvim.config.vim new file mode 100644 index 0000000..c54535b --- /dev/null +++ b/config/vim/vim-plugin-settings/wilder.nvim.config.vim @@ -0,0 +1,31 @@ + +if utils#hasplug('wilder.nvim') + + call wilder#setup({ + \ 'modes': [':'], + \ 'next_key': '', + \ 'previous_key': '', + \ 'enable_cmdline_enter': 0, + \ }) + + call wilder#set_option('pipeline', [ + \ wilder#debounce(10), + \ wilder#branch( + \ wilder#cmdline_pipeline({'language': g:vim_type == 'nvim' ? 'python' : 'vim'}), + \ ), + \ ]) + + if g:vim_type == 'vim' + call wilder#set_option('renderer', wilder#popupmenu_renderer()) + else + call wilder#set_option('renderer', wilder#popupmenu_renderer( + \ wilder#popupmenu_border_theme({ + \ 'highlights': { + \ 'default': 'Normal', + \ }, + \ 'pumblend': 20, + \ 'border': 'rounded', + \ }))) + endif +endif + diff --git a/config/vim/vim-plugin-settings/winresizer.config.vim b/config/vim/vim-plugin-settings/winresizer.config.vim new file mode 100644 index 0000000..a1f4d17 --- /dev/null +++ b/config/vim/vim-plugin-settings/winresizer.config.vim @@ -0,0 +1,8 @@ + +if utils#hasplug("winresizer") + let g:winresizer_vert_resize = 2 + let g:winresizer_horiz_resize = 2 + " nnoremap r :WinResizerStartResize + let g:winresizer_start_key = 'r' +endif + diff --git a/config/vim/vim-plugin-settings/zoxide.vim.config.vim b/config/vim/vim-plugin-settings/zoxide.vim.config.vim new file mode 100644 index 0000000..2d182b8 --- /dev/null +++ b/config/vim/vim-plugin-settings/zoxide.vim.config.vim @@ -0,0 +1,3 @@ +if utils#hasplug("zoxide.vim") + +endif diff --git a/config/wezterm/.wezterm.lua b/config/wezterm/.wezterm.lua new file mode 100644 index 0000000..53be375 --- /dev/null +++ b/config/wezterm/.wezterm.lua @@ -0,0 +1 @@ +local wezterm = require 'wezterm' diff --git a/install.sh b/install.sh index e8125b4..2c8fa73 100755 --- a/install.sh +++ b/install.sh @@ -5,8 +5,10 @@ app_name='dotfiles' [ -z "$APP_PATH" ] && APP_PATH="$HOME/.$app_name" -[ -z "$REPO_URI" ] && REPO_URI="https://github.com/Donaldttt/$app_name" -[ -z "$REPO_BRANCH" ] && REPO_BRANCH='dev' +# [ -z "$REPO_URI" ] && REPO_URI="https://github.com/Donaldttt/$app_name" +# [ -z "$REPO_BRANCH" ] && REPO_BRANCH='dev' +[ -z "$REPO_URI" ] && REPO_URI="https://gitlab.com/tangnachuan1208/$app_name" +[ -z "$REPO_BRANCH" ] && REPO_BRANCH='gitlab' [ -z "$VIM_RTPATH" ] && VIM_RTPATH="$HOME/.vim" @@ -45,7 +47,7 @@ program_exists() { # 2 file not exist # when using this function: # file path should not be quoted but like this: -# file_contains 'abc' file_path +# file_contains 'abc' file_path file_contains(){ if [ -f "$2" ]; then a=`grep "$1" $2` @@ -95,7 +97,7 @@ backup_file() { # Usage: sync_repo path url # -# This function try to clone git repo host in @url +# This function try to clone git repo host in @url # to @path. If @path alreay exsits, it will simply # update the repo sync_repo() { @@ -118,6 +120,25 @@ sync_repo() { fi } +# simply clone a repo +sync_repo_default() { + local repo_uri="$1" + local repo_path="$2" + + if [ ! -e "$repo_path" ]; then + msg "Trying to clone repo" + mkdir -p "$repo_path" + git clone "$repo_uri" "$repo_path" + ret="$?" + success "Successfully cloned repo." + else + msg "Trying to update repo" + cd "$repo_path" && git pull + ret="$?" + success "Successfully updated repo" + fi +} + setup_vimplug() { # if vimplug is already installed @@ -127,7 +148,7 @@ setup_vimplug() { #fi mkdir -p "$VIM_RTPATH/autoload" - # setup for vim + # setup for vim curl -fLo ~/.vim/autoload/plug.vim --create-dirs \ https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim > /dev/null 2>&1 @@ -162,11 +183,26 @@ source ~/.vimrc" > $nvim_config fi } +# tmux plugin manager +set_up_tpm() { + + echo "Install TPM(tmux plugin manager)?('y' install; 'other keys' nope)" + read -r respond + if [ "$respond" = "y" ] || [ "$respond" = "yes" ]; then + local url="https://github.com/tmux-plugins/tpm" + sync_repo_default "$url" "$HOME/.tmux/plugins/tpm" + success "TPM installed" + else + fail "TPM not installed" + fi +} + set_up_tmux() { if program_exists "tmux"; then backup_file "$HOME/.tmux.conf" try_symlink "$APP_PATH/.tmux.conf" "$HOME/.tmux.conf" && \ success "Tmux config setup successed" + set_up_tpm else fail "Tmux config is not setup(tmux not installed)" fi @@ -187,7 +223,7 @@ set_up_vim() { backup_file "$HOME/.vimrc" backup_file "$HOME/.vimrc.bundles" - try_symlink "$APP_PATH/.vimrc" "$HOME/.vimrc" + try_symlink "$APP_PATH/.vimrc" "$HOME/.vimrc" try_symlink "$APP_PATH/.vimrc.bundles" "$HOME/.vimrc.bundles" success "Setting up symlinks for vim configuration" @@ -201,33 +237,37 @@ set_up_zoxide_shell_config() { local source_cmd_bash='eval "$(zoxide init bash)"' if program_exists "zsh"; then # if not already contain source command - file_contains "$source_cmd_zsh" ~/.zshrc + file_contains "$source_cmd_zsh" ~/.zshrc status_code=$? if [ "$status_code" != '0' ]; then - echo "Install zoxide source command ($source_cmd_zsh) for zsh shell?('y' install; 'q' quit the scrip)" + echo "Install zoxide source command ($source_cmd_zsh) for zsh shell?('y' install; others no)" read -r respond if [ "$respond" = "y" ] || [ "$respond" = "yes" ]; then echo "$source_cmd_zsh" >> $HOME/.zshrc - elif [ "$respond" = "q" ]; then - exit 0 + success "add ($source_cmd_zsh) to zsh" + else + fail "not adding ($source_cmd_zsh) to zsh" fi - success "add ($source_cmd_zsh) to zsh" + else + success "($source_cmd_zsh) is already in zsh" fi fi if program_exists "bash"; then # if not already contain source command - file_contains "$source_cmd_bash" ~/.bashrc + file_contains "$source_cmd_bash" ~/.bashrc status_code=$? if [ "$status_code" != '0' ]; then - echo "Install zoxide source command ($source_cmd_bash) for bash shell?('y' install; 'q' quit the scrip)" + echo "Install zoxide source command ($source_cmd_bash) for bash shell?('y' install; others no)" read -r respond if [ "$respond" = "y" ] || [ "$respond" = "yes" ]; then echo "$source_cmd_bash" >> $HOME/.bashrc - elif [ "$respond" = "q" ]; then - exit 0 + success "add ($source_cmd_bash) to bash" + else + fail "not adding ($source_cmd_bash) to bash" fi - success "add ($source_cmd_bash) to bash" + else + success "($source_cmd_bash) is already in bash" fi fi } @@ -241,7 +281,7 @@ set_up_zoxide() { return 0 fi - echo "Install zoxide (smart cd like autojump)?('y' install; 'q' quit the scrip)" + echo "Install zoxide (smart cd like autojump)?('y' install; 'other keys' nope)" read -r respond if [ "$respond" = "y" ] || [ "$respond" = "yes" ]; then program_must_exist "curl" @@ -249,8 +289,29 @@ set_up_zoxide() { curl -sS https://raw.githubusercontent.com/ajeetdsouza/zoxide/main/install.sh | bash set_up_zoxide_shell_config - elif [ "$respond" = "q" ]; then - exit 0 + else + fail "zoxide is not installed" + fi +} +set_up_fish(){ + local source_cmd="source $APP_PATH/config/fish/config.fish" + local fish_config="$HOME/.config/fish/config.fish" + if program_exists "fish"; then + # if not already contain source command + file_contains "$source_cmd" $fish_config + status_code=$? + if [ "$status_code" != '0' ]; then + echo "Install fish configuration script for fish shell?('y' install; 'other keys' nope)" + read -r respond + if [ "$respond" = "y" ] || [ "$respond" = "yes" ]; then + echo "$source_cmd" >> $fish_config + success "fish configuration is sourced in $fish_config" + else + fail "Configuration is not sourced in fish" + fi + else + success "fish script is already sourced" + fi fi } @@ -259,41 +320,45 @@ set_up_bash_tool(){ local source_cmd2="source ~/.$app_name/bash_tools.sh" if program_exists "zsh"; then # if not already contain source command - file_contains "$source_cmd" ~/.zshrc + file_contains "$source_cmd" ~/.zshrc status_code=$? if [ "$status_code" != '0' ]; then - file_contains "$source_cmd2" ~/.zshrc + file_contains "$source_cmd2" ~/.zshrc status_code=$? fi if [ "$status_code" != '0' ]; then - echo "Install terminal configuration script for zsh shell?('y' install; 'q' quit the scrip)" + echo "Install terminal configuration script for zsh shell?('y' install; 'other keys' nope)" read -r respond if [ "$respond" = "y" ] || [ "$respond" = "yes" ]; then echo "$source_cmd" >> $HOME/.zshrc - elif [ "$respond" = "q" ]; then - exit 0 + success "Terminal configuration is sourced in zsh" + else + fail "Configuration is not sourced in zsh" fi - success "Terminal configuration is sourced in zsh" + else + success "zsh script is already sourced" fi fi if program_exists "bash"; then # if not already contain source command - file_contains "$source_cmd" ~/.bashrc + file_contains "$source_cmd" ~/.bashrc status_code=$? if [ "$status_code" != '0' ]; then - file_contains "$source_cmd2" ~/.bashrc + file_contains "$source_cmd2" ~/.bashrc status_code=$? fi if [ "$status_code" != '0' ]; then - echo "Install terminal configuration script for bash shell?('y' install; 'q' quit the scrip)" + echo "Install terminal configuration script for bash shell?('y' install; 'other keys' nope)" read -r respond if [ "$respond" = "y" ] || [ "$respond" = "yes" ]; then echo "$source_cmd" >> $HOME/.bashrc - elif [ "$respond" = "q" ]; then - exit 0 + success "Terminal configuration is sourced in bash" + else + fail "Configuration is not sourced in bash" fi - success "Terminal configuration is sourced in bash" + else + success "bash script is already sourced" fi fi } @@ -304,6 +369,7 @@ env_set "$HOME" set_up_vim set_up_tmux set_up_bash_tool +set_up_fish set_up_zoxide msg "\nThanks for installing $app_name." diff --git a/main.vim b/main.vim new file mode 100644 index 0000000..6c1c7da --- /dev/null +++ b/main.vim @@ -0,0 +1,300 @@ +" (jump to the topic) +" +" OPTIONS +" PLUGIN_INSTALL +" UTILITIES +" PLUGIN_CONFIGURATION " THEME_CONFIGURATION +" KEY_MAPS +" OTHER_CONFIGS + +let g:high_performence = v:false +let g:autocomplte_enable = v:true +let g:copilot_enable = v:true + +" only in nvim (using which-key) +let g:key_prompt = v:false + +" only used by neovim +let g:classic_vim_ui = v:true +let g:animation_enable = v:false + +let g:swap_dict = [ + \ ['v:false', '0', 'dark', 'false' ], + \ ['v:true' , '1', 'light', 'true']] +" convinient function to swap between two options +nmap t :call utils#swapword() + +"""""" PLUGIN_INSTALL """""" + +let g:dotvimdir = expand(g:dotfiledir . 'config/vim/') +let g:plugin_dir = expand(g:vim_dir . 'plugged/') + +let g:theme_config_path = expand(g:vim_dir . ".config.vim") + +call plug#begin(g:plugin_dir) + " https://github.com/junegunn/vim-plug/wiki/tips + function! Cond(cond, ...) + let opts = get(a:000, 0, {}) + return a:cond ? opts : extend(opts, { 'on': [], 'for': [] }) + endfunction + let g:animation_enable = g:high_performence ? v:false : g:animation_enable + + if !g:high_performence + Plug 'aditya-azad/candle-grey' + Plug 't184256/vim-boring' + Plug 'tek256/simple-dark' + Plug 'sainnhe/everforest' + Plug 'bluz71/vim-moonfly-colors', { 'as': 'moonfly' } + " Plug 'jacoborus/tender.vim' + Plug 'cocopon/iceberg.vim' + Plug 'catppuccin/nvim', Cond( has('nvim-0.8.2') \|\| g:vim_v >= 900 , { 'as': 'catppuccin' }) + Plug 'NLKNguyen/papercolor-theme' + Plug 'EdenEast/nightfox.nvim', Cond(has('nvim-0.5')) + Plug 'projekt0n/github-nvim-theme', Cond(has('nvim-0.5'), { 'tag': 'v0.0.7' }) + Plug 'folke/tokyonight.nvim', Cond(g:vim_type == 'nvim', { 'branch': 'main' }) + " Plug 'junegunn/goyo.vim', { 'on': ['Goyo'] } + Plug 'andymass/vim-matchup' + endif + Plug 'Donaldttt/fuzzyy' + Plug 'tpope/vim-repeat' + Plug 'tpope/vim-fugitive' + Plug 'tpope/vim-surround' + " Plug 'lervag/vimtex' + Plug 'github/copilot.vim', Cond(( g:vim_type == 'nvim' \|\| g:vim_v >= 900 ) + \ && g:copilot_enable && executable('node')) + + Plug 'nanotee/zoxide.vim', Cond(executable('zoxide')) + + Plug 'godlygeek/tabular' + + Plug 'preservim/vim-markdown' + + Plug 'dstein64/vim-startuptime', Cond(!g:high_performence) + Plug 'simeji/winresizer', Cond(!g:high_performence) + Plug 'rust-lang/rust.vim', { 'for': ['rust'] } + + Plug 'rhysd/conflict-marker.vim' + + Plug 'jiangmiao/auto-pairs' + " Plug 'mg979/vim-visual-multi' + Plug 'RRethy/vim-illuminate', Cond(!g:high_performence) + " Plug 'ludovicchabant/vim-gutentags' + " Plug 'ctrlpvim/ctrlp.vim' + + "" ESSENTIAL_PLUGINS "" + + Plug 'mhinz/vim-startify' + Plug 'christoomey/vim-tmux-navigator' + " Comment stuff out + Plug 'tpope/vim-commentary' + Plug 'vim-scripts/restore_view.vim' + + " vim only plugins + Plug 'scrooloose/nerdtree', Cond(g:vim_type == 'vim' \|\| !has('nvim-0.8'), { 'on' : ['NERDTreeToggle', 'NERDTreeFind'] }) + Plug 'tiagofumo/vim-nerdtree-syntax-highlight', Cond(g:vim_type == 'vim' && !g:high_performence) + + Plug 'neoclide/coc.nvim', Cond(g:autocomplte_enable && executable('node'), {'branch': 'release'}) + " only work with vim + if g:vim_type == 'vim' + if executable('ctags') + Plug 'preservim/tagbar' + else + Plug 'liuchengxu/vista.vim', Cond(!g:high_performence) + endif + + Plug 'airblade/vim-rooter' + Plug 'justinmk/vim-sneak' + Plug 'airblade/vim-gitgutter' + Plug 'chriskempson/base16-vim' + " Plug 'Yggdroot/indentLine' + " Plug 'Donaldttt/fzf-color-preview', Cond(g:vim_v >= 800, { 'on': ['ColorsPreview', 'AirlinePreview'] }) + + Plug 'markonm/traces.vim' + Plug 'voldikss/vim-floaterm', Cond(has('terminal') && g:vim_type == 'vim') + set encoding=UTF-8 + Plug 'junegunn/fzf', { 'do': { -> fzf#install() } } + Plug 'junegunn/fzf.vim' + Plug 'antoinemadec/coc-fzf', Cond(g:os != 'Windows', {'on': ['CocFzfList']}) + + Plug 'Donaldttt/vim-bufferline' + + Plug 'Donaldttt/vim-global-statusline', { 'branch': 'vim9' } + " Plug 'vim-airline/vim-airline' + " Plug 'vim-airline/vim-airline-themes' + + Plug 'ryanoasis/vim-devicons' + Plug 'wfxr/minimap.vim', Cond(executable('code-minimap'), {'on' : ['MinimapToggle']}) + endif + + if g:vim_type == 'nvim' + Plug 'RRethy/nvim-base16' + + if has('nvim-0.5') + " Plug 'hkupty/iron.nvim' + " Plug 'metakirby5/codi.vim' + Plug 'lukas-reineke/indent-blankline.nvim', Cond(!g:animation_enable) + Plug 'echasnovski/mini.indentscope', Cond(g:animation_enable) + Plug 'echasnovski/mini.animate', Cond(g:animation_enable) + + Plug 'nvim-lualine/lualine.nvim' + Plug 'petertriho/nvim-scrollbar', Cond(g:animation_enable) + Plug 'folke/which-key.nvim', Cond(!g:high_performence && g:key_prompt) + Plug 'ahmedkhalf/project.nvim' + endif + if has('nvim-0.7') + Plug 'stevearc/aerial.nvim' + Plug 'nvim-treesitter/nvim-treesitter', Cond(executable('make'), {'do': ':TSUpdate'}) + + " for telescope + Plug 'nvim-lua/plenary.nvim' + Plug 'nvim-telescope/telescope.nvim', Cond(g:vim_type == 'nvim', { 'branch': '0.1.x' }) + " c plugin for telescope to make it faster + Plug 'nvim-telescope/telescope-fzf-native.nvim', Cond(executable('make'), { 'do': 'make' }) + + " comment out this plugin if the machine doesn't have required + " font install + Plug 'nvim-tree/nvim-web-devicons' + Plug 'akinsho/toggleterm.nvim', Cond(g:vim_type == 'nvim', {'tag' : '*'}) + + Plug 'ggandor/leap.nvim' + endif + if has('nvim-0.8') + Plug 'nvim-tree/nvim-tree.lua' + Plug 'lewis6991/gitsigns.nvim' + + Plug 'rcarriga/nvim-notify', Cond(!g:high_performence && !g:classic_vim_ui) + Plug 'folke/noice.nvim', Cond(!g:high_performence && !g:classic_vim_ui) + Plug 'MunifTanjim/nui.nvim', Cond(!g:high_performence && !g:classic_vim_ui) + endif + + " nvim theme + if has('nvim-0.9') + Plug 'rebelot/kanagawa.nvim' + Plug 'rose-pine/neovim', { 'as': 'rose-pine' } + endif + endif + + " custom plugin + Plug g:dotvimdir +call plug#end() + +augroup InitConfig + " Automatically install missing plugins at startup + autocmd VimEnter * + \ if len(filter(values(g:plugs), '!isdirectory(v:val.dir)')) + \| PlugInstall --sync | q + \| endif +augroup end + +"""""" UTILITIES """""" + +" a list of funcref that will be initilized late +let g:post_init_func = [] + +function RegisterLateInit(func, delay, ...) + let Funcref = type(a:func) == 10 ? func : function(a:func) + let obj = [Funcref, a:delay, a:000] + call add(g:post_init_func, obj) +endfunction + +function s:executeLateInit() + function s:lateInitHelper(...) + for obj in g:post_init_func + let Funcref = obj[0] + let delay = obj[1] + let args = obj[2] + if delay == 0 + if len(args) > 0 + call Funcref(args) + else + call Funcref() + endif + else + call timer_start(delay, Funcref) + endif + endfor + endfunction + autocmd VimEnter * call s:lateInitHelper() +endfunction + +" source all vim specific config eg. gui vim +for f in split(glob(g:dotvimdir.'/configs/*-config.vim'), '\n') + exe 'source' f +endfor + +" source all vim plugin config +for f in split(glob(g:dotvimdir.'/vim-plugin-settings/*.config.vim'), '\n') + exe 'source' f +endfor + +" source all vim9 plugin configs +if g:vim_v >= 900 +for f in split(glob(g:dotvimdir.'/vim-plugin-settings/vim9/*.config.vim'), '\n') + exe 'source' f +endfor +endif + +" source lua plugins if in neovim +if has('nvim') + lua require('lua-plugin-settings') +endif + +" source lua library + +"""""" THEME_CONFIGURATION """""" +nmap db :call utils#showHiGroup() + + """ THEME_OPTIONS """ + +call theme#Init() + +"""""" KEY_MAPS """""" +" (This doesn't include plugin specific mapping. +" For them check plugin Preferences) + +nnoremap ws :call utils#trimwhitespace() + +" Toggle dark/light theme +noremap cbg :call theme#toggleBg() + +" Toggle transparent background +noremap ctb :call theme#toggleTransparent() + +" Buffer navigation +nnoremap q :bprevious +nnoremap e :bnext + +" leader s change all occurence +nnoremap s :%s/\<\>/ + +noremap h :noh " turn off highlight + +" disable two easily mispressed yet useless key +nnoremap q: +nnoremap Q + +" we often press shift key by mistake +command WQ wq +command Wq wq +command W w +command Q q + +" leader num change tab +" only for vim or nvim without lualine + +if (g:vim_type == 'vim' || !has('nvim-0.5')) && utils#hasplug('vim-bufferline') + for i in range(1, 9) + execute "nnoremap " . i . + \ " :call bufferline#jump(" . i . ")" + endfor + for i in range(10, 20) + execute "nnoremap " . i . + \ " :call bufferline#jump(" . i . ")" + endfor +end + +" split window comform with other window management shortcuts +nnoremap % :vsplit +nnoremap " :split + +call s:executeLateInit() diff --git a/test.vim b/test.vim new file mode 100644 index 0000000..c075384 --- /dev/null +++ b/test.vim @@ -0,0 +1,32 @@ +vim9script + +def Fuzzysearch9(li: list, pattern: string, limit: number): list + var opts = {} + if limit > 0 + opts['limit'] = limit + endif + var results: list = matchfuzzypos(li, pattern, opts) + var strs = results[0] + var poss = results[1] + var scores = results[2] + + # if limit > 0 + # strs = strs[: limit] + # poss = poss[: limit] + # scores = scores[: limit] + # endif + + var str_list = [] + var hl_list = [] + var idx = 0 + for str in strs + add(str_list, str) + add( + hl_list, + [idx + 1, reduce(poss[idx], (acc, val) => add(acc, val + 1), [])]) + idx += 1 + endfor + return [str_list, hl_list] +enddef + +Fuzzysearch9(['foo', 'bar', 'baz'], 'ba', 0) diff --git a/utils.vim b/utils.vim deleted file mode 100644 index 4e00af8..0000000 --- a/utils.vim +++ /dev/null @@ -1,268 +0,0 @@ - -" This file stores helper functions - -function! Notify(msg) - echo msg -endfunction - -" Check if plugin exists -function! HasPlug(plug_name, ...) - let plug_dir_name = get(a:, 1, a:plug_name) " optional argument for the name of plug's folder - if has_key(g:plugs, a:plug_name) && isdirectory(g:plugin_dir . "/" . plug_dir_name) - if has_key(g:plugs[a:plug_name], 'for') || has_key(g:plugs[a:plug_name], 'on') - if (has_key(g:plugs[a:plug_name], 'for') && len(g:plugs[a:plug_name]['for']) == 0) || - \ (has_key(g:plugs[a:plug_name], 'on') && len(g:plugs[a:plug_name]['on']) == 0) - return v:false - endif - endif - return v:true - endif - return v:false -endfunction - -" This function is used to save a variable to a file -function! SaveVariable(var, file) - let serialized = string(a:var) - call writefile([serialized], a:file) -endfun - -" This function is used to retrieve a variable from a file -" only first line is count -function! ReadVariable(file) - if !filereadable(a:file) - return v:null - endif - let serialized = readfile(a:file) - if(len(serialized) == 0) - return v:null - endif - execute "let result = " . serialized[0] - return result -endfun - -" Merge two dictionaries, also recursively merging nested keys. -" Use extend() if you don't need to merge nested keys. -fun! Merge(defaults, override) - let l:new = copy(a:defaults) - for [l:k, l:v] in items(a:override) - let l:new[l:k] = (type(l:v) is v:t_dict && type(get(l:new, l:k)) is v:t_dict) - \ ? Merge(l:new[l:k], l:v) - \ : l:v - endfor - return l:new -endfun - -function! Sh(pattern) - execute("filter /" . a:pattern . "/ highlight") -endfunc - -" get current colorscheme name -function! ColourSchemeName() - try - return g:colors_name - catch /^Vim:E121/ - return "default" - catch /.*/ - return "default" - endtry -endfunction - -" debug function print out highlight group of cursor position -function! ShowHighLightGroup() - if !exists("*synstack") - return - endif - echo map(synstack(line('.'), col('.')), 'synIDattr(v:val, "name")') - - :echo "hi<" . synIDattr(synID(line("."),col("."),1),"name") . '> trans<' - \ . synIDattr(synID(line("."),col("."),0),"name") . "> lo<" - \ . synIDattr(synIDtrans(synID(line("."),col("."),1)),"name") . ">" - -endfunc - -" get highlight group information and return as dictionary -function! GetHighlight(group) - let output = execute('hi ' . a:group) - let list = split(output, '\s\+') - let dict = {} - for item in list - if match(item, '=') > 0 - let splited = split(item, '=') - let dict[splited[0]] = splited[1] - endif - endfor - return dict -endfunction - -function! InTransparentMode() - let dict = GetHighlight('Normal') - let isGui = &termguicolors - if isGui - if !has_key(dict, 'guibg') - return 1 - endif - elseif !isGui - if !has_key(dict, 'ctermfg') - return 1 - endif - endif - return 0 -endfunction - -function! HasColorscheme(name) - let scheme = a:name - let colors = globpath(&runtimepath, printf('colors/%s.vim', scheme), 1, 1) - if len(colors) > 0 | return 1 | endif - let colors += globpath(&packpath, printf('pack/*/start/*/colors/%s.vim', scheme), 1, 1) - if len(colors) > 0 | return 1 | endif - let colors += globpath(&packpath, printf('pack/*/opt/*/colors/%s.vim', scheme), 1, 1) - if len(colors) > 0 | return 1 | endif - if has('nvim') - let colors = globpath(&runtimepath, printf('colors/%s.lua', scheme), 1, 1) - if len(colors) > 0 | return 1 | endif - let colors += globpath(&packpath, printf('pack/*/start/*/colors/%s.lua', scheme), 1, 1) - if len(colors) > 0 | return 1 | endif - let colors += globpath(&packpath, printf('pack/*/opt/*/colors/%s.lua', scheme), 1, 1) - if len(colors) > 0 | return 1 | endif - endif - return 0 -endfunction - -" delete signal file if exist -function! DeleteSignalFile(name) - if filereadable(g:vim_dir . a:name) - call delete(g:vim_dir . a:name) - endif -endfunction - -" Create signal file if not exist -function! CreateSignalFile(name) - call system("touch " . g:vim_dir . a:name) -endfunction - -function! SignalFileExists(filename) - if filereadable(g:vim_dir . a:filename) - return v:true - endif - return v:false -endfunction - -" Debug related -if g:debug_mode - let g:debug_logs = [] - - function! Debugstats() - let d = {} - let d['filetype'] = &ft - let d['buftype'] = &buftype - let d['winid'] = win_getid() - return d - endfunction -endif - - -" Swap values under cursor according to g:swap_dict -" { -function SwapWord() - let word = expand("") - let l1 = g:swap_dict[0] - let l2 = g:swap_dict[1] - let inx = index(l1, word) - if inx != -1 - let newword = l2[inx] - else - let inx = index(l2, word) - if inx != -1 - let newword = l1[inx] - endif - endif - if inx != -1 - execute "normal ciw" . newword . "\" - endif -endfunction - -" } - -function! GenVimAsciiArt(buffer_str_len) - let buf_str = repeat(' ', a:buffer_str_len) - if has('nvim') - let ascii_art = [ - \ buf_str . ' __ __ ________ ______ __ __ ______ __ __ ', - \ buf_str . '| \ | \| \ / \ | \ | \| \| \ / \', - \ buf_str . '| $$\ | $$| $$$$$$$$| $$$$$$\| $$ | $$ \$$$$$$| $$\ / $$', - \ buf_str . '| $$$\| $$| $$__ | $$ | $$| $$ | $$ | $$ | $$$\ / $$$', - \ buf_str . '| $$$$\ $$| $$ \ | $$ | $$ \$$\ / $$ | $$ | $$$$\ $$$$', - \ buf_str . '| $$\$$ $$| $$$$$ | $$ | $$ \$$\ $$ | $$ | $$\$$ $$ $$', - \ buf_str . '| $$ \$$$$| $$_____ | $$__/ $$ \$$ $$ _| $$_ | $$ \$$$| $$', - \ buf_str . '| $$ \$$$| $$ \ \$$ $$ \$$$ | $$ \| $$ \$ | $$', - \ buf_str . ' \$$ \$$ \$$$$$$$$ \$$$$$$ \$ \$$$$$$ \$$ \$$', - \] - else - let ascii_art = [ - \ buf_str . ' __ __ ______ __ __ ', - \ buf_str . '| \ | \| \| \ / \', - \ buf_str . '| $$ | $$ \$$$$$$| $$\ / $$', - \ buf_str . '| $$ | $$ | $$ | $$$\ / $$$', - \ buf_str . ' \$$\ / $$ | $$ | $$$$\ $$$$', - \ buf_str . ' \$$\ $$ | $$ | $$\$$ $$ $$', - \ buf_str . ' \$$ $$ _| $$_ | $$ \$$$| $$', - \ buf_str . ' \$$$ | $$ \| $$ \$ | $$', - \ buf_str . ' \$ \$$$$$$ \$$ \$$', - \] - endif - return ascii_art -endfunction - -"Remove all trailing whitespace by pressing ws -fun! TrimWhitespace() - let l:save = winsaveview() - keeppatterns %s/\s\+$//e - call winrestview(l:save) -endfun - - -""" AIRLINE EXTENSIONS """ -if HasPlug('vim-airline') - - function! AirlineCocStatus() - if ! exists('*CocAction') - return - endif - " let loading = ["⢿", "⣻", "⣽", "⣾", "⣷", "⣯", "⣟", "⡿"] - let loading = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"] - try - let result = CocAction('services') - catch - return - endtry - let state = '' - let id = '' - for e in result - if e['languageIds'][0] == &ft - let state = e['state'] - let id = e['id'] - endif - endfor - - " messy way to get time in millisecond in vim - let time = float2nr(str2float(reltime()->reltimestr()[4:]) * 1000) - let speed = 800 - let loadidx = time % speed - let msg = 'lsp:' . id - if state == "starting" - let s:coc_lsp_loading = 1 - return msg . " " . loading[loadidx/(speed/10)] . " " - elseif state == "running" - if exists('s:coc_lsp_loading') - unlet s:coc_lsp_loading - endif - return msg . " ✔ " - endif - return '' - endfunction - - function! AirlineBufferNumber() - return len(g:index_to_buffer) - endfunction -endif -""" AIRLINE EXTENSIONS END """ diff --git a/vimreset.sh b/vimreset.sh new file mode 100755 index 0000000..bc2fab7 --- /dev/null +++ b/vimreset.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +rm -rf ~/.vim/.vim* +rm ~/.viminfo diff --git a/windows.tips b/windows.tips deleted file mode 100644 index 159c827..0000000 --- a/windows.tips +++ /dev/null @@ -1,18 +0,0 @@ - -# Windows Tips - -## Install vim - -Probably need to install bulid tool through scoop(like gcc) - -Config powershell as emac style - -put this line into powershell's config file(which is in $profile) -`batch -Set-PSReadLineOption -EditMode Emacs -` - -*you may run into error about execution policy, then you need to set the policy with this command* -` -Set-ExecutionPolicy -Scope CurrentUser -ExecutionPolicy Unrestricted -`