1. 程式人生 > >vim切換tab標籤快捷鍵

vim切換tab標籤快捷鍵

這幾天在學習VIM,在WIN7下裝了GVIM,在折騰好配置檔案後,就在弄這個
切換標籤快捷鍵的問題。
vim從vim7開始加入了多標籤切換的功能,相當於多視窗。
之前的版本雖然也有多檔案編輯功能,但是總之不如這個方便啦。
用法

1

2

3

4

5

6

7

8

9

:tabnew [++opt選項] [+cmd] 檔案            建立對指定檔案新的tab

:tabc       關閉當前的tab

:tabo       關閉所有其他的tab

:tabs       檢視所有開啟的tab

:tabp      前一個

:tabn      後一個

標準模式下:

gt , gT 可以直接在tab之間切換。

更多可以檢視幫助 :help table , help -p

使用alt+數字鍵來切換tab (vim7+)

不過用gt,gT來一個個切換有點不方便, 如果用:tabnext {count}, 又按鍵太多. 加入以下程式碼後, 可以用 alt+n來切換,
比如alt+1切換到第一個tab,alt+2切換到第二個tab。

把以下程式碼加到vimrc, 或者存為.vim檔案,再放到plugin目。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

function! TabPos_ActivateBuffer(num)

let s:count = a:num

exe "tabfirst"

exe "tabnext" s:count

endfunction

function! TabPos_Initialize()

for i in range(1, 9)

exe "map <M-" . i . "> :call TabPos_ActivateBuffer("

. i . ")<CR>"

endfor

exe "map <M-0> :call TabPos_ActivateBuffer(10)<CR>"

endfunction

autocmd VimEnter * call TabPos_Initialize()

上面的看上去太複雜了,來個簡單的。

1

2

3

4

5

6

7

8

9

10

:nn <M-1> 1gt

:nn <M-2> 2gt

:nn <M-3> 3gt

:nn <M-4> 4gt

:nn <M-5> 5gt

:nn <M-6> 6gt

:nn <M-7> 7gt

:nn <M-8> 8gt

:nn <M-9> 9gt

:nn <M-0> :tablast<CR>

把這個放進_vimrc配置檔案裡。

下面把我用的配置檔案都帖過來吧,也是照著網上達人修改的,
注意我只在WIN7下的GVIM裡實驗過有效果。

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

if has("gui_running")

set encoding=utf-8

set fileencodings=ucs-bom,utf-8,cp936,gb18030,big5,euc-jp,euc-kr,latin1

if has("win32")

set fileencoding=utf-8

else

set fileencoding=utf-8

endif

let &termencoding = &encoding

"解決選單亂碼

source $VIMRUNTIME/delmenu.vim

source $VIMRUNTIME/menu.vim

"解決consle輸出亂碼

language messages zh_CN.utf-8

endif

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

" 設定圖形介面。

"

" 字型部分,可參考《程式設計師最喜歡用的程式設計字型》一文:

" http://www.2maomao.com/blog/best-programmer-fonts/

"如果你的字型名中有空格或者逗號, 你就需要用一個反斜線轉義了. 如:

"set guifont=Courier\ New\ 12

if has("gui_running")

if has("win32")

" 設定 windows 下 gvim 啟動時最大化

autocmd GUIEnter * simalt ~x

" 設定 windows 下圖形介面下的字型。該字型需要自己下載安裝,下載地址:

" http://ftp.gnome.org/pub/GNOME/sources/ttf-bitstream-vera/1.10/ttf-bitstream-vera-1.10.zip

" set guifont=Bitstream_Vera_Sans_Mono:h14:cANSI

" 下面這個是我自己喜歡的一個字型

set guifont=YaHei_Consolas_Hybrid:h12:cGB2312

else

" 設定 linux 下圖形介面下的字型,該字型 Fedora 7 自帶

" set guifont=DejaVu\ LGC\ Sans\ Mono\ 14

set guifont=YaHei_Consolas_Hybrid:h12:cGB2312

endif

endif

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

if has("gui_running")

colorscheme desert "or koehler

else

colorscheme evening

endif

"evening         " 設定背景為夜間模式

filetype plugin on          " 自動識別檔案型別,自動匹配對應的

" “檔案型別Plugin.vim”檔案,使用縮排定義檔案

set ambiwidth=double        " ambiwidth 預設值為 single。在其值為 single 時,

" 若 encoding 為 utf-8,gvim 顯示全形符號時就會

" 出問題,會當作半形顯示。

set autochdir               " 自動切換當前目錄為當前檔案所在的目錄

set autoindent cindent cinoptions=g0

" 開啟自動縮排和 C 語言風格的縮排模式,

" 定製 C 語言縮排風格

set backspace=indent,eol,start

" 不設定的話在插入狀態無法用退格鍵和 Delete

" 鍵刪除回車符

set backupcopy=yes          " 設定備份時的行為為覆蓋

if v:version >= 700

set completeopt=menu,longest,preview

" 自動補全(ctrl-p)時的一些選項:

" 多於一項時顯示選單,最長選擇,

" 顯示當前選擇的額外資訊

endif

set fileformat=dos          " unix|dos|mac,在windos下unix格式不換行。

set confirm                 " 用確認對話方塊(對於 gvim)或命令列選項(對於

