diff --git a/041a1acc.html b/041a1acc.html deleted file mode 100644 index b9d456e..0000000 --- a/041a1acc.html +++ /dev/null @@ -1 +0,0 @@ -a self-hosted git stack - zettel.thermokar.st
\ No newline at end of file diff --git a/19172b64.html b/19172b64.html deleted file mode 100644 index f288971..0000000 --- a/19172b64.html +++ /dev/null @@ -1,19 +0,0 @@ -specifying a range when running a ! shell command filters - zettel.thermokar.st

specifying a range when running a ! shell command filters

Specifying a range when running a ! shell command filters the range through the specified shell command by piping the range’s content into the shell command via stdin and replacing the range with the shell command’s stdout.

Running

:1,10!sort -r

on

2
-3
-7
-1
-9
-4
-0
-8
-5
-6

results in:

9
-8
-7
-6
-5
-4
-3
-2
-1
-0
\ No newline at end of file diff --git a/349ceffd.html b/349ceffd.html deleted file mode 100644 index 3e4c391..0000000 --- a/349ceffd.html +++ /dev/null @@ -1 +0,0 @@ -mark basics - zettel.thermokar.st

mark basics

m{a-zA-Z}: set a “bookmark” at a cursor position.

'{mark}: jumps the cursor to first non-whitespace character on the line with.

