程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> linux下學習C語言:神器 vim + 指針相關客串

linux下學習C語言:神器 vim + 指針相關客串

編輯:關於C語言

前篇回顧

上篇介紹了linux下C編程基本環境配置以及相關工具使用選擇。

不過10個大牛9個用vim,那麼咱們就來玩vim。linux下玩c就別依靠圖形界面。好吧告別Ide,命令行才是c的王道。

本篇文章感謝名為孫鶴同學的技術支持 感謝有愛的c大牛們

本文中多處使用vim插件(孫鶴提供),這些插件大多是在http://www.vim.org/處下載。

指針客串

因為畢業後就沒玩過c了,都說指針是c的重點。但是指針作為一種地址變量,為什麼不直接操作變量本身呢。文章末尾為大家揭曉

vim的配置文件

~/.vimrc        用戶的默認配置文件

~/.vim/plugin/   用戶的默認腳本文件的存放目錄

~/.vim/ftplugin/ 用戶的默認文件類型相關腳本文件的存放目錄

vim提供的編程支持

文本信息(行號、文件名等)

代碼縮進

語法高亮

快速定位

標記位置

全文搜索

補全

多文件編輯

多窗口編輯

函數列表

文件列表

函數跳轉

語法錯誤

字符集的編碼

二進制查看

等等...

初試vim

在終端以root啟動 輸入vim命令 顯示vim首頁

:r filename 讀入一個文件內容,並寫入到當前編輯器中

按i進入插入模式

編輯完後:w保存

編輯完後按esc退出插入模式 進入正常模式

然後輸入:sh進入shell

編譯運行

文本信息配置

set nu(寫入配置文件.vimrc中) 顯示行號。

ctrl-g(正常模式下使用命令) 顯示文件信息和當前行。

statusline.vim(插件) 增加底部狀態欄。

代碼縮進配置

filetype on(寫入配置文件.vimrc中) 使vim對文件類型敏感。

autocmd FileType c,cpp,h :setlocal cindent cinoptions=:0,g0,t0(寫入配置文件.vimrc中) 設置c縮進風格,具體詳情參見:h cinoptions-values。

autocmd FileType c,cpp,h :setlocal et sta sw=4 sts=4 tabstop=4(寫入配置文件.vimrc中) 設置一次縮進的距離是4個空格。

=(正常模式或者可視模式下使用命令) 按照縮進風格排版代碼。

<(可視模式下使用命令) 向左縮進一級。

>(可視模式下使用命令) 向右縮進一級。

語法高亮

filetype plugin on(寫入配置文件.vimrc中) 通常安裝的vim中已經加入了各種語言的語法高亮插件,我們只需要打開文件類型相關的插件就可以了。

快速定位

gd(正常模式下使用命令) 跳轉到局部變量定義處。

gD(正常模式下使用命令) 跳轉到全局標量定義處。

*(正常模式下使用命令) 搜索並跳到下一個光標所在的單詞。

g*(正常模式下使用命令) 功能接近*,但是查找的目標不帶\<和\>單詞分界符號。

#(正常模式下使用命令) 搜索並跳到上一個光標所在的單詞。

g#(正常模式下使用命令) 功能接近#,但是查找的目標不帶\<和\>單詞分界符號。

標記位置

m{a-zA-Z0-9} (正常模式下使用命令) 在當前位置制作一個標記,標記名字可以使用a-z或者A-Z之間的任意字符,例如輸入ma,就是將當前位置標記為a標記。注意a-z為單文件標記,不可跨文件使用,而A-Z0-9為全局標記,可以跨文件使用。

‘{a-zA-Z0-9} (正常模式下使用命令) 跳轉到本文件的標記上。

:marks [{a-zA-z0-9}] (正常模式下使用命令) 查看指定標記的內容,不寫標記號則查看所有。

:delm {a-zA-z0-9} (正常模式下使用命令) 刪除一個標記。

全文搜索

:vimgrep(正常模式下使用命令) 全文搜索,功能同grep命令,但是支持在vim進行多文件跳轉定位。