" vim)來代替有未儲存內容時的警告資訊

set display=lastline        " 長行不能完全顯示時顯示當前螢幕能顯示的部分。

" 預設值為空,長行不能完全顯示時顯示 @。

set expandtab               " 將 tab 鍵轉換為空格

set formatoptions=tcqro     " 使得註釋換行時自動加上前導的空格和星號

set hidden                  " 允許在有未儲存的修改時切換緩衝區,

" 此時的修改由切換由 vim 負責儲存

set history=500             " 設定冒號命令和搜尋命令的命令歷史列表的長度為 50

set hlsearch                " 搜尋時高亮顯示被找到的文字

set ignorecase smartcase    " 搜尋時忽略大小寫,但在有一個或以上大寫字母時

" 仍保持對大小寫敏感

set incsearch               " 輸入搜尋內容時就顯示搜尋結果

set mouse=a                 " 設定在任何模式下滑鼠都可用

set nobackup                " 覆蓋檔案時不備份

set nocompatible            " 設定 gvim 執行在增強模式下

set noignorecase            " 預設區分大小寫

set nolinebreak             " 在單詞中間斷行

set number                  " 顯示行號

set ruler                   " 開啟狀態列標尺

set scrolloff=5             " 設定游標離視窗上下邊界 5 行時視窗自動滾動

set shiftwidth=4            " 設定 << 和 >> 命令移動時的寬度為 4

set showcmd                 " 在狀態列顯示目前所執行的指令,未完成的指令片段亦

" 會顯示出來

set softtabstop=4           " 使得按退格鍵時可以一次刪掉 4 個空格

" (不足 4 個時刪掉所有剩下的空格)

set tabstop=4               " 設定 tab 長度為 4

set whichwrap=b,s,<,>,[,]   " 設定退格鍵、空格鍵以及左右方向鍵在行首行尾時的

" 行為,不影響 h 和 l 鍵

set nowrap                  " 自動換行顯示

syntax on                   " 自動語法高亮

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

" 設定命令列和狀態列

set cmdheight=1             " 設定命令列的行數為 1

set laststatus=2            " 顯示狀態列 (預設值為 1, 無法顯示狀態列)

#set statusline=%F%m%r\ \|\ %Y,%{&fileencoding}\ \|%=\ %l/%L,%c\ \|\ %f

set statusline=%F%m%r\ \|\ %{&ff},%{\"[\".(&fenc==\"\"?&enc:&fenc).((exists(\"+bomb\")\ &&\ &bomb)?\",B\":\"\").\"]\ \"},%Y\ \|%=\ %l/%L,%c\ \|\ %f

" 設定在狀態行顯示的資訊如下:

" %f    當前的檔名

" %F    當前全路徑檔名

" %m    當前檔案修改狀態

" %r    當前檔案是否只讀

" %Y    當前檔案型別

" %{&fileformat}

"       當前檔案編碼

" %{&fileencoding}

"       中文編碼

" %b    當前游標處字元的 ASCII 碼值

" %B    當前游標處字元的十六進位制值

" %l    當前游標行號

" %c    當前游標列號

" %V    當前游標虛擬列號 (根據字元所佔位元組數計算)

" %p    當前行佔總行數的百分比

" %%    百分號

" %L    當前檔案總行數

"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

" 自動命令

" 讀檔案時自動設定當前目錄為剛讀入檔案所在的目錄

autocmd BufReadPost * cd %:p:h

"cscope

if has("cscope")

set csprg=/usr/bin/cscope

set csto=0

set cst

set nocsverb

" add any database in current directory

if filereadable("cscope.out")

cs add cscope.out

" else add database pointed to by environment

elseif $CSCOPE_DB != ""

cs add $CSCOPE_DB

endif

set csverb

endif

"for omnicppcomplete

set nocp

let OmniCpp_MayCompleteScope = 1

let OmniCpp_ShowPrototypeInAbbr = 1

"auto-close proview

"autocmd CursorMovedI * if pumvisible() == 0|pclose|endif

"autocmd InsertLeave * if pumvisible() == 0|pclose|endif

"temp"

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

" Alt+數字切換Table快捷鍵設定

:nn <M-1> 1gt

:nn <M-2> 2gt

:nn <M-3> 3gt

:nn <M-4> 4gt

:nn <M-5> 5gt

:nn <M-6> 6gt

:nn <M-7> 7gt

:nn <M-8> 8gt

:nn <M-9> 9gt

:nn <M-0> :tablast<CR>

""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

set nocompatible

source $VIMRUNTIME/vimrc_example.vim

source $VIMRUNTIME/mswin.vim

behave mswin

set diffexpr=MyDiff()

function MyDiff()

let opt = '-a --binary '

if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif

if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif

let arg1 = v:fname_in

if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif

let arg2 = v:fname_new

if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif

let arg3 = v:fname_out

if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif

let eq = ''

if $VIMRUNTIME =~ ' '

if &sh =~ '\<cmd'

let cmd = '""' . $VIMRUNTIME . '\diff"'

let eq = '"'

else

let cmd = substitute($VIMRUNTIME, ' ', '" ', '') . '\diff"'

endif

else

let cmd = $VIMRUNTIME . '\diff'

endif

silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3 . eq

endfunction