• Linux基础知识——tmux和vim


    Linux基础知识——tmux和vim

    一、tmux

    tmux配置:~/.tmux.conf修改为如下

    set-option -g status-keys vi
    setw -g mode-keys vi
    
    setw -g monitor-activity on
    
    # setw -g c0-change-trigger 10
    # setw -g c0-change-interval 100
    
    # setw -g c0-change-interval 50
    # setw -g c0-change-trigger  75
    
    
    set-window-option -g automatic-rename on
    set-option -g set-titles on
    set -g history-limit 100000
    
    #set-window-option -g utf8 on
    
    # set command prefix
    set-option -g prefix C-a
    unbind-key C-b
    bind-key C-a send-prefix
    
    bind h select-pane -L
    bind j select-pane -D
    bind k select-pane -U
    bind l select-pane -R
    
    bind -n M-Left select-pane -L
    bind -n M-Right select-pane -R
    bind -n M-Up select-pane -U
    bind -n M-Down select-pane -D
    
    bind < resize-pane -L 7
    bind > resize-pane -R 7
    bind - resize-pane -D 7
    bind + resize-pane -U 7
    
    
    bind-key -n M-l next-window
    bind-key -n M-h previous-window
    
    
    
    set -g status-interval 1
    # status bar
    set -g status-bg black
    set -g status-fg blue
    
    
    #set -g status-utf8 on
    set -g status-justify centre
    set -g status-bg default
    set -g status-left " #[fg=green]#S@#H #[default]"
    set -g status-left-length 20
    
    
    # mouse support
    # for tmux 2.1
    # set -g mouse-utf8 on
    set -g mouse on
    #
    # for previous version
    #set -g mode-mouse on
    #set -g mouse-resize-pane on
    #set -g mouse-select-pane on
    #set -g mouse-select-window on
    
    
    #set -g status-right-length 25
    set -g status-right "#[fg=green]%H:%M:%S #[fg=magenta]%a %m-%d #[default]"
    
    # fix for tmux 1.9
    bind '"' split-window -vc "#{pane_current_path}"
    bind '%' split-window -hc "#{pane_current_path}"
    bind 'c' new-window -c "#{pane_current_path}"
    
    # run-shell "powerline-daemon -q"
    
    # vim: ft=conf
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80

    1. 功能

    1. 分屏
    2. 断开Terminal连接后,继续运行tmux中的进程

    2. 结构

    一个tmux可以包含多个session,一个session可以包含多个window,一个window可以包含多个pane。
    实例:

            tmux:
                session 0:
                    window 0:
                        pane 0
                        pane 1
                        pane 2
                        ...
                    window 1
                    window 2
                    ...
                session 1
                session 2
                ...
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    3. 操作

    • tmux:新建一个session,其中包含一个window,window中包含一个pane,pane里打开了一个shell对话框。
    • Ctrl + a %:按下Ctrl + a后手指松开,然后按%:将当前pane左右平分成两个pane。(左右分屏)
    • Ctrl + a " 按下Ctrl + a后手指松开,然后按"(注意是双引号"):将当前pane上下平分成两个pane。(上下分屏)
    • Ctrl + d:关闭当前pane;如果当前window的所有pane均已关闭,则自动关闭window;如果当前session的所有window均已关闭,则自动关闭session。
    • 选择pane:鼠标点击可以选pane、按下ctrl a后手指松开,然后按方向键:选择相邻的pane。
    • 调整pane之间的分割线:鼠标拖动pane之间的分割线,可以调整分割线的位置。按住ctrl + a的同时按方向键,可以调整pane之间分割线的位置。
    • Ctrl + a z:按下ctrl + a后手指松开,然后按z:将当前pane全屏/取消全屏。
    • Ctrl + a d:按下ctrl + a后手指松开,然后按d:挂起当前session。
    • tmux a:打开之前挂起的session。
    • tmux中复制/粘贴文本的通用方式:
      (1) 按下Ctrl + a后松开手指,然后按[
      (2) 用鼠标选中文本,被选中的文本会被自动复制到tmux的剪贴板
      (3) 按下Ctrl + a后松开手指,然后按],会将剪贴板中的内容粘贴到光标处

    二、vim

    vim配置~/.vimrc修改为如下

    " An example for a vimrc file.
    "
    " To use it, copy it to
    "     for Unix and OS/2:  ~/.vimrc
    "             for Amiga:  s:.vimrc
    "  for MS-DOS and Win32:  $VIM\_vimrc
    "           for OpenVMS:  sys$login:.vimrc
    
    " When started as "evim", evim.vim will already have done these settings.
    if v:progname =~? "evim"
      finish
    endif
    
    " Use Vim settings, rather then Vi settings (much better!).
    " This must be first, because it changes other options as a side effect.
    set nocompatible
    
    " allow backspacing over everything in insert mode
    set backspace=indent,eol,start
    
    if has("vms")
      set nobackup          " do not keep a backup file, use versions instead
    else
      set backup            " keep a backup file
    endif
    set history=50          " keep 50 lines of command line history
    set ruler               " show the cursor position all the time
    set showcmd             " display incomplete commands
    set incsearch           " do incremental searching
    "==========================================================================
    "My Setting-sunshanlu
    "==========================================================================
    vmap <leader>y :w! /tmp/vitmp<CR>
    nmap <leader>p :r! cat /tmp/vitmp<CR>
    
    "语法高亮
    syntax enable
    syntax on
    "显示行号
    set nu
    
    "修改默认注释颜色
    "hi Comment ctermfg=DarkCyan
    "允许退格键删除
    "set backspace=2
    "启用鼠标
    set mouse=a
    set selection=exclusive
    set selectmode=mouse,key
    "按C语言格式缩进
    set cindent
    set autoindent
    set smartindent
    set shiftwidth=4
    
    " 允许在有未保存的修改时切换缓冲区
    "set hidden
    
    " 设置无备份文件
    set writebackup
    set nobackup
    
    "显示括号匹配
    set showmatch
    "括号匹配显示时间为1(单位是十分之一秒)
    set matchtime=5
    "显示当前的行号列号:
    set ruler
    "在状态栏显示正在输入的命令
    set showcmd
    
    set foldmethod=syntax
    "默认情况下不折叠
    set foldlevel=100
    " 开启状态栏信息
    set laststatus=2
    " 命令行的高度,默认为1,这里设为2
    set cmdheight=2
    
    
    " 显示Tab符,使用一高亮竖线代替
    set list
    "set listchars=tab:\|\ ,
    set listchars=tab:>-,trail:-
    
    
    "侦测文件类型
    filetype on
    "载入文件类型插件
    filetype plugin on
    "为特定文件类型载入相关缩进文件
    filetype indent on
    " 启用自动补全
    filetype plugin indent on 
    
    
    "设置编码自动识别, 中文引号显示
    filetype on "打开文件类型检测
    "set fileencodings=euc-cn,ucs-bom,utf-8,cp936,gb2312,gb18030,gbk,big5,euc-jp,euc-kr,latin1
    set fileencodings=utf-8,gb2312,gbk,gb18030
    "这个用能很给劲,不管encoding是什么编码,都能将文本显示汉字
    "set termencoding=gb2312
    set termencoding=utf-8
    "新建文件使用的编码
    set fileencoding=utf-8
    "set fileencoding=gb2312
    "用于显示的编码,仅仅是显示
    set encoding=utf-8
    "set encoding=utf-8
    "set encoding=euc-cn
    "set encoding=gbk
    "set encoding=gb2312
    "set ambiwidth=double
    set fileformat=unix
    
    
    "设置高亮搜索
    set hlsearch
    "在搜索时,输入的词句的逐字符高亮
    set incsearch
    
    " 着色模式
    set t_Co=256
    "colorscheme wombat256mod
    "colorscheme gardener
    "colorscheme elflord
    colorscheme desert
    "colorscheme evening
    "colorscheme darkblue
    "colorscheme torte
    "colorscheme default
    
    " 字体 && 字号
    set guifont=Monaco:h10
    "set guifont=Consolas:h10
    
    " :LoadTemplate       根据文件后缀自动加载模板
    "let g:template_path='/home/ruchee/.vim/template/'
    
    " :AuthorInfoDetect   自动添加作者、时间等信息,本质是NERD_commenter && authorinfo的结合
    ""let g:vimrc_author='sunshanlu'
    ""let g:vimrc_email='sunshanlu@baidu.com'
    ""let g:vimrc_homepage='http://www.sunshanlu.com'
    "
    "
    " Ctrl + E            一步加载语法模板和作者、时间信息
    ""map <c-e> <ESC>:AuthorInfoDetect<CR><ESC>Gi
    ""imap <c-e> <ESC>:AuthorInfoDetect<CR><ESC>Gi
    ""vmap <c-e> <ESC>:AuthorInfoDetect<CR><ESC>Gi
    
    
    
    " ======= 引号 && 括号自动匹配 ======= "
    "
    ":inoremap ( ()<ESC>i
    
    ":inoremap ) =ClosePair(')')
    "
    ":inoremap { {}i
    "
    ":inoremap } =ClosePair('}')
    "
    ":inoremap [ []i
    "
    ":inoremap ] =ClosePair(']')
    "
    ":inoremap < <>i
    "
    ":inoremap > =ClosePair('>')
    "
    "":inoremap " ""<ESC>i
    "
    ":inoremap ' ''<ESC>i
    "
    ":inoremap ` ``<ESC>i
    "
    ":inoremap * **<ESC>i
    
    " 每行超过80个的字符用下划线标示
    ""au BufRead,BufNewFile *.s,*.asm,*.h,*.c,*.cpp,*.java,*.cs,*.lisp,*.el,*.erl,*.tex,*.sh,*.lua,*.pl,*.php,*.tpl,*.py,*.rb,*.erb,*.vim,*.js,*.jade,*.coffee,*.css,*.xml,*.html,*.shtml,*.xhtml Underlined /.\%81v/
    "
    "
    " For Win32 GUI: remove 't' flag from 'guioptions': no tearoff menu entries
    " let &guioptions = substitute(&guioptions, "t", "", "g")
    
    " Don't use Ex mode, use Q for formatting
    map Q gq
    
    " This is an alternative that also works in block mode, but the deleted
    " text is lost and it only works for putting the current register.
    "vnoremap p "_dp
    
    " Switch syntax highlighting on, when the terminal has colors
    " Also switch on highlighting the last used search pattern.
    if &t_Co > 2 || has("gui_running")
      syntax on
      set hlsearch
    endif
    
    " Only do this part when compiled with support for autocommands.
    if has("autocmd")
    
      " Enable file type detection.
      " Use the default filetype settings, so that mail gets 'tw' set to 72,
      " 'cindent' is on in C files, etc.
      " Also load indent files, to automatically do language-dependent indenting.
      filetype plugin indent on
    
      " Put these in an autocmd group, so that we can delete them easily.
      augroup vimrcEx
      au!
    
      " For all text files set 'textwidth' to 80 characters.
      autocmd FileType text setlocal textwidth=80
    
      " When editing a file, always jump to the last known cursor position.
      " Don't do it when the position is invalid or when inside an event handler
      " (happens when dropping a file on gvim).
      autocmd BufReadPost *
        \ if line("'\"") > 0 && line("'\"") <= line("$") |
        \   exe "normal g`\"" |
        \ endif
    
      augroup END
    
    else
    
      set autoindent                " always set autoindenting on
    
    endif " has("autocmd")
    
    " 增加标行高亮
    set cursorline
    hi CursorLine  cterm=NONE   ctermbg=darkred ctermfg=white
    
    " 设置tab是四个空格
    set ts=4
    set expandtab
    
    " 主要给Tlist使用
    let Tlist_Exit_OnlyWindow = 1
    let Tlist_Auto_Open = 1
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110
    • 111
    • 112
    • 113
    • 114
    • 115
    • 116
    • 117
    • 118
    • 119
    • 120
    • 121
    • 122
    • 123
    • 124
    • 125
    • 126
    • 127
    • 128
    • 129
    • 130
    • 131
    • 132
    • 133
    • 134
    • 135
    • 136
    • 137
    • 138
    • 139
    • 140
    • 141
    • 142
    • 143
    • 144
    • 145
    • 146
    • 147
    • 148
    • 149
    • 150
    • 151
    • 152
    • 153
    • 154
    • 155
    • 156
    • 157
    • 158
    • 159
    • 160
    • 161
    • 162
    • 163
    • 164
    • 165
    • 166
    • 167
    • 168
    • 169
    • 170
    • 171
    • 172
    • 173
    • 174
    • 175
    • 176
    • 177
    • 178
    • 179
    • 180
    • 181
    • 182
    • 183
    • 184
    • 185
    • 186
    • 187
    • 188
    • 189
    • 190
    • 191
    • 192
    • 193
    • 194
    • 195
    • 196
    • 197
    • 198
    • 199
    • 200
    • 201
    • 202
    • 203
    • 204
    • 205
    • 206
    • 207
    • 208
    • 209
    • 210
    • 211
    • 212
    • 213
    • 214
    • 215
    • 216
    • 217
    • 218
    • 219
    • 220
    • 221
    • 222
    • 223
    • 224
    • 225
    • 226
    • 227
    • 228
    • 229
    • 230
    • 231
    • 232
    • 233
    • 234
    • 235
    • 236
    • 237
    • 238
    • 239
    • 240
    • 241
    • 242

    功能

    1. 命令行模式下的文本编辑器。
    2. 根据文件扩展名自动判别编程语言。支持代码缩进、代码高亮等功能。
    3. 使用方式:vim filename
      如果已有该文件,则打开它。
      如果没有该文件,则打开个一个新的文件,并命名为filename

    模式

    1. 一般命令模式
      默认模式。命令输入方式:按不同字符,即可进行不同操作。可以复制、粘贴、删除文本等。
    2. 编辑模式
      在一般命令模式里按下i或者insert,会进入编辑模式。
      按下ESC会退出编辑模式,返回到一般命令模式。
    3. 命令行模式
      在一般命令模式里按下:/?三个字母中的任意一个,会进入命令行模式。命令行在最下面。
      可以查找、替换、保存、退出、配置编辑器等。

    操作

    模式切换

    • i:进入编辑模式
    • ESC:进入一般命令模式

    光标或者指针跳转

    • h j k l分别代表光标←、↓、↑、→
    • n + : n表示数字,按下数字后再按空格,光标会向右移动这一行的n个字符
    • 0功能键[Home]:光标移动到本行开头
    • $功能键[End]:光标移动到本行末尾
    • G:光标移动到最后一行
    • :nnG:光标移到第n行
    • gg:相当于1G:1光标移动到第一行
    • n + :n为数字,光标向下移动n行

    查找替换

    • /word:向光标之下寻找第一个值为word的字符串
    • ?word:向光标之上寻找第一个值为word的字符串
    • :n1,n2s/word1/word2/g:n1与n2为数字,在第n1行与n2行之间寻找word1这个字符串,并将该字符串替换为word2
    • :1,$s/word1/word2/g:将全文的word1替换为word2
    • :1,$s/word1/word2/gc:将全文的word1替换为word2,且在替换前要求用户确认。

    文本操作

    • v:选中文本
    • d:删除选中的文本
    • dd:删除当前行
    • y:复制选中的文本
    • yy:复制当前行
    • p:将复制的数据在光标的下一行/下一个位置粘贴
    • u:撤销
    • Ctrl + r:取消撤销
    • >:将选中的文本整体向右缩进一次
    • <:将选中的文本整体向左缩进一次

    编辑器操作

    • :w 保存
    • :w! 强制保存
    • :q 退出
    • :q! 强制退出
    • :wq 保存并退出
    • :set paste 设置成粘贴模式,取消代码自动缩进
    • :set nopaste 取消粘贴模式,开启代码自动缩进
    • :set nu 显示行号
    • set nonu 隐藏行号
    • gg=G:将全文代码格式化
    • :noh 关闭查找关键词高亮

    解决遇到的BUG
    Ctrl + q:当vim卡死时,可以取消当前正在执行的命令
    异常处理:
    每次用vim编辑文件时,会自动创建一个.filename.swp的临时文件。
    如果打开某个文件时,该文件的swp文件已存在,则会报错。此时解决办法有两种:
    (1) 找到正在打开该文件的程序,并退出
    (2) 直接删掉该swp文件即可

  • 相关阅读:
    CentOS7二进制方式安装Docker
    Quartz核心原理之架构及基本元素介绍
    web前端课程设计——动漫网页2个网页HTML+CSS web前端开发技术 web课程设计 网页规划与设计
    C3P0连接池+MySQL的配置以及wait_timeout问题的解决
    C++项目实战——基于多设计模式下的同步&异步日志系统-④-日志系统框架设计
    春秋云镜 CVE-2014-3704
    Java中常见包装类型Integer、BigDecimal等特点说明
    死磕面试系列,Java到底是值传递还是引用传递?
    java 代理 终于讲清楚了,万字详解!
    前后端分离项目(十):实现"改"功能(前后端)
  • 原文地址:https://blog.csdn.net/qq_57150526/article/details/134381445