username1 username2 username3
gg0 # move cursor to first char in file [email protected] # record actions into macro q, then undo :%norm! @q # apply macro q to entire file :wq # save and exit
Simple demo of the MagicCloud gem, as the docs are not explicit about how to output an image:
require "magic_cloud" words = [ ['test', 50], ['me', 40], ['tenderly', 30] ] cloud = MagicCloud::Cloud.new(words, rotate: :free, scale: :log) img = cloud.draw(800, 600) img.write("magic_cloud.png")
When I first discovered Vim I wasted a lot of time trying to bend it backwards into a traditional editor. The below quote sums it up perfectly:
Vim is not TextMate or whatever other editor you have used before. There is no way to transfer all your old habits seamlessly, point blank.
Instead of wasting your time trying to make Vim and your terminal into something that it’s not and can’t be you should learn how to use and customize Vim wisely. All your
Altcombos won’t lead you anywhere. Especially in a terminal where
Altis often problematic and
Consider using leader
- it’s portable on every platform
- it’s less prone to conflicts with your OS or terminal emulator
- it opens a lot of easy to remember possibilities
Adding gobs of plugins instead of learning Vim’s native functionality is another common trap, so I maintain a secondary lightweight Vim config called Ninjarc with minimal plugins to keep me sharp.
Finally, Tim Pope’s philosophy of favouring commands over leader key combos yields a more cohesive configuration. I’m experimenting with Spacemacs-style command mnemonics in my Aetherwolf Vim config. For example, instead of binding
T to open NerdTree,
:tn is used (Toggle NerdTree). This allows
:tt for Toggle Tagbar and so on – a nice memorable taxonomy rather than a flat multitude of somewhat arbitrary leader combos.
Fold current function:
The three Ds of software Project Management:
(this list may or may not be tongue-in-cheek)
Regex snippet to extract the cn value from a dn string for LDAP:
def get_id_from_cname(cname:) match = /^cn=([^,]+)/.match(cname) return match if match.is_a?(MatchData) && match.length > 0 return false end
Snippet to convert a list of attributes to a Ruby hash.
cn:ID sn:Surname fn:FirstName
"cn" => "ID", "sn" => "Surname", "fn" => "FirstName",
/(.+?)(?=\:):(.*$)/"$1" => "$2",/
As is often the case, the nix defaults for ls are spartan. I finally got around to wrestling my ls color settings into submission. On macos/zsh, gdircolors gave inconsistent results, so I set the LS_COLORS environment var directly.
brew install coreutils
if [[ "$(uname)" = "Darwin" ]]; then # macos uses a different 'ls' export CLICOLOR=1 source "$XDG_CONFIG_HOME/zsh/.dir_colors" alias l="gls -ahF --group-directories-first --color=always" else alias l="ls -ah --color --group-directories-first" fi
# Attribute codes: # 00=none 01=bold 04=underscore 05=blink 07=reverse 08=concealed # Text color codes: # 30=black 31=red 32=green 33=yellow 34=blue 35=magenta 36=cyan 37=white # Background color codes: # 40=black 41=red 42=green 43=yellow 44=blue 45=magenta 46=cyan 47=white export LS_COLORS='rs=0:di=00;34:ln=00;37:mh=00:pi=40;33:so=00;35:do=00;35:bd=40;33;01:cd=40;33;01:or=40;31;01:mi=00:su=37;41:sg=30;43:ca=30;41:tw=30;42:ow=34;42:st=37;44:ex=00;33:*.tar=01;31:*.tgz=01;31:'
The full goodies:
Just switched from rbenv to chruby using this guide, and my zsh startup time improved by about 10 seconds. I’d been meaning to debug why it was taking so long — bonus!
Here’s the offending lines that were removed from ~/.zlogin:
export PATH="$HOME/.rbenv/bin:$PATH" eval "$(rbenv init -)"
Internet-connected devices are increasingly supplied without a USB tethering option. While I presume this cuts down on manufacturing complexity and improves form factor, the wifi setup user experience is often terrible.
I recently acquired a FitBit Aria scale which has the completely undocumented quirk of only being able to connect to 802.11b wifi. My router defaults to n. I had to dig through the router settings and enable dual-band. There is absolutely no way a muggle would ever figure this out.
To compound the issue, their activation API was suffering a bug that returned a cryptic JSON error when using a Mac or iOS Safari to register the scales. I have no Wintel, so I finally got it working using iOS Chrome.
Googling revealed loads of posts by angry consumers who had returned the product as defective. I wonder how much this poor design choice cost FitBit’s bottom line? Omitting a USB setup option might have seemed clever but it backfired badly – perhaps it would have been fine if their wifi onboarding experience wasn’t so flawed.
And after enabling dual-band support on my router my Kindle Paperwhite would no longer connect to the wifi network. I had to manually enable WPS discovery mode on the router to pair it again. Oy!