Although I was a slow adopter, I am now an adamant git user. I won't go into all the details here, but git is a great distributed version control system (vcs), light years ahead of the last generation (cvs, svn), and honestly if it isn't too cost prohibitive, I would greatly recommend switching to it (the Linux kernel tree was moved to git, so I can't really see why anyone else wouldn't be able to).
Although I've never used it before, I've also heard alot of great things about the Mercurial (hg) distributed version control system. Recently one of the projects I was working on for work required me to use mercurial, so I've started getting up to speed.
One thing that took me a few minutes to discover is how to replate the git format-patch command w/ hg. eg with git, to see a list of all commits and then format a patch from the last one, run:
git log git log HEAD^ -p git format-patch HEAD^ git send-email 001-patchname.patch git send-email HEAD^ # alternatively
Doing the same w/ HG:
hg log # note this isn't paginated, a feature git has over hg imo hg log -r tip -p hg email -r tip
This is good starting place for those familiar w/ hg or git and are trying to use the other.
In the department of things I've spent far too much time working on, I just wrote a vim script that allows you to automatically insert a random number into the file you're editing. It probably could use a little work, but does what I need it to do (easily generate random numbers for test fixtures). To use it yourself, add the following to your ~/.vimrc:
" generate random number at end of current line function! s:Rand(max) y a redir @b ruby << EOF rmax = VIM::evaluate("a:max") rmax = nil if rmax == "" printf rand(rmax).to_s EOF redir END let @a = strpart(@a, 0, strlen(@a) - 1) let @b = strpart(@b, 1, strlen(@b) - 1) let @c = @a . @b .s/.*/\=@c/g endfunction command! -nargs=? Rand :call <SID>Rand(<q-args>) nmap <F6> :Rand <CR> nmap <F7> :Rand 100<CR> nmap <F8> :Rand 100000<CR>
When using vim, simply enter command mode and type :Genrand <maxnumber> to generate a random number and insert it at the end of the line. Alternatively, simply hit <F7> to generate and insert a random number between 1 and 100.
So I've been playing around with vim to try to better my usage of the text editor and have found some very interesting features / plugins and one annoying pitfall which I want to share.
To start of, I'm no longer using the standard vim app, but rather gvim as I've been looking for better mouse support for a while. I've no need of the toolbar (I like keeping the menus around), and removing it is as simple as adding the following to your ~/.vimrc:
Using tabs is nice with the gui (albiet also present w/ the regular text version), you can create a new one with :tabnew
I've installed the showmarks plugin which is useful for visualizing the line / column markers you have set in the file you are editing. I've just also found the project plugin which I now wonder how I've even lived without it (at one point I was considering writing a standalone app just to do what this plugin does) and makes configuring projects and files like you would in an IDE a cinch (I very much recommend trying it if you use vim, it takes less than an hour to learn / completely setup).
Unfortunately one relatively new feature I wanted to try doesn't work just right in the vim version that currently ships with Fedora. Omni-completion is a very powerful feature of vim that uses ctags to provide code-completion and other functionality to users editing documents. While it comes built in for a wide variety of languages, the Fedora vim version isn't built with the necessary flags for ruby support and thus auto-completion doesn't currently work.
If you don't mind building it yourself you can simply follow the following steps:
- yum remove vim-common
- yum install rpm-build ruby ruby-devel "perl(ExtUtils::Embed)" libacl-devel gpm-devel libXpm-devel wget # there might be other dependencies, if subsequent steps complain about things missing try to yum install them
- wget http://download.fedora.redhat.com/pub/fedora/linux/development/source/SRPMS/vim-7.2.245-3.fc12.src.rpm
- Add the following line to your .rpmmacros " %_topdir ~/rpmbuild"
- rpmbuild --rebuild vim-7.2.245-3.fc12.src.rpm
- sudo yum localinstall ~/rpmbuild/RPMS/x86_64/vim-common-7.2.245-3.fc11.x86_64.rpm ~/rpmbuild/RPMS/x86_64/vim-enhanced-7.2.245-3.fc11.x86_64.rpm ~/rpmbuild/RPMS/x86_64/vim-X11-7.2.245-3.fc11.x86_64.rpm --nogpgcheck
Now vim / gvim will be installed on your system with ruby omni-completion support.