Download this article as an e-book
After a little bit of digging on my now seldom used desktop machine I found some useful scripts I’d share with you all. They’re real good if you’re in the CLI a lot trying to make sense of large amounts of code.
Amongst others, a ~/.bashrc
file to rule them all.
The bash goodness:
g foo
: what lines of what files contain the word foo?
cat somefile | gi foo
....
: cd ../../..
f foo
: case-insensitive search for file foo.
finn foo
: find filenames containing ‘foo’. Sensitive but won’t print svn garbage.
p foo
: highlight processes matching ‘foo’
fsym foo
: search for symbol foo in all objects in subfolders.
rsym foo
: check if libfoo.so links properly
Persistent vim windows.
Further: gvimws allows you to always open new files in the same editor on the current desktop. It also closes the file in any other editor on any other desktop automatically.
And the kicker: ve will allow you to quickly open the files you’ve been searching for (using gvimws)
Putting it together
kwy@amaeth ~$ dmesg | gi error 1404:[27214.044072] iwlagn: Error sending REPLY_ADD_STA: time out after 500ms. kwy@amaeth ~$ cd /usr/src/linux kwy@amaeth /usr/src/linux$ f iwl-core ./drivers/net/wireless/iwlwifi/iwl-core.h ./drivers/net/wireless/iwlwifi/iwl-core.c # doubleclick-select midclick-paste the above line. kwy@amaeth /usr/src/linux$ cdd ./drivers/net/wireless/iwlwifi/iwl-core.c kwy@amaeth /usr/src/linux/drivers/net/wireless/iwlwifi$ g time out iwl3945-base.c:767: IWL_ERROR("Error sending %s: time out after %dms.n", iwl3945-base.c:1590: IWL_ERROR("Time out reading EEPROM[%d]", addr); iwl-eeprom.c:246: IWL_ERROR("Time out reading EEPROM[%d]", addr); iwl-hcmd.c:186: IWL_ERROR("Error sending %s: time out after %dms.n", #select-paste filename:lineno pair from above kwy@amaeth /usr/src/linux/drivers/net/wireless/iwlwifi$ ve iwl-hcmd.c:186: # BAM you have found the problem
The fsym
and rsym
functions are the kind of thing that you’ll never need unless you’re maintaining a large build with libraries that often break. fsym
will find the object file that contains the symbol you’re looking for. rsym
will do more than ldd and the compiler do to check if your lib is linking correctly.
The all singing, all dancing vimrc file
It’s swell. Switch buffers with F3/F4, do typeahead search and all kinds of crazy things you’ll never find out about until you happen to press the wrong button. Just like all of vim.