From eb93966e5f3cf1193ca5f14df7fef13c847c0f69 Mon Sep 17 00:00:00 2001 From: Youwen Wu Date: Wed, 24 Apr 2024 13:33:16 -0700 Subject: [PATCH] chore: use prettierrc.toml and format markdown --- .github/workflows/spelling.yml | 40 +++++++---------- .prettierrc | 8 ---- .prettierrc.toml | 7 +++ README.md | 14 ++++-- blog/2024/arch-setup/content.md | 35 ++++++++++----- blog/2024/taylor-series/content.md | 71 ++++++++++++++++++------------ blog/2024/test-post/content.md | 40 +++++++++++------ blog/2024/vim-manifesto/content.md | 70 +++++++++++++++-------------- 8 files changed, 165 insertions(+), 120 deletions(-) delete mode 100644 .prettierrc create mode 100644 .prettierrc.toml diff --git a/.github/workflows/spelling.yml b/.github/workflows/spelling.yml index 9524ef0..b6e65c8 100644 --- a/.github/workflows/spelling.yml +++ b/.github/workflows/spelling.yml @@ -103,24 +103,18 @@ jobs: report-timing: 1 warnings: bad-regex,binary-file,deprecated-feature,large-file,limited-references,no-newline-at-eof,noisy-file,non-alpha-in-dictionary,token-is-substring,unexpected-line-ending,whitespace-in-dictionary,minified-file,unsupported-configuration,no-files-to-check experimental_apply_changes_via_bot: 1 - use_sarif: ${{ (!github.event.pull_request || (github.event.pull_request.head.repo.full_name == github.repository)) && 1 }} + use_sarif: + ${{ (!github.event.pull_request || (github.event.pull_request.head.repo.full_name == + github.repository)) && 1 }} extra_dictionary_limit: 20 - extra_dictionaries: cspell:software-terms/dict/softwareTerms.txt - cspell:html/dict/html.txt - cspell:svelte/src/svelte.txt - cspell:bash/src/bash-words.txt - cspell:lorem-ipsum/dictionary.txt - cspell:typescript/dict/typescript.txt - cspell:npm/dict/npm.txt - cspell:latex/dict/latex.txt - cspell:node/dict/node.txt - cspell:php/dict/php.txt - cspell:golang/dict/go.txt - cspell:filetypes/filetypes.txt - cspell:fullstack/dict/fullstack.txt - cspell:python/src/python/python-lib.txt - cspell:aws/aws.txt - cspell:css/dict/css.txt + extra_dictionaries: + cspell:software-terms/dict/softwareTerms.txt cspell:html/dict/html.txt + cspell:svelte/src/svelte.txt cspell:bash/src/bash-words.txt + cspell:lorem-ipsum/dictionary.txt cspell:typescript/dict/typescript.txt + cspell:npm/dict/npm.txt cspell:latex/dict/latex.txt cspell:node/dict/node.txt + cspell:php/dict/php.txt cspell:golang/dict/go.txt cspell:filetypes/filetypes.txt + cspell:fullstack/dict/fullstack.txt cspell:python/src/python/python-lib.txt + cspell:aws/aws.txt cspell:css/dict/css.txt comment-push: name: Report (Push) @@ -146,7 +140,9 @@ jobs: permissions: contents: read pull-requests: write - if: (success() || failure()) && needs.spelling.outputs.followup && contains(github.event_name, 'pull_request') + if: + (success() || failure()) && needs.spelling.outputs.followup && contains(github.event_name, + 'pull_request') steps: - name: comment uses: check-spelling/check-spelling@main @@ -163,11 +159,9 @@ jobs: pull-requests: write actions: read runs-on: ubuntu-latest - if: ${{ - github.event_name == 'issue_comment' && - github.event.issue.pull_request && - contains(github.event.comment.body, '@check-spelling-bot apply') - }} + if: + ${{ github.event_name == 'issue_comment' && github.event.issue.pull_request && + contains(github.event.comment.body, '@check-spelling-bot apply') }} concurrency: group: spelling-update-${{ github.event.issue.number }} cancel-in-progress: false diff --git a/.prettierrc b/.prettierrc deleted file mode 100644 index 9573023..0000000 --- a/.prettierrc +++ /dev/null @@ -1,8 +0,0 @@ -{ - "useTabs": true, - "singleQuote": true, - "trailingComma": "none", - "printWidth": 100, - "plugins": ["prettier-plugin-svelte"], - "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }] -} diff --git a/.prettierrc.toml b/.prettierrc.toml new file mode 100644 index 0000000..d820ec0 --- /dev/null +++ b/.prettierrc.toml @@ -0,0 +1,7 @@ +overrides = [{ "files" = "*.svelte", "options" = { "parser" = "svelte" } }] +useTabs = true +singleQuote = true +trailingComma = "none" +printWidth = 100 +proseWrap = "always" +plugins = ["prettier-plugin-svelte"] diff --git a/README.md b/README.md index 9632384..4f37ab6 100644 --- a/README.md +++ b/README.md @@ -2,7 +2,9 @@ [![pnpm](https://img.shields.io/badge/maintained%20with-pnpm-cc00ff.svg?style=for-the-badge&logo=pnpm)](https://pnpm.io/) -My personal website and its associated blog. Written in [SvelteKit](https://kit.svelte.dev) using [TailwindCSS](https://tailwindcss.com/) and components from [shadcn-svelte](https://www.shadcn-svelte.com/). +My personal website and its associated blog. Written in [SvelteKit](https://kit.svelte.dev) using +[TailwindCSS](https://tailwindcss.com/) and components from +[shadcn-svelte](https://www.shadcn-svelte.com/). ## Running locally @@ -21,8 +23,14 @@ pnpm preview ## Adding posts -To add posts, create a directory in `/blog`. The top level subdirectories should be the year, but there's no hard rules on what the rest of the subdirectories will be. The blog will build itself based on the file structure in `/blog/[year]/**`, and posts will be located wherever there exists `content.md` + `post.toml` files. Check `post.schema.json` for the specification of the `post.toml` format. Finally, you can add a `.blogignore` file to any directory in `/blog` to exclude it from static rendering (useful for work-in-progress blog posts). +To add posts, create a directory in `/blog`. The top level subdirectories should be the year, but +there's no hard rules on what the rest of the subdirectories will be. The blog will build itself +based on the file structure in `/blog/[year]/**`, and posts will be located wherever there exists +`content.md` + `post.toml` files. Check `post.schema.json` for the specification of the `post.toml` +format. Finally, you can add a `.blogignore` file to any directory in `/blog` to exclude it from +static rendering (useful for work-in-progress blog posts). ## License -The website's source code is licensed under the [MIT License](LICENSE). The contents of my blog are licensed under [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/). +The website's source code is licensed under the [MIT License](LICENSE). The contents of my blog are +licensed under [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/). diff --git a/blog/2024/arch-setup/content.md b/blog/2024/arch-setup/content.md index 7a96447..33c6fcd 100644 --- a/blog/2024/arch-setup/content.md +++ b/blog/2024/arch-setup/content.md @@ -1,21 +1,32 @@ ## Introduction -Recently, I made the switch from Windows 11 to Arch Linux. I can confirm -that Arch does live up to its meme reputation as an OS that takes hours -of configuration to get working. +Recently, I made the switch from Windows 11 to Arch Linux. I can confirm that Arch does live up to +its meme reputation as an OS that takes hours of configuration to get working. -I'm making a (non-exhaustive) list of the most important tweaks and setup I had to go through to get everything running smoothly on my system. This is partially intended for anyone who's running into the same issues, and partially for my own reference in case I have to go through this again. +I'm making a (non-exhaustive) list of the most important tweaks and setup I had to go through to get +everything running smoothly on my system. This is partially intended for anyone who's running into +the same issues, and partially for my own reference in case I have to go through this again. -I'm running KDE Plasma 6 with the Layan rices from XeroLinux. I make heavy use of the XeroLinux utility script to get everything set up with sane defaults easily. +I'm running KDE Plasma 6 with the Layan rices from XeroLinux. I make heavy use of the XeroLinux +utility script to get everything set up with sane defaults easily. Here's the general gist of the main setup steps: -1. Follow the Arch Wiki's installation guide, until you set up GRUB and boot into the tty. Create a user for yourself, and add yourself to the `sudoers` list with `visudo`. -2. Install `paru` and install `plasma`. Then, run the XeroLinux script. Install all of the recommended tweaks and KDE Plasma rices/addons, EXCEPT the GPU drivers (we'll do those later). -3. Install `sddm` and enable its service with `systemctl`. Then, `sudo reboot`. You should restart into KDE Plasma. -4. At the bottom left, make sure you're using X11 and not Wayland. Wayland is completely broken at the time of writing on Nvidia without some configuration. Log in. +1. Follow the Arch Wiki's installation guide, until you set up GRUB and boot into the tty. Create a + user for yourself, and add yourself to the `sudoers` list with `visudo`. +2. Install `paru` and install `plasma`. Then, run the XeroLinux script. Install all of the + recommended tweaks and KDE Plasma rices/addons, EXCEPT the GPU drivers (we'll do those later). +3. Install `sddm` and enable its service with `systemctl`. Then, `sudo reboot`. You should restart + into KDE Plasma. +4. At the bottom left, make sure you're using X11 and not Wayland. Wayland is completely broken at + the time of writing on Nvidia without some configuration. Log in. 5. Once loaded in, go to the XeroLinux GPU drivers installation guide. Run these commands -6. If you were successful in setting up the GPU drivers, you should now be able to enter Plasma with Wayland. For me, performance is much better and smoother, and I'm able to set up the display configurations that I want without weird `xrander` hacks. However, at this point, Wayland is still super problematic, and even more setup will need to be done. -7. Set the environment variable to tell all electron apps to use native Wayland instead of xwayland. This will stop weird behavior in discord, vscode, obsidian. etc. -8. Enable the experimental Nvidia kernel flag to preserve the entire video memory on suspend. This will allow you to use suspend properly and not break everything. +6. If you were successful in setting up the GPU drivers, you should now be able to enter Plasma with + Wayland. For me, performance is much better and smoother, and I'm able to set up the display + configurations that I want without weird `xrander` hacks. However, at this point, Wayland is + still super problematic, and even more setup will need to be done. +7. Set the environment variable to tell all electron apps to use native Wayland instead of xwayland. + This will stop weird behavior in discord, vscode, obsidian. etc. +8. Enable the experimental Nvidia kernel flag to preserve the entire video memory on suspend. This + will allow you to use suspend properly and not break everything. diff --git a/blog/2024/taylor-series/content.md b/blog/2024/taylor-series/content.md index cf56305..04541bf 100644 --- a/blog/2024/taylor-series/content.md +++ b/blog/2024/taylor-series/content.md @@ -1,27 +1,41 @@ ## Introduction -The following content is a test post for the blog's markdown and $\KaTeX$ rendering capabilities. There's a few errors, and wikilinks aren't supported. This file was copy pasted directly out of my `obsidian.md` notebook, so it contains some weird formatting. +The following content is a test post for the blog's markdown and $\KaTeX$ rendering capabilities. +There's a few errors, and wikilinks aren't supported. This file was copy pasted directly out of my +`obsidian.md` notebook, so it contains some weird formatting.
-The methods in [[9.8 Power Series]] and [[9.9 Representation of (Rational) Functions by Power Series]] allow us to find power series for rational functions, $\ln$, and $\arctan$. To get power series for other elementary functions, we need a more general method. +The methods in [[9.8 Power Series]] and +[[9.9 Representation of (Rational) Functions by Power Series]] allow us to find power series for +rational functions, $\ln$, and $\arctan$. To get power series for other elementary functions, we +need a more general method. -We can approximate some non-polynomial functions by constructing a polynomial with the _same derivatives_ as the function. This is called a _Taylor Polynomial_. +We can approximate some non-polynomial functions by constructing a polynomial with the _same +derivatives_ as the function. This is called a _Taylor Polynomial_. -> [!NOTE] -> In general, if $c \neq 0$, it's called a Taylor Polynomial. If $c = 0$, then it's a Maclaurin Polynomial. +> [!NOTE] In general, if $c \neq 0$, it's called a Taylor Polynomial. If $c = 0$, then it's a +> Maclaurin Polynomial. -> [!CAUTION] -> test lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +> [!CAUTION] test lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor +> incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam quis nostrud exercitation +> ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in +> voluptate velit esse cillum dolore eu fugiat nulla pariatur. -> [!WARNING] -> test lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +> [!WARNING] test lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor +> incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam quis nostrud exercitation +> ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in +> voluptate velit esse cillum dolore eu fugiat nulla pariatur. -> [!TIP] -> test lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +> [!TIP] test lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor +> incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam quis nostrud exercitation +> ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in +> voluptate velit esse cillum dolore eu fugiat nulla pariatur. -> [!IMPORTANT] -> test lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. +> [!IMPORTANT] test lorem ipsum dolor sit amet consectetur adipiscing elit sed do eiusmod tempor +> incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam quis nostrud exercitation +> ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in +> voluptate velit esse cillum dolore eu fugiat nulla pariatur. Consider $f(x) = e^x$. Let's find the best cubic approximation $P_3(x)$ for $f(x)$ at $c=0$. @@ -63,8 +77,7 @@ You can confirm that this polynomial has the same first, second, and third deriv Taking repeated derivatives like this leads to a common pattern in all Taylor polynomials. -> [!NOTE] -> We use the notation $P_n(x)$ to denote the $n^{th}$ Taylor polynomial +> [!NOTE] We use the notation $P_n(x)$ to denote the $n^{th}$ Taylor polynomial Taylor polynomials take the form: @@ -72,7 +85,8 @@ $$ P_n(x) = a_0 + a_1 (x-c) + a_2(x-c)^2 + a_3 (x-c)^3 + \dots + a_n(x-c)^n $$ -where $a_n$ is the coefficient of the $n^{th}$ term (indexed from 0). It turns out that these coefficients are actually common across Taylor polynomials. +where $a_n$ is the coefficient of the $n^{th}$ term (indexed from 0). It turns out that these +coefficients are actually common across Taylor polynomials. $$ P_n(c) = a_0 = f(c) @@ -100,7 +114,9 @@ $$ ## Tying up loose ends -We've seen Taylor and Maclaurin polynomials. We will eventually extend them to [[9.10 Taylor and Maclaurin Series|Maclaurin and Taylor series]]. Before this is mathematically valid (at least, valid enough), we need to do some stuff first. +We've seen Taylor and Maclaurin polynomials. We will eventually extend them to +[[9.10 Taylor and Maclaurin Series|Maclaurin and Taylor series]]. Before this is mathematically +valid (at least, valid enough), we need to do some stuff first. We can use Maclaurin and Taylor polynomials (or series) to estimate the value of functions by hand. @@ -116,8 +132,7 @@ $$ z \in [c,\,x] $$ -> [!TIP] -> This is a fancy way of saying that $z$ is between $c$ and $x$. +> [!TIP] This is a fancy way of saying that $z$ is between $c$ and $x$. $$ \text{Error} = \left|R_n(x)\right| @@ -127,28 +142,28 @@ $$ #### Applying to $e^x$ -How many terms of the Maclaurin Polynomial for $f(x) = e^x$ do we need to guarantee that our estimate for $f(1) = e$ is within $\displaystyle\frac{1}{1000000}$? -The error is +How many terms of the Maclaurin Polynomial for $f(x) = e^x$ do we need to guarantee that our +estimate for $f(1) = e$ is within $\displaystyle\frac{1}{1000000}$? The error is $$ |R_n(1)| = \frac{|f^{(n+1)}(z)|}{(n+1)!}\,\cancel{|1-0|^{n+1}} $$ -for some $z$ between $c=0$ and $x=1$ -So we want an $n$ such that +for some $z$ between $c=0$ and $x=1$ So we want an $n$ such that $$ \frac{|e^z|}{(n+1)!} \le \frac{1}{1000000} $$ -The worst case scenario is $z=1$. -If $\displaystyle\frac{e}{(n+1)!} \le \frac{1}{1000000}$, we're all set. +The worst case scenario is $z=1$. If $\displaystyle\frac{e}{(n+1)!} \le \frac{1}{1000000}$, we're +all set. ![Test image](https://upload.wikimedia.org/wikipedia/commons/thumb/6/66/SMPTE_Color_Bars.svg/1200px-SMPTE_Color_Bars.svg.png) -Assume that $e \le 3$, which implies that if $\displaystyle\frac{3}{(n+1)!} \le \frac{1}{1000000}$, we're all set. -After trying terms, we find that $n=9$ works. -So $P_9(1) = 1 + 1 + \frac{1}{2!} + \frac{1}{3!} + \dots + \frac{1}{9!}$ is within $\frac{1}{1000000}$ of $e$. +Assume that $e \le 3$, which implies that if $\displaystyle\frac{3}{(n+1)!} \le \frac{1}{1000000}$, +we're all set. After trying terms, we find that $n=9$ works. So +$P_9(1) = 1 + 1 + \frac{1}{2!} + \frac{1}{3!} + \dots + \frac{1}{9!}$ is within $\frac{1}{1000000}$ +of $e$. ```rust let mut var: u32 = 10030; diff --git a/blog/2024/test-post/content.md b/blog/2024/test-post/content.md index 2234dbe..63c8678 100644 --- a/blog/2024/test-post/content.md +++ b/blog/2024/test-post/content.md @@ -1,12 +1,12 @@ ## Introduction -Welcome! This blog is powered by a custom static site generator I made using SvelteKit. I'm working on upgrades ([see: lorelei](https://github.com/couscousdude/lorelei)), but in the meantime, check this out: +Welcome! This blog is powered by a custom static site generator I made using SvelteKit. I'm working +on upgrades ([see: lorelei](https://github.com/couscousdude/lorelei)), but in the meantime, check +this out: -> [!NOTE] -> GitHub-style notifications! +> [!NOTE] GitHub-style notifications! -> [!TIP] -> The full Commonmark spec is supported, and it's extended by the GFM spec +> [!TIP] The full Commonmark spec is supported, and it's extended by the GFM spec ## Tables! @@ -17,7 +17,8 @@ Welcome! This blog is powered by a custom static site generator I made using Sve ## More stuff! -Notice the table of contents generated on the right (on desktop) or under the navbar (on mobile). It's auto-populated at build time from the content on the page. +Notice the table of contents generated on the right (on desktop) or under the navbar (on mobile). +It's auto-populated at build time from the content on the page. ### Math @@ -55,20 +56,25 @@ caption = "This is the first post!" Code highlighting is also supported, via `highlight.js`. -The `unified` plugin ecosystem is used to transform markdown into the HTML in this document. Check out the parser [here](https://github.com/couscousdude/coredump/blob/main/src/lib/utils/parseMarkdown.ts). It handles all the parsing server-side at build time, so these posts are a collection of mostly static HTML. The formatting is done mostly with a [custom stylesheet](https://github.com/couscousdude/coredump/blob/main/src/lib/styles/markdown.pcss). +The `unified` plugin ecosystem is used to transform markdown into the HTML in this document. Check +out the parser +[here](https://github.com/couscousdude/coredump/blob/main/src/lib/utils/parseMarkdown.ts). It +handles all the parsing server-side at build time, so these posts are a collection of mostly static +HTML. The formatting is done mostly with a +[custom stylesheet](https://github.com/couscousdude/coredump/blob/main/src/lib/styles/markdown.pcss). ## Raw source code of this post ````markdown ## Introduction -Welcome! This blog is powered by a custom static site generator I made using SvelteKit. I'm working on upgrades ([see: lorelei](https://github.com/couscousdude/lorelei)), but in the meantime, check this out: +Welcome! This blog is powered by a custom static site generator I made using SvelteKit. I'm working +on upgrades ([see: lorelei](https://github.com/couscousdude/lorelei)), but in the meantime, check +this out: -> [!NOTE] -> GitHub-style notifications! +> [!NOTE] GitHub-style notifications! -> [!TIP] -> The full Commonmark spec is supported, and it's extended by the GFM spec +> [!TIP] The full Commonmark spec is supported, and it's extended by the GFM spec ## Tables! @@ -79,7 +85,8 @@ Welcome! This blog is powered by a custom static site generator I made using Sve ## More stuff! -Notice the table of contents generated on the right (on desktop) or under the navbar (on mobile). It's auto-populated at build time from the content on the page. +Notice the table of contents generated on the right (on desktop) or under the navbar (on mobile). +It's auto-populated at build time from the content on the page. ### Math @@ -118,7 +125,12 @@ caption = "This is the first post!" Code highlighting is also supported, via `highlight.js`. -The `unified` plugin ecosystem is used to transform markdown into the HTML in this document. Check out the parser [here](https://github.com/couscousdude/coredump/blob/main/src/lib/utils/parseMarkdown.ts). It handles all the parsing server-side at build time, so these posts are a collection of mostly static HTML. The formatting is done mostly with a [custom stylesheet](https://github.com/couscousdude/coredump/blob/main/src/lib/styles/markdown.pcss). +The `unified` plugin ecosystem is used to transform markdown into the HTML in this document. Check +out the parser +[here](https://github.com/couscousdude/coredump/blob/main/src/lib/utils/parseMarkdown.ts). It +handles all the parsing server-side at build time, so these posts are a collection of mostly static +HTML. The formatting is done mostly with a +[custom stylesheet](https://github.com/couscousdude/coredump/blob/main/src/lib/styles/markdown.pcss). ``` diff --git a/blog/2024/vim-manifesto/content.md b/blog/2024/vim-manifesto/content.md index be3934b..34d1f19 100644 --- a/blog/2024/vim-manifesto/content.md +++ b/blog/2024/vim-manifesto/content.md @@ -1,12 +1,14 @@ ## Introduction -The modal editor's fall into obscurity is truly one of the greatest losses in the history of computing. +The modal editor's fall into obscurity is truly one of the greatest losses in the history of +computing. -There's no denying that point-and-click is _easy_, and sure, it's enough for the majority of people using -their computer as a minor tool. +There's no denying that point-and-click is _easy_, and sure, it's enough for the majority of people +using their computer as a minor tool. -But for those who use a text editor as their natural habitat, there's no reason why text editors should stop at -pointing the mouse where you want to go and typing. This leads to the typical editing session consisting of: +But for those who use a text editor as their natural habitat, there's no reason why text editors +should stop at pointing the mouse where you want to go and typing. This leads to the typical editing +session consisting of: - Scroll around with mouse - Locate the location where you want to add text @@ -15,38 +17,42 @@ pointing the mouse where you want to go and typing. This leads to the typical ed Then, switch back to your mouse and repeat. -Of course, there are ways in which users seek to streamline this process. Almost everyone who edits text -daily knows at least a few keyboard shortcuts to quickly jump around words and in between lines to move to nearby -points of interest quickly without switching back to the mouse. Other more dedicated power users might learn a slew of -modifier-key based commands to quickly navigate around, removing the need for a mouse entirely when editing within -a file. +Of course, there are ways in which users seek to streamline this process. Almost everyone who edits +text daily knows at least a few keyboard shortcuts to quickly jump around words and in between lines +to move to nearby points of interest quickly without switching back to the mouse. Other more +dedicated power users might learn a slew of modifier-key based commands to quickly navigate around, +removing the need for a mouse entirely when editing within a file. -All of these, however, are halfway solutions. Namely, they generally utilize a modifier based approach. Hold `ctrl` -(or `option`, on macOS) and use the arrow keys to navigate quickly. Hold `ctrl` and hit `delete` to delete entire words at once. -Hold `shift` to highlight text. `ctrl + c` copies, `ctrl + v` pastes, `ctrl + x` cuts. You get the idea. +All of these, however, are halfway solutions. Namely, they generally utilize a modifier based +approach. Hold `ctrl` (or `option`, on macOS) and use the arrow keys to navigate quickly. Hold +`ctrl` and hit `delete` to delete entire words at once. Hold `shift` to highlight text. `ctrl + c` +copies, `ctrl + v` pastes, `ctrl + x` cuts. You get the idea. -A pseudo- medical condition has even been coined for this reliance on modifier keys: the dreaded Emacs pinky, where -users of emacs, which relies heavily on `ctrl`, `meta`, and other modifier based shortcuts, experience RSI due to their -frequent usage of their pinky to stretch down to those keys. +A pseudo- medical condition has even been coined for this reliance on modifier keys: the dreaded +Emacs pinky, where users of emacs, which relies heavily on `ctrl`, `meta`, and other modifier based +shortcuts, experience RSI due to their frequent usage of their pinky to stretch down to those keys. -This method of designing and organizing the text editor is wrong. _Moving around text_ (and files) is just as, if not -more prevalent than inserting text itself. So why treat navigation as an afterthought? Why should you _edit by default_, -and hold a modifier key to temporarily enable a different control scheme which handles locomotion? This is where the -genius of the modal editor comes in. +This method of designing and organizing the text editor is wrong. _Moving around text_ (and files) +is just as, if not more prevalent than inserting text itself. So why treat navigation as an +afterthought? Why should you _edit by default_, and hold a modifier key to temporarily enable a +different control scheme which handles locomotion? This is where the genius of the modal editor +comes in. ## Vim -In Vim, the editor itself is split into three main "modes", hence the classification of "modal". Instead of treating -navigation as an afterthought, Vim opens in its "normal mode", which provides the user with many keys to move around their -text file: `hjkl` as arrow keys, `b`, `e`, and `w`, to navigate around words, `0`, `$`, and `_` to jump around lines, `{`, `}`, -`z`, and more, for quickly repositioning your cursor and screen vertically. Notice how all of these keys are easily accessible -from the home row. Just as importantly, notice how there's no need for you to hold any modifiers to access these actions. -These keys don't input text in normal mode; they simply handle navigation. Many point-and-click acolytes believe this to be -a failure. "Why wouldn't you want your editor to _edit_ by default?" Of course, this is not a failure, but one of its -greatest strengths. How many times do you open a file and immediately need to start editing? Almost always, you need to first -navigate to a specific location, usually move or change some text, and then begin editing. In Vim, this is streamlined by -default. You can navigate the entire file using just commands found near the home row, without needing to use a mouse or -hit complicated chords. Instead of treating navigation as an afterthought for power-users, it treats it as a primary -feature of the editor itself. +In Vim, the editor itself is split into three main "modes", hence the classification of "modal". +Instead of treating navigation as an afterthought, Vim opens in its "normal mode", which provides +the user with many keys to move around their text file: `hjkl` as arrow keys, `b`, `e`, and `w`, to +navigate around words, `0`, `$`, and `_` to jump around lines, `{`, `}`, `z`, and more, for quickly +repositioning your cursor and screen vertically. Notice how all of these keys are easily accessible +from the home row. Just as importantly, notice how there's no need for you to hold any modifiers to +access these actions. These keys don't input text in normal mode; they simply handle navigation. +Many point-and-click acolytes believe this to be a failure. "Why wouldn't you want your editor to +_edit_ by default?" Of course, this is not a failure, but one of its greatest strengths. How many +times do you open a file and immediately need to start editing? Almost always, you need to first +navigate to a specific location, usually move or change some text, and then begin editing. In Vim, +this is streamlined by default. You can navigate the entire file using just commands found near the +home row, without needing to use a mouse or hit complicated chords. Instead of treating navigation +as an afterthought for power-users, it treats it as a primary feature of the editor itself. Written on Neovim.