Vimscript: Sample codes for command completions

Sample Code


" Sample functions {{{
function! Varg(foo)
    "echom a:0
    "echom a:1
    "echom a:2
    echom a:foo
    let cmd_str = "git ls-remote ssh://" . a:foo . " | head -n 10"
    let r = system(cmd_str)
    !echo r

function! Vargs2(foo, ...)
    "echom a:foo
    "echom a:0
    " echom a:1
    echo a:0

function! Assign(foo)
    " let a:foo = "Nope"
    let foo_tmp = a:foo
    let foo_tmp = "Yep"
    echom a:foo
" }}}

com! -complete=custom,ListUserstwo -nargs=1 Sunjoo2 call Varg("")
fun! ListUserstwo(A,L,P)
    return "starfish/build-starfish\nwebos-pro/meta-lg-webos"

Sunjoo2: Command name

call Varg(“”): Vim command triggered when calling a command

ListUserstwo: Function that returns a list of strings for parameter completion


Vim shortcuts


  • Insert file/directory path at ‘Insert mode’ ( Link )
    • In order to insert a relative path with a current directory
      • Just ‘Ctrl-x  + Ctrl -f
    • In order to insert an absolute path
      • Insert a slash ‘/’
      • Ctrl-x  + Ctrl -f

Define VIM shorcuts for ‘Tab’-related actions


if has("gui_macvim")
" Press Ctrl-Tab to switch between open tabs (like browser tabs) to
" the right side. Ctrl-Shift-Tab goes the other way.
noremap  :tabnext
noremap  :tabprev

" New Tab
noremap  :tabnew
" Switch to specific tab numbers with Command-number
noremap  :tabn 1
noremap  :tabn 2
noremap  :tabn 3
noremap  :tabn 4
noremap  :tabn 5
noremap  :tabn 6
noremap  :tabn 7
noremap  :tabn 8
noremap  :tabn 9
" Command-0 goes to the last tab
noremap  :tablast

Create a Self-Signed Certificate with one line openssl command


openssl req -newkey rsa:4096 -nodes -sha256 \
-keyout certs/domain.key -x509 -days 365 \
-out certs/domain.crt \
-subj "/C=KR/ST=Seoul/L=Seongbuk/O=Korea University,\


  • certs/domain.key
    • Root CA Privat Key
  • certs/domain.crt
    • Self-Signed Certificate

How to view a certification file’s content on a shell

keytool -printcert -file certificate.pem

Example for Apache SSL configuration

SSLEngine on

SSLCertificateFile /home/sunjoo/work/docker_registry2/certs/domain.crt
SSLCertificateKeyFile /home/sunjoo/work/docker_registry2/certs/domain.key

Deploy a Docker registry with enabling ‘Secured’ and ‘Authenticated’

This page shows how you can create a self-signed certificate and authentications. With them, you can deploy a Docker registry with ‘secured’, ‘authenticated’, and externally accessible.


  1. Create a base directory for a Docker registry and move to it
    • mkdire ~/docker_registry
  2. Create a self-signed certificate for a registry
      • command
        • mkdir certs #Make a directory where you store certificate and key
        • openssl req -newkey rsa:4096 -nodes -sha256 -keyout certs/domain.key -x509 -days 365 -out certs/domain.crt -subj "/C=KR/ST=Seoul/L=Seongbuk/O=Korea University, Inc/"
      • Change CN‘s value as a hostname that you want
  3. After creating them, copy ‘certs/domain.crt’ to a client host as /etc/docker/certs.d/HOST_NAME:PORT/ca.crt
  4. Create a basic authentication information
    • Command
      • docker run --entrypoint htpasswd registry:2 -Bbn john.doe john.password >> auth/htpasswd
  5. Start the docker registry
    • Command
      • REG_NAME="registry_auth"
        docker rm -f $REG_NAME
        docker run -d -p 5001:5001 --restart=always --name $REG_NAME \
        -v `pwd`/certs:/certs \
        -v `pwd`/auth:/auth \
        -v `pwd`/data_nontls:/var/lib/registry \
        -e REGISTRY_HTTP_ADDR="" \
        -e "REGISTRY_AUTH=htpasswd" \
        -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
        -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \
        -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt\
        -e REGISTRY_HTTP_TLS_KEY=/certs/domain.key \
    • REGISTRY_HTTP_TLS_CERTIFICATE and REGISTRY_HTTP_TLS_KEY use certificate and key file’s absolute path within the container
    • REGISTRY_HTTP_ADDR use IP and port number within the container
    • You can use ‘-p’ parameter to map a docker’s internal port as a host’s external port


  • If you want to restrict an access, you have to use ‘authentication mechanism’ with TLS-enabled Docker registry
    • TLS encrypt/decrypt data between a registry and Docker daemon, not restrict access itself
  • ‘insecured-repositories’ can be used for plain http and https protocol
  • You have to use a domain name on ‘CN=*’ when creating a self-signed certificate.



Docker for Mac


  • memo


Install vim 8.1.390 on OSX 10.13.4


  1. Download a release tar ball version   that you want to download
  2. Determine an install location
    • /usr/local/Cellar/vim/8.1.0390
  3. Run a configuration script
    • ./configure --prefix=/usr/local --mandir=/usr/local/Cellar/vim/8.1.0390/share/man --enable-multibyte --with-tlib=ncurses --enable-cscope --with-compiledby=Homebrew --enable-perlinterp --enable-pythoninterp --enable-rubyinterp --enable-gui=no --without-x --srcdir=. --cache-file=auto/config.cache
  4. Run ‘make
    • make install prefix=/usr/local/Cellar/vim/8.1.0390 STRIP=true
  5. Set VIMRUNTIME variable
    • export VIMRUNTIME=/usr/local/Cellar/vim/8.1.0390/share/vim/vim81
  6. Set PATH variable
    • export PATH=/usr/local/Cellar/vim/8.1.0390/bin:${PATH}

Docker file to make Gnome environment

FROM ubuntu:12.04.5

RUN cat /etc/apt/sources.list |sed 's/' > /tmp/sources.list
RUN cat /tmp/sources.list |sed 's/' > /tmp/sources.list.1
RUN cp /etc/apt/sources.list /etc/apt/sources.list.backup
RUN cp /tmp/sources.list.1 /etc/apt/sources.list 

RUN apt-get update
RUN apt-get install -y --force-yes --fix-missing htop vim git wget gcc g++ autoconf make bzip2 gzip tar sudo time net-tools openssh-server openssh-client ctags groovy sshpass diffstat texinfo gawk chrpath build-essential
RUN apt-get install -y --force-yes --fix-missing cifs-utils smbclient nfs-common
RUN useradd -s /bin/bash -b /home -m soyul
RUN echo "soyul:lge123" |chpasswd 
RUN echo "root:lge123" |chpasswd 
RUN usermod -aG sudo soyul 
RUN chmod 777 /tmp/*
RUN sed -i 's/PermitRootLogin without-password/PermitRootLogin yes/' /etc/ssh/sshd_config
RUN mkdir -p /var/run/sshd
RUN apt-get install -y --force-yes language-pack-ko language-pack-ko-base
#RUN apt-get install -y --force-yes gitg
#RUN apt-get install -y --force-yes gnome
#RUN apt-get install -y --force-yes firefox
#RUN apt-get install -y --force-yes terminator

#RUN echo "\ndaemon off;" >> /etc/nginx/nginx.conf 
#RUN chown -R www-data:www-data /var/lib/nginx


EXPOSE 8000 

CMD ["/usr/sbin/sshd", "-D"]