Youtube has a nice video Learning Vim In A Week, and I watch it
every few months to refresh my Vim skills. In the video the presenter suggests people to
version control dotfiles such as .vimrc, which is the setting file Vim loads during startup.
There is a website
dedicated to this topic.
Dotfiles seem to be different than normal files in a regular github repo. I googled and found
a stackoverflow post
which discusses the exact same issue. The accepted answer seems a reasonable start point, so I create
a github repo
and start a directory containing .vimrc and .simple dot files. The answer also suggests
to create symbol links in home directory to the dot files. However, I find it does not work
well. When I use vim -u ~/.simple command to load a specific dot file, Vim reports an error.
Instead the hard links should be used here. You simply use ln file link command to create
hard links instead of ln -s ... command.
When adding files to git version control, the command git add . should be used. The command
git add * will not work because * does not expand to include dot files.
I also wrote a short python script newlinks.py to automatically create the hard links in the
home directory. The program is not long and the source code is listed below.
#! python3
'''
Create hard links in ~/ or home directory.
The purpose is to track the .dot file by git and github
Use:
git add .
git commit -m "message"
git push origin master
to update git repo
After you git clone the repo
run $python3 newlinks.py to create hard links in home dir.
Written by George Zhang on 6/8/20
'''
import os
import subprocess
def main():
abspath = os.path.abspath(__file__)
dname = os.path.dirname(abspath)
os.chdir(dname)
filenames = os.listdir()
for f in filenames:
if os.path.isfile(f) and f.startswith('.') and not f.endswith('.swp'):
# ln command
# os module has link and symlink function
p1 = subprocess.run(f'ln -f {f} ~/{f}', shell=True, capture_output=True)
print('running command: ', f'ln -f {f} ~/{f}', end=' --> ')
if p1.returncode == 0:
print('Success!')
print('DONE!!!')
if __name__ == '__main__':
main()