`{mark}: jump the cursor to the exact mark position.

Uppercase marks are global, and by default are persisted across sessions.

\ No newline at end of file diff --git a/38003bd5.html b/38003bd5.html deleted file mode 100644 index 6bfaecd..0000000 --- a/38003bd5.html +++ /dev/null @@ -1 +0,0 @@ -search is a motion - zettel.thermokar.st

search is a motion

Don’t forget, search is a motion, and can be combined with other actions, like d (delete): d/foo<CR>.

\ No newline at end of file diff --git a/56653cb1.html b/56653cb1.html deleted file mode 100644 index 348ce85..0000000 --- a/56653cb1.html +++ /dev/null @@ -1 +0,0 @@ -the expression register - zettel.thermokar.st

the expression register

The expression register (=) can be used to evaluate expressions, like 2+3. If this register is used while in Insert mode (<C-r>=), the results of the expression will be inserted after the expression is evaluated.

\ No newline at end of file diff --git a/6d0a076e.html b/6d0a076e.html deleted file mode 100644 index 8637b23..0000000 --- a/6d0a076e.html +++ /dev/null @@ -1 +0,0 @@ -display lines - zettel.thermokar.st

display lines

Interacting with display lines (vs real lines) is easier when you prefix motion commands with a g.

\ No newline at end of file diff --git a/72e6c820.html b/72e6c820.html deleted file mode 100644 index 114d489..0000000 --- a/72e6c820.html +++ /dev/null @@ -1,10 +0,0 @@ -check non-trivial gitignore patterns using git check-ignore - zettel.thermokar.st

check non-trivial gitignore patterns using git check-ignore

today i ran into an issue where i tried creating a new bin/ dir in a git repo, and trying to add the files within to a new commit, but was greeted by:

$ git add bin/README.md
-
-The following paths are ignored by one of your .gitignore files:
-bin
-hint: Use -f if you really want to add them.
-hint: Turn this message off by running
-hint: "git config advice.addIgnoredFile false"

confused, i ran a simple grep on the project’s .gitignore:

$ grep bin .gitignore
-

which yielded nothing. i was pretty sure i didn’t have that pattern set in my global gitignore, either.

a quick internet search turned up a git util that is new to me:

https://git-scm.com/docs/git-check-ignore

using this command, i was able to trace the exact line responsible:

git check-ignore -v bin
-
-.gitignore:123:[Bb]in   bin

ohhhhh, oops. well, that makes sense. neat! this could’ve been solved with a more sophisticated grep pattern, but who has time for that?

\ No newline at end of file diff --git a/73dcbcc7.html b/73dcbcc7.html deleted file mode 100644 index 269353c..0000000 --- a/73dcbcc7.html +++ /dev/null @@ -1 +0,0 @@ -<C-d> in command mode presents an auto-completion list - zettel.thermokar.st

<C-d> in command mode presents an auto-completion list

\ No newline at end of file diff --git a/82ded935.html b/82ded935.html deleted file mode 100644 index ffcb15d..0000000 --- a/82ded935.html +++ /dev/null @@ -1,7 +0,0 @@ -command mode ranges based on patterns - zettel.thermokar.st

command mode ranges based on patterns

In command mode you can specify a range of lines to operate on, based on patterns, rather than absolute (or relative line numbers). This can be a great way to isolate changes without looking up the individual line numbers.

:/start/,/end/cmd<CR>

On a Python file, this might look like:

def main():
-    foo = do_something()
-    bar = do_something_else(foo)
-    return bar
:/def main/,/return/s/foo/baz/g<CR>

results in:

def main():
-    baz = do_something()
-    bar = do_something_else(baz)
-    return bar
\ No newline at end of file diff --git a/9227847e.html b/9227847e.html deleted file mode 100644 index 41183b5..0000000 --- a/9227847e.html +++ /dev/null @@ -1 +0,0 @@ -sourdough pretzel rolls - zettel.thermokar.st

sourdough pretzel rolls

ingredients and supplies

dough

  • 2/3c + 3T warm water
  • 1T yeast
  • 1c sourdough starter (based on 1:1 water-to-flour ratio)
  • 4T olive oil
  • 2t sugar
  • 2t salt
  • 4c + 3T flour

poaching solution

  • 8c to 10c boiling water
  • 1/4c baking soda

glaze and topping

  • 1 egg white
  • 1T cold water
  • pretzel salt to taste

tools

  • stand mixer
  • baking sheets
  • parchment paper
  • large wide pot for poaching
  • tongs
  • slotted spoon
  • brush
  • razor blade or sharp knife

instructions

dough

  • in stand mixer:
    • combine water and yeast
    • let sit for 5 to 10 minutes
    • to the foam add:
      • sourdough starter
      • olive oil
      • sugar
      • salt
      • flour
    • mix until smooth, dough will likely be slightly dry
  • cover and let rise in a warm place until doubled in volume (1-2 hours typically)

shaping

  • line baking sheets with parchment paper
  • divide dough in 18 equal portions
  • form each portion into a tight ball by roughly shaping, then pulling dough down to the underside of the ball repeatedly
    • the dry surface should form a taught skin
    • make sure the bottom is crimped and sealed with no creases
  • cover and let rest ~30 minutes

poaching

  • while resting, boiling water for poaching solution, add to poaching pot
  • wait to add the baking soda until you’re ready to poach
  • before poaching, preheat the oven to 425F (this can take a while)
  • poach the rolls
    • put a few rolls (~4) into the solution, right-side up
    • poach bottoms for 30 seconds (this helps seal any remaining creases)
    • using tongs, flip each roll right-side down
    • poach tops for 30 seconds
    • using a slotted spoon, remove each roll and place back on baking sheet

baking

  • prepare the glaze
    • mix egg white and cold water
  • brush glaze onto the rolls
    • apply liberally
    • coat the sides, too
  • slice a deep x into the top of each roll
  • sprinkle with pretzel salt to taste
  • place baking sheets in center of preheated oven
  • bake for 15-20 minutes, until golden brown
  • allow to cool

notes

  • the instructions are meant to be followed sequentially
  • c: cup, T: tablespoon, t: teaspoon
  • block out a bit of time for this
  • this recipe is easily doubled, no adjustments necessary, just *2
  • be prepared to make a mess when poaching
  • they will be pretty ugly post-poaching
  • you can’t really slice too deep
  • the order matters - don’t slice and then glaze - the glaze will likely seal the top shut
  • start baking as soon as you slice
\ No newline at end of file diff --git a/92598822.html b/92598822.html deleted file mode 100644 index 1726c54..0000000 --- a/92598822.html +++ /dev/null @@ -1 +0,0 @@ -self-hosted - zettel.thermokar.st
\ No newline at end of file diff --git a/96fc3093.html b/96fc3093.html deleted file mode 100644 index b25bbb8..0000000 --- a/96fc3093.html +++ /dev/null @@ -1,23 +0,0 @@ -:read allows piping shell stdout into a buffer - zettel.thermokar.st

:read allows piping shell stdout into a buffer

:read !ls<CR>

for example:

041a1acc.md
-56653cb1.md
-73dcbcc7.md
-82ded935.md
-9227847e.md
-92598822.md
-96fc3093.md
-9b74f625.md
-9db45ab6.md
-aab45963.md
-acc60422.md
-b364352b.md
-b926d9bd.md
-c4e96daf.md
-d2e178e0.md
-da69e0f5.md
-dc879f80.md
-ec21e3f5.md
-ec672cb5.md
-fa6a31b4.md
-index.md
-neuron.dhall
-static
\ No newline at end of file diff --git a/9b74f625.html b/9b74f625.html deleted file mode 100644 index 1851695..0000000 --- a/9b74f625.html +++ /dev/null @@ -1 +0,0 @@ -software - zettel.thermokar.st
\ No newline at end of file diff --git a/9db45ab6.html b/9db45ab6.html deleted file mode 100644 index d6a1da1..0000000 --- a/9db45ab6.html +++ /dev/null @@ -1 +0,0 @@ -focus requires a rigorous contract - zettel.thermokar.st

focus requires a rigorous contract

Balancing many disparate tasks is good for my morale (“Wow! If I get bored with this one thing, I can just do something else!”), but feeling “behind” is most decidedly not good for my morale. Timeblocking and scheduling are great, but they require discipline. I like to think that I am effectively entering into a short-term contract with myself. If the terms aren’t clear, the chances of failure go up (significantly). Interestingly, I think this scenario represents a conflict of interest: I am basically the party responsible for monitoring that contract, as well as the one actually executing the work.

Besides having a clear plan (a statement of work) I think the next biggest concern involves distractions. In my experience, you can’t get rid of distractions, but you can be judicious about what distractions you choose to entertain. That gets to the same end-goal of choosing when to focus on distractions, but puts a different emphasis on the problem.

The “hard” part (to me) is that developing the intuition of what to do (and when) is much easier said than done. Maybe because it is a constantly moving target?

\ No newline at end of file diff --git a/aab45963.html b/aab45963.html deleted file mode 100644 index 8d05563..0000000 --- a/aab45963.html +++ /dev/null @@ -1 +0,0 @@ -the matrix ecosystem - zettel.thermokar.st

the matrix ecosystem

matrix protocol

  • open spec: decentralised conversation store
  • end-to-end encryption
  • federated: a lot like email
  • you sign up for an acct on a homeserver (could be public, private, etc)
  • just like email, that acct can communicate with any other acct, regardless of their homeserver
  • bridges: glues multiple non-matrix services together: facebook chat, sms, etc

setting up a homeserver

https://github.com/spantaleev/matrix-docker-ansible-deploy

  • subdomain config seems to be pretty hard-coded
\ No newline at end of file diff --git a/acc60422.html b/acc60422.html deleted file mode 100644 index 8b7fc0f..0000000 --- a/acc60422.html +++ /dev/null @@ -1 +0,0 @@ -practices - zettel.thermokar.st
\ No newline at end of file diff --git a/b364352b.html b/b364352b.html deleted file mode 100644 index fd64d25..0000000 --- a/b364352b.html +++ /dev/null @@ -1 +0,0 @@ -use c instead of deleting and inserting in visual mode - zettel.thermokar.st

use c instead of deleting and inserting in visual mode

Using the c change action in visual mode is very convenient! For some reason I often neglect that action when operating in visual mode, instead opting for two actions: delete and insert. This seems like a habit worth breaking!

\ No newline at end of file diff --git a/b926d9bd.html b/b926d9bd.html deleted file mode 100644 index 3644a9e..0000000 --- a/b926d9bd.html +++ /dev/null @@ -1 +0,0 @@ -vim - zettel.thermokar.st
\ No newline at end of file diff --git a/c4e96daf.html b/c4e96daf.html deleted file mode 100644 index 69dd310..0000000 --- a/c4e96daf.html +++ /dev/null @@ -1,6 +0,0 @@ -adding a new user account on a linux system - zettel.thermokar.st

adding a new user account on a linux system

adduser $USER
-usermod -aG sudo $USER
-# if account requires password-less elevation:
-sudo visudo  # add an entry like: $USER ALL=(ALL) NOPASSWD:ALL
-# confirm that the account works as expected
-su - $USER
\ No newline at end of file diff --git a/c6a6cf84.html b/c6a6cf84.html deleted file mode 100644 index e8e7303..0000000 --- a/c6a6cf84.html +++ /dev/null @@ -1,70 +0,0 @@ -a self-hosted podcast playback station - zettel.thermokar.st

a self-hosted podcast playback station

components

hardware

  • raspberry pi 3
  • wired speakers

software

general setup

  1. set up headless raspbian, connect wifi, set up user acct, and podcast dir
sudo raspi-config
-mkdir -p /home/pi/podcasts/{playlists,podcast1,podcast2,podcast3}
  1. install mopidy + extensions (see links above for installation info)
# edit /etc/mopidy/mopidy.conf
-[local]
-enabled = true
-media_dir = /home/pi/podcasts
-scan_timeout = 10000
-
-[file]
-enabled = false
-
-[http]
-enabled = true
-hostname = 0.0.0.0
-port = 6680
-
-[mpd]
-enabled = true
-hostname = 0.0.0.0
-port = 6600
-
-[logging]
-verbosity = 1
-
-[m3u]
-enabled = true
-playlists_dir = /home/pi/podcasts/playlists
  1. compile and install castget (see link above for installation info)
# edit /home/pi/castgetrc
-
-# note, the keys in this config should correspond with the podcast dirs
-# created in step 1 above
-
-[podcast1]
-url=http://url.to/podcast1
-spool=/home/pi/podcasts/podcast1
-filename=%(date) %(title).mp3
-
-[podcast2]
-url=http://url.to/podcast2
-spool=/home/pi/podcasts/podcast2
-filename=%(date) %(title).mp3
-
-...
  1. create sync.sh script with the following content (ymmv, use at your own risk):
#!/usr/bin/env bash
-
-set -e
-
-# fetch podcasts
-/usr/local/bin/castget -C /home/pi/castgetrc -1 "$1"
-
-playlist="/home/pi/podcasts/playlists/$1.m3u"
-files=(/home/pi/podcasts/$1/*.mp3)
-
-# remove stale playlist
-if [ -f "$playlist" ]
-then
-  rm "$playlist"
-fi
-
-# build new playlist with newest entries _first_
-for (( i=${#files[@]}-1; i>=0; i-- ))
-do
-  fp="${files[$i]}"
-  fn=$(basename -- "$fp")
-
-  # next, we'll make these all relative fps
-  quoted=$(python -c "from urllib import parse, sys; print(parse.quote(sys.argv[1]))" "$fn")
-  echo "local:track:$1/$quoted" >> "$playlist"
-done
-
-sudo mopidyctl local scan
  1. add cron jobs
5 * * * * /home/pi/sync.sh podcast1 >> /path/to/podcast1.log
-0,15,30,45 15,16,17 * * * /home/pi/sync.sh podcast2 >> /path/to/podcast2.log
-0 0 * * 5 /home/pi/sync.sh podcast3 >> /path/to/podcast3.log
  1. add any additional internet radio streams into one or more playlist files in /home/pi/podcasts/playlists.
  2. enjoy!
\ No newline at end of file diff --git a/cache.json b/cache.json deleted file mode 100644 index c8fa4fc..0000000 --- a/cache.json +++ /dev/null @@ -1 +0,0 @@ -{"Graph":{"adjacencyMap":{"041a1acc":{"c4e96daf":["cf",[]]},"fa6a31b4":{},"19172b64":{},"72e6c820":{},"92598822":{"041a1acc":["folge",[]],"aab45963":["folge",[]]},"6d0a076e":{},"dc879f80":{"9db45ab6":["cf",[]]},"b364352b":{},"9227847e":{},"ec21e3f5":{},"d2e178e0":{},"96fc3093":{},"38003bd5":{},"f0b50398":{},"9db45ab6":{},"b926d9bd":{"fa6a31b4":["folge",[]],"19172b64":["folge",[]],"6d0a076e":["folge",[]],"b364352b":["folge",[]],"ec21e3f5":["folge",[]],"d2e178e0":["folge",[]],"96fc3093":["folge",[]],"38003bd5":["folge",[]],"f0b50398":["folge",[]],"349ceffd":["folge",[]],"da69e0f5":["folge",[]],"82ded935":["folge",[]],"56653cb1":["folge",[]],"73dcbcc7":["folge",[]],"ec672cb5":["folge",[]],"f0e5cfc1":["folge",[]]},"349ceffd":{},"da69e0f5":{},"aab45963":{},"9b74f625":{"92598822":["folge",[]],"b926d9bd":["folge",[]],"c4e96daf":["folge",[]]},"82ded935":{},"56653cb1":{},"c6a6cf84":{},"acc60422":{"dc879f80":["folge",[]],"9db45ab6":["folge",[]]},"index":{"041a1acc":["cf",[]],"dc879f80":["cf",[]],"9227847e":["cf",[]],"9db45ab6":["cf",[]],"aab45963":["cf",[]],"c6a6cf84":["cf",[]]},"c4e96daf":{},"73dcbcc7":{},"ec672cb5":{},"f0e5cfc1":{}},"vertices":{"041a1acc":{"Path":"./041a1acc.md","Slug":"041a1acc","Date":"2020-12-10T13:22","ID":"041a1acc","Meta":{"date":"2020-12-10T13:22","tags":["notes","software","timeline"]},"Title":"a self-hosted git stack"},"fa6a31b4":{"Path":"./fa6a31b4.md","Slug":"fa6a31b4","Date":"2021-03-10T07:40","ID":"fa6a31b4","Meta":{"date":"2021-03-10T07:40","tags":["vim"]},"Title":"replace mode"},"19172b64":{"Path":"./19172b64.md","Slug":"19172b64","Date":"2021-03-14T15:48","ID":"19172b64","Meta":{"date":"2021-03-14T15:48","tags":["vim"]},"Title":"specifying a range when running a ! shell command filters"},"72e6c820":{"Path":"./72e6c820.md","Slug":"72e6c820","Date":"2021-03-19T09:30","ID":"72e6c820","Meta":{"date":"2021-03-19T09:30","tags":["git"]},"Title":"check non-trivial gitignore patterns using git check-ignore"},"92598822":{"Path":"./92598822.md","Slug":"92598822","ID":"92598822","Meta":{"tags":[]},"Title":"self-hosted"},"6d0a076e":{"Path":"./6d0a076e.md","Slug":"6d0a076e","Date":"2021-03-29T21:14","ID":"6d0a076e","Meta":{"date":"2021-03-29T21:14","tags":["vim"]},"Title":"display lines"},"dc879f80":{"Path":"./dc879f80.md","Slug":"dc879f80","Date":"2021-01-29T12:00","ID":"dc879f80","Meta":{"date":"2021-01-29T12:00","tags":["practices","productivity","timeline"]},"Title":"how i stay (somewhat) organized"},"b364352b":{"Path":"./b364352b.md","Slug":"b364352b","Date":"2021-03-10T18:41","ID":"b364352b","Meta":{"date":"2021-03-10T18:41","tags":["vim"]},"Title":"use c instead of deleting and inserting in visual mode"},"9227847e":{"Path":"./9227847e.md","Slug":"9227847e","Date":"2020-11-22T11:18","ID":"9227847e","Meta":{"date":"2020-11-22T11:18","tags":["bread","recipe","timeline"]},"Title":"sourdough pretzel rolls"},"ec21e3f5":{"Path":"./ec21e3f5.md","Slug":"ec21e3f5","Date":"2021-03-14T14:29","ID":"ec21e3f5","Meta":{"date":"2021-03-14T14:29","tags":["vim"]},"Title":"the copy command doesn’t use a register"},"d2e178e0":{"Path":"./d2e178e0.md","Slug":"d2e178e0","Date":"2021-03-14T14:34","ID":"d2e178e0","Meta":{"date":"2021-03-14T14:34","tags":["vim"]},"Title":"the :normal command runs normal commands on multiple lines"},"96fc3093":{"Path":"./96fc3093.md","Slug":"96fc3093","Date":"2021-03-14T15:23","ID":"96fc3093","Meta":{"date":"2021-03-14T15:23","tags":["vim"]},"Title":":read allows piping shell stdout into a buffer"},"38003bd5":{"Path":"./38003bd5.md","Slug":"38003bd5","Date":"2021-03-29T21:21","ID":"38003bd5","Meta":{"date":"2021-03-29T21:21","tags":["vim"]},"Title":"search is a motion"},"f0b50398":{"Path":"./f0b50398.md","Slug":"f0b50398","Date":"2021-03-29T21:30","ID":"f0b50398","Meta":{"date":"2021-03-29T21:30","tags":["vim"]},"Title":"the jump list is primarily for between-file motions"},"9db45ab6":{"Path":"./9db45ab6.md","Slug":"9db45ab6","Date":"2020-11-09T16:48","ID":"9db45ab6","Meta":{"date":"2020-11-09T16:48","tags":["practices","productivity","timeline"]},"Title":"focus requires a rigorous contract"},"b926d9bd":{"Path":"./b926d9bd.md","Slug":"b926d9bd","ID":"b926d9bd","Meta":{"tags":[]},"Title":"vim"},"349ceffd":{"Path":"./349ceffd.md","Slug":"349ceffd","Date":"2021-03-29T21:24","ID":"349ceffd","Meta":{"date":"2021-03-29T21:24","tags":["vim"]},"Title":"mark basics"},"da69e0f5":{"Path":"./da69e0f5.md","Slug":"da69e0f5","Date":"2021-03-14T15:16","ID":"da69e0f5","Meta":{"date":"2021-03-14T15:16","tags":["vim"]},"Title":" in command mode will insert the word under the cursor in the cmd"},"aab45963":{"Path":"./aab45963.md","Slug":"aab45963","Date":"2020-12-08T10:29","ID":"aab45963","Meta":{"date":"2020-12-08T10:29","tags":["notes","software","timeline"]},"Title":"the matrix ecosystem"},"9b74f625":{"Path":"./9b74f625.md","Slug":"9b74f625","ID":"9b74f625","Meta":{"tags":[]},"Title":"software"},"82ded935":{"Path":"./82ded935.md","Slug":"82ded935","Date":"2021-03-14T14:12","ID":"82ded935","Meta":{"date":"2021-03-14T14:12","tags":["vim"]},"Title":"command mode ranges based on patterns"},"56653cb1":{"Path":"./56653cb1.md","Slug":"56653cb1","Date":"2021-03-10T07:38","ID":"56653cb1","Meta":{"date":"2021-03-10T07:38","tags":["vim"]},"Title":"the expression register"},"c6a6cf84":{"Path":"./c6a6cf84.md","Slug":"c6a6cf84","Date":"2021-11-29T22:45","ID":"c6a6cf84","Meta":{"date":"2021-11-29T22:45","tags":["notes","software","timeline"]},"Title":"a self-hosted podcast playback station"},"acc60422":{"Path":"./acc60422.md","Slug":"acc60422","ID":"acc60422","Meta":{"tags":[]},"Title":"practices"},"index":{"Path":"./index.md","Slug":"index","ID":"index","Meta":{"tags":[]},"Title":"index"},"c4e96daf":{"Path":"./c4e96daf.md","Slug":"c4e96daf","Date":"2020-12-13T16:43","ID":"c4e96daf","Meta":{"date":"2020-12-13T16:43","tags":["admin","server","tech"]},"Title":"adding a new user account on a linux system"},"73dcbcc7":{"Path":"./73dcbcc7.md","Slug":"73dcbcc7","Date":"2021-03-14T15:15","ID":"73dcbcc7","Meta":{"date":"2021-03-14T15:15","tags":["vim"]},"Title":" in command mode presents an auto-completion list"},"ec672cb5":{"Path":"./ec672cb5.md","Slug":"ec672cb5","Date":"2021-03-14T15:19","ID":"ec672cb5","Meta":{"date":"2021-03-14T15:19","tags":["vim"]},"Title":"q: opens the command history window"},"f0e5cfc1":{"Path":"./f0e5cfc1.md","Slug":"f0e5cfc1","Date":"2021-03-29T21:32","ID":"f0e5cfc1","Meta":{"date":"2021-03-29T21:32","tags":["vim"]},"Title":"the gf motion will jump to the filename under the cursor"}}},"NeuronVersion":"1.9.35.3","Config":{"editUrl":"https://github.com/thermokarst/zettel/edit/main/","plugins":["neuronignore","links","tags","uptree","feed"],"siteBaseUrl":"https://zettel.thermokar.st","author":"Matthew Ryan Dillon","siteTitle":"zettel.thermokar.st","theme":"black"},"Errors":{}} \ No newline at end of file diff --git a/d2e178e0.html b/d2e178e0.html deleted file mode 100644 index 50e7a3d..0000000 --- a/d2e178e0.html +++ /dev/null @@ -1 +0,0 @@ -the :normal command runs normal commands on multiple lines - zettel.thermokar.st

the :normal command runs normal commands on multiple lines

The :normal command is a useful way to run the same Normal mode command on multiple lines.

:%normal i# <CR>

The command above will comment out an entire Python source file.

\ No newline at end of file diff --git a/da69e0f5.html b/da69e0f5.html deleted file mode 100644 index 0d7ad9a..0000000 --- a/da69e0f5.html +++ /dev/null @@ -1 +0,0 @@ -<C-r><C-w> in command mode will insert the word under the cursor in the cmd - zettel.thermokar.st

<C-r><C-w> in command mode will insert the word under the cursor in the cmd

\ No newline at end of file diff --git a/dc879f80.html b/dc879f80.html deleted file mode 100644 index 8265fdd..0000000 --- a/dc879f80.html +++ /dev/null @@ -1 +0,0 @@ -how i stay (somewhat) organized - zettel.thermokar.st

how i stay (somewhat) organized

Right now this is just a draft outline, ideally I will circle back on this some time this year to fill in some more details.

  • Tools
    • Notebook
      • Right now this is actually just half-letter-page (5.5 inches × 8.5 inches) sheets on a similarly sized clipboard + pen.
      • Pre-printed time block pages: four columns (for amending schedule) + twenty-two 30min rows.
      • Blank pages for logging daily notes, observations, and ideas.
        • I use some elements of bullet journaling for this:
          • I love the bullet syntax, so I use that often (and a homegrown shorthand).
          • I migrate tasks from page to page, but don’t follow any of the weekly/monthly/yearly migrations.
          • The second or third time a task is migrated, I move this task over to my digital planner app (more below).
          • Reflection happens ideally once a day, but more like 2 or 3 times a week.
      • Periodically I clear out the clipboard to archive older sheets that I won’t need to update - these get scanned and put into a per-annum PDF document that is synced to my phone and computer.
    • Calendar
      • I check my digital calendar multiple times a day: I use this to communicate shared calendar events with team members, as well as personal events, deadlines, etc.
    • Home-grown todoist clone
      • Repo: git://pingo.thermokar.st/planner
      • Live: https://planner.thermokar.st (access restricted)
      • Structure
        • This planner is modeled after GTD practices and features an inbox, and the ability to categorize tasks into one or more “plans” (plans can be a project, a specific day/week/events todo list, an issue tracker, etc).
  • Routines
    • Daily
      • I triage notifications first thing in the morning (no more than 30 mins).
        • Note, I might move away from this: I would prefer to handle that kind of stuff midday if possible.
      • Timeblock the day’s schedule (see: focus requires a rigorous contract), incorporating prior engagements, any urgent ad hoc tasks, and the week’s goals (more below).
        • If I fall behind or something unexpected comes up, I update the timeblock schedule when I get a chance.
    • Weekly
      • Before each week starts I try to identify a few high-level goals for the week, and figure out (broadly) how they might fit into my schedule, but I don’t worry too much about specific scheduling at this point, just something like “Wednesday would be a good day to carve out time for this…”
    • Long-term
      • My calendar handles big things like major work milestones, deadlines, appointments, meetings, etc.
      • Tasks go into my planner app, I review these 3-5 times a month on average to see how they might fit into what is coming up next, etc. Really long-term tasks get filed into an @someday plan.
\ No newline at end of file diff --git a/ec21e3f5.html b/ec21e3f5.html deleted file mode 100644 index 04170f2..0000000 --- a/ec21e3f5.html +++ /dev/null @@ -1 +0,0 @@ -the copy command doesn’t use a register - zettel.thermokar.st

the copy command doesn’t use a register

The copy command doesn’t use a register. This is useful for not overwriting the current value in the default register - you might not need to run the copy command, but it might help keep your registers clean.

\ No newline at end of file diff --git a/ec672cb5.html b/ec672cb5.html deleted file mode 100644 index f37cd06..0000000 --- a/ec672cb5.html +++ /dev/null @@ -1 +0,0 @@ -q: opens the command history window - zettel.thermokar.st

q: opens the command history window

q: opens the command history window. When this window is open, it maintains exclusive focus.

\ No newline at end of file diff --git a/f0b50398.html b/f0b50398.html deleted file mode 100644 index c07ef3e..0000000 --- a/f0b50398.html +++ /dev/null @@ -1 +0,0 @@ -the jump list is primarily for between-file motions - zettel.thermokar.st

the jump list is primarily for between-file motions

<C-o> & <C-i> & :jumps

\ No newline at end of file diff --git a/f0e5cfc1.html b/f0e5cfc1.html deleted file mode 100644 index ecc3180..0000000 --- a/f0e5cfc1.html +++ /dev/null @@ -1 +0,0 @@ -the gf motion will jump to the filename under the cursor - zettel.thermokar.st

the gf motion will jump to the filename under the cursor

The suffixadd option needs to be set, although most common filetype plugins should handle this automatically.

\ No newline at end of file diff --git a/fa6a31b4.html b/fa6a31b4.html deleted file mode 100644 index 1961912..0000000 --- a/fa6a31b4.html +++ /dev/null @@ -1 +0,0 @@ -replace mode - zettel.thermokar.st

replace mode

From Normal mode, R activates Replace mode, which behaves a lot like Insert mode, except that it allows you to effectively type over existing content. This is different from r, which is a single character replacement (ending back in Normal mode) - R requires you to deliberately exit back to Normal mode.

\ No newline at end of file diff --git a/impulse.html b/impulse.html deleted file mode 100644 index 718066a..0000000 --- a/impulse.html +++ /dev/null @@ -1 +0,0 @@ -Impulse - zettel.thermokar.st \ No newline at end of file diff --git a/index.html b/index.html deleted file mode 100644 index f2675d1..0000000 --- a/index.html +++ /dev/null @@ -1 +0,0 @@ -index - zettel.thermokar.st
\ No newline at end of file