使用方法:vimgrep 正則表達式 文件。文件支持通配符,例如*.c代表所有的.c文件。如果希望遞歸搜索,可以使用**/*,表示搜索所有的文件。

:cl 列舉結果

:cc(正常模式下使用命令) 當前結果

:cn(正常模式下使用命令) 下一個結果

:cp(正常模式下使用命令) 上一個結果

:cw(正常模式下使用命令) 重新打開搜索結果窗口

多文件編輯

vim f1 f2 …… fn(在shell下使用命令) 打開多個文件。

:e 文件名(正常模式下使用命令) 在vim中打開新文件。

:ls(正常模式下使用命令) 所有打開文件列表。

:bn(正常模式下使用命令) 到下一個文件。

:bp(正常模式下使用命令) 到上一個文件。

:b# 或 ctrl-6(正常模式下使用命令) 到最近的前一個文件。

set  autowriteall(寫入配置文件.vimrc中) 如果討厭每次打開新文件,vim喋喋不休的要求你保存,那麼可以設置自動保存。

多窗口編輯

:sp  文件名(正常模式下使用命令) 橫向拆分窗口(多行窗口)。

:vsp 文件名(正常模式下使用命令) 縱向拆分窗口(多列窗口)。

ctrl-w h(正常模式下使用命令) 將光標移動到左一個窗口。

ctrl-w j(正常模式下使用命令) 將光標移動到下一個窗口。

ctrl-w k(正常模式下使用命令) 將光標移動到上一個窗口。

ctrl-w l(正常模式下使用命令) 將光標移動到右一個窗口。

ctrl-w +(正常模式下使用命令) 當前窗口尺寸變大。

ctrl-w -(正常模式下使用命令) 當前窗口尺寸變小。

ctrl-w o(正常模式下使用命令) 只顯示當前窗口。

函數列表

taglist.vim(插件) 列表插件。

let Tlist_Use_Right_Window = 1(寫入配置文件.vimrc中) 如果希望列表在右側顯示,則加入這個配置,默認是左側。

:Tlist(正常模式下使用命令) 顯示函數列表。

d(在taglist窗口下使用) 從列表中刪除文件。

+(在taglist窗口下使用) 展開文件。

-(在taglist窗口下使用) 折疊文件。

=(在taglist窗口下使用) 折疊所有文件。

x(在taglist窗口下使用) 顯示或隱藏正常窗口。

文件列表

NERD_tree.vim(插件) 橫向拆分窗口(多行窗口)。

let NERDTreeWinPos = 'right'(寫入配置文件.vimrc中) 如果希望文件樹在右側顯示,則加入這個配置,默認是左側。

:NERDTree(正常模式下使用命令) 顯示文件列表。

函數跳轉

ctags(軟件,需要另外安裝) 生成多種語言tag文件的軟件。

Ctags –R *.c(在shell下使用命令) 生成當前路徑所有.c文件的tag,-R代表遞歸。

:ta 標記 或 [g] ctrl-] 列舉標簽(多個標簽)或者跳轉到標簽(單個標簽)。

ctrl-t 返回上一級。

:tags 列出標簽棧。

語法錯誤

:make(正常模式下使用命令) 執行外部make命令,並且顯示所有的編譯警告和錯誤,並且可以在vim中定位。

:cl 列舉結果

:cc(正常模式下使用命令) 當前結果

:cn(正常模式下使用命令) 下一個結果

:cp(正常模式下使用命令) 上一個結果

:cw(正常模式下使用命令) 重新打開搜索結果窗口

二進制文件查看 (鑒於有同學理解出現分歧 將二進制查看更新為二進制文件查看)

:范圍!xxd(正常模式下使用命令) 把指定范圍的部分轉化為二進制文件閱讀方式。

:范圍!xxd -r(正常模式下使用命令) 把指定范圍的部分轉回字符閱讀方式。

字符集的編碼

let &termencoding=&encoding

set fileencodings=utf-8,gbk,cp936(寫入配置文件.vimrc中)

加入多種字符編碼支持。

:set fileencoding(正常模式下使用命令) 設定文件字符編碼。

補充

ctrl-p(插入模式下使用命令) 跳出補全菜單。

ctrl-n(在跳出補全菜單後) 下一個結果。

ctrl-p(在跳出補全菜單後) 上一個結果。

ctrl-y(在跳出補全菜單後) 選擇當前結果。

ctrl-x ctrl-f(插入模式下使用命令) 文件名補全。

ctrl-x ctrl-i(插入模式下使用命令) 包含的頭文件。

ctrl-x ctrl-](插入模式下使用命令) ctags(將在下文中介紹)符號補全。

ctrl-x ctrl-o(插入模式下使用命令) omni補全,需要設置omnifunc變量。

vim其他命令 (參考vi(vim)教程)

打開文件、保存、關閉文件:

vi filename       //打開filename文件

:w              //保存文件

:w vpser.net  //保存至vpser.net文件

:q             //退出編輯器,如果文件已修改請使用下面的命令

:q!           //退出編輯器,且不保存

:wq              //退出編輯器,且保存文件

插入文本或行:

a      //在當前光標位置的右邊添加文本

i       //在當前光標位置的左邊添加文本

A     //在當前行的末尾位置添加文本

I      //在當前行的開始處添加文本(非空字符的行首)

O     //在當前行的上面新建一行

o     //在當前行的下面新建一行

R    //替換(覆蓋)當前光標位置及後面的若干文本

J    //合並光標所在行及下一行為一行(依然在命令模式)

移動光標:

使用上下左右方向鍵

命令模式下:h   向左、j   向下 、k   向上、l  向右。

空格鍵 向右、Backspace  向左、Enter  移動到下一行首、-  移動到上一行首。

刪除:

x         //刪除當前字符

nx        //刪除從光標開始的n個字符

dd      //刪除當前行

ndd   //向下刪除當前行在內的n行

u       //撤銷上一步操作

U      //撤銷對當前行的所有操作

搜索:

/vpser     //向光標下搜索vpser字符串

?vpser    //向光標上搜索vpser字符串

n           //向下搜索前一個搜素動作

N           //向上搜索前一個搜索動作

跳轉:

n+        //向下跳n行

n-         //向上跳n行

nG        //跳到行號為n的行

G           //跳至文件的底部

設置行號:

:set  nu     //顯示行號

:set nonu    //取消顯示行號

復制:

yy    //將當前行復制到緩存區,也可以用 "ayy 復制,"a 為緩沖區,a也可以替換為a到z的任意字母,可以完成多個復制任務。

nyy   //將當前行向下n行復制到緩沖區,也可以用 "anyy 復制,"a 為緩沖區,a也可以替換為a到z的任意字母,可以完成多個復制任務。

yw    //復制從光標開始到詞尾的字符。

nyw   //復制從光標開始的n個單詞。

y^      //復制從光標到行首的內容。

y$      //復制從光標到行尾的內容。

p        //粘貼剪切板裡的內容在光標後,如果使用了前面的自定義緩沖區,建議使用"ap 進行粘貼。

P        //粘貼剪切板裡的內容在光標前,如果使用了前面的自定義緩沖區,建議使用"aP 進行粘貼。

替換:

:s/old/new      //用new替換行中首次出現的old

:s/old/new/g         //用new替換行中所有的old

:n,m s/old/new/g     //用new替換從n到m行裡所有的old

:%s/old/new/g      //用new替換當前文件裡所有的old

編輯其他資源:

:e otherfilename    //編輯文件名為otherfilename的文件。

修改文件格式:

:set fileformat=unix   //將文件修改為unix格式,如win下面的文本文件在linux下會出現^M。

客串答案

c傳遞參數都是值傳遞的,指針的一個作用是為了解決實現類似引用的效果,另外,使用指針可以直接操作內存!

孫鶴同學的解釋:

每個線程有固定大小的棧,通常主線程的棧默認一般是8M,用指針去引用內存,往往是在使用堆內存,棧是有限的,並且受生存期影響,所以用堆的情況要比用棧更多,有些東西生存期很長,超過一個函數的調用,那麼就需要用堆內存。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved