給自己的VIM配置

編輯 .vimrc 文件如下:

filetype plugin on


"autocmd Filetype cpp,c,java,cs set omnifunc=cppcomplete#Complete
set nu
set nocp
set nobackup


let g:C_AuthorName ? ? ?= 'gaoke'
let g:C_AuthorRef ? ? ? = 'gaoke'
let g:C_Email ? ? ? ? ? = 'gaoke@taomee.com'
let g:C_Company ? ? ? ? = 'TAOMEE'
"let g:vimim_disable_smart_space=1
"let g:vimim_disable_chinese_punctuation=0
?


"autocmd BufEnter *.hpp ?
if ( ? ?expand('%f')=~ ".hpp$" ?)?
let g:C_Comments = 'false'?
endif




set laststatus=2
autocmd BufEnter *.c ?set filetype=cpp


"------------------------------------------------------------------------------
"獲取當前路徑的上一級的路徑
function! GET_UP_PATH(dir)
let pos=len(a:dir)-1
while pos>0?
if (a:dir[pos]=="/" )
return strpart(a:dir,0,pos)
endif
let pos=pos-1?
endwhile
return ?"" ?
endfunction


"設置相關tags
function! s:SET_TAGS()
? ? "let dir = expand("%:p:h") "獲得源文件路徑
? ? let dir =getcwd() ?"獲得源文件路徑
set tags=
"在路徑上遞歸向上查找tags文件?
while dir!=""
if findfile("tags",dir ) !=""
"找到了就加入到tags
exec "set tags+=" . dir . "/tags"
endif
"得到上級路徑
let dir=GET_UP_PATH(dir)
endwhile
if ( &filetype =="cpp" )
set tags+=~/.vim/tags
set tags+=~/.vim/tags_cpp
set tags+=~/.vim/tags_qt


endif
endfunction




"設置相關 include , for cmd : gf?
function! s:SET_PATH( find_dir )
? ? let dir = expand("%:p:h") "獲得源文件路徑
let dir_relative=''
let g:alternateSearchPath = ''
"let g:alternateSearchPath = 'sfr:../source,sfr:../src,sfr:../include,sfr:../inc,sfr:.'
"在路徑上遞歸向上查找tags文件?
while dir!=""
if finddir(a:find_dir ,dir ) !=""
"找到了就加入到tags
exec "set path+=" . dir . "/". a:find_dir
let g:alternateSearchPath = g:alternateSearchPath.'sfr:'.dir_relative.a:find_dir.","?
endif
"得到上級路徑
let dir_relative=dir_relative . "../"
let dir=GET_UP_PATH(dir)
endwhile
endfunction


autocmd BufEnter *.cpp,*.c,*.h call s:SET_TAGS()?
autocmd BufEnter *.php call s:SET_TAGS()?


autocmd BufEnter ?*.cpp,*.c,*.h call s:SET_PATH("include")?
autocmd BufEnter ?*.php call s:SET_PATH("pub")?


autocmd BufEnter * ?set tabstop=4?
autocmd BufEnter /usr/include/c++/* ?set tabstop=8 ?


autocmd BufEnter * ? ?if ( &filetype == "php" )| map ,i <Esc>:e ~/DB/su/pub/| else | map ,i <Esc>:e ~/DB/include/| endif


"用于支持代碼補全時,提示存在。
"set completeopt=menuone
inoremap <expr> <cr> pumvisible() ? "\<c-y>" : "\<c-g>u\<cr>"
"inoremap <expr> <c-n> pumvisible() ? "\<c-n>" : "\<c-n>\<c-r>=pumvisible() ? \"\\<down>\" : \"\\<cr>\""
inoremap <expr> <m-;> pumvisible() ? "\<c-n>" : "\<c-x>\<c-o>\<c-n>\<c-p>\<c-r>=pumvisible() ? \"\\<down>\" : \"\\<cr>\""


" 用于支持 . -> 代碼補全
imap ? <expr> <Backspace> ?Ex_bspace()?
imap ? <expr> <Space> ?Ex_space("\<Space>")?


function! Ex_space ( char )

if (&filetype == "cpp" || &filetype == "c" )
let pre_str= strpart(getline('.'),0,col('.')-1)

if pumvisible() != 0 ?
"in completing , complete it ? ?
return "\<CR>"
? elseif pre_str ?=~ "[.][\s\t]*$" || pre_str ?=~ "->[\s\t]*$" ??
return "\<C-X>\<C-O>"
endif?
endif


if (&filetype == "python" ||&filetype == "html" ?||&filetype == "php" ? ? )
let pre_str= strpart(getline('.'),0,col('.')-1)
if pumvisible() != 0 ?
"in completing , complete it ? ?
return "\<CR>"
? elseif pre_str ?=~ "[.][\s\t]*$" || pre_str ?=~ "->[\s\t]*$" ??
return "\<C-X>\<C-O>\<C-P>\<C-R>=pumvisible() ? \"\\<down>\" : \"\"\<cr>"
endif?

endif






"default
return a:char?
endf


function! Ex_bspace()
if (&filetype == "cpp" || &filetype == "c" )
let pre_str= strpart(getline('.'),0,col('.')-2)
? if pre_str ?=~ "[.][ \t]*$" || pre_str ?=~ "->[ \t]*$" ??
return "\<Backspace>\<C-X>\<C-O>"
endif?
endif


if (&filetype == "python"|| &filetype == "html" ?|| &filetype == "python" ?)
let pre_str= strpart(getline('.'),0,col('.')-2)
? if pre_str ?=~ "[.][ \t]*$"
return "\<Backspace>\<C-X>\<C-O>\<C-P>\<C-R>=pumvisible() ? \"\\<down>\" : \"\"\<cr>"
endif?
endif


"default
return "\<Backspace>"
endf




function! FIND_PROTO()
? ? "let szLine = getline('.')
? ? "let startPos = getpos('.')[2]-1
? ? "let startPos = (startPos < 0)? 0 : startPos
? ? "if szLine[startPos] =~ '\w'
? ? ? ? "let startPos = searchpos('\<\w\+', 'cbn', line('.'))[1] - 1
? ? "endif


? ? "let startPos = (startPos < 0)? 0 : startPos
? ? "let szResult = matchstr(szLine, '\w\+', startPos)
""echo szResult?
endfunction?




".pc 文件設置為.ec 的高亮顯示
"autocmd BufEnter *.pc ?set filetype=esqlc?
".c ?.h 文件設為 .cpp
autocmd BufEnter *.c ?set filetype=cpp


"------------------------------------------------------------------------------
set guifont=Bitstream\ Vera\ Sans\ Mono\ 11?




"功能說明:加入或刪除注釋//
"映射和綁定
"nmap <C-C> <Esc>:Setcomment<CR>
"imap <C-C> <Esc>:Setcomment<CR>
"vmap <C-C> <Esc>:SetcommentV<CR>
"command! -nargs=0 Setcomment call s:SET_COMMENT()
"command! -nargs=0 SetcommentV call s:SET_COMMENTV()


"非視圖模式下所調用的函數
function! s:SET_COMMENT()
let lindex=line(".")
let str=getline(lindex)
"查看當前是否為注釋行
let CommentMsg=s:IsComment(str)
call s:SET_COMMENTV_LINE(lindex,CommentMsg[1],CommentMsg[0])
endfunction


function! SET_UAW()
let save_cursor = getpos(".")


let line = getline('.')
let col_num = col('.')
if match("ABCDEFGHIJKLMNOPQRSTUVWXYZ",line[col_num-1])!= -1
exec "normal! guaw"
else
exec "normal! gUaw"
endif


call setpos('.', save_cursor)
endfunction




function! MAKE_CUR_FILE()
let cur_file= expand("%f")
"split?


exec "normal! gUaw"
endfunction






"視圖模式下所調用的函數
function! s:SET_COMMENTV()
let lbeginindex=line("'<") "得到視圖中的第一行的行數
let lendindex=line("'>") "得到視圖中的最后一行的行數
let str=getline(lbeginindex)
"查看當前是否為注釋行
let CommentMsg=s:IsComment(str)
"為各行設置
let i=lbeginindex
while i<=lendindex
call s:SET_COMMENTV_LINE(i,CommentMsg[1],CommentMsg[0])
let i=i+1
endwhile
endfunction


"設置注釋?
"index:在第幾行
"pos:在第幾列
"comment_flag: 0:添加注釋符 1:刪除注釋符
function! s:SET_COMMENTV_LINE( index,pos, comment_flag )
let poscur = [0, 0,0, 0]
let poscur[1]=a:index
let poscur[2]=a:pos+1
call setpos(".",poscur) "設置光標的位置


if a:comment_flag==0?
"插入//
exec "normal! i//"
else?
"刪除//
exec "normal! xx"?
endif?
endfunction


"查看當前是否為注釋行并返回相關信息
"str:一行代碼
function! s:IsComment(str)
let ret= [0, 0] "第一項為是否為注釋行(0,1),第二項為要處理的列,
let i=0
let strlen=len(a:str)
while i<strlen
"空格和tab允許為"//"的前綴
if !(a:str[i]==' ' || a:str[i] == ' ' )
let ret[1]=i
if a:str[i]=='/' && a:str[i+1]=='/'
let ret[0]=1
else?
let ret[0]=0
endif
return ret
endif
let i=i+1
endwhile
return [0,0] ?"空串處理
endfunction




"ab E EXEC SQL
"ab S SQLCODE
ab #x 薛朝文?
ab #l /*----------------------------------------------------------------------------*/
ab #b /*******************************************************************************?
ab #e *******************************************************************************/
ab #i #include
ab #d #define
set fileencodings=ucs-bom,utf-8,gb2312,big5,euc-jp,euc-kr,latin1
"set fileencoding=gb2312
set tabstop=4
set incsearch
set nohlsearch?
set cindent shiftwidth=4
command! Wq wq
command! W w
map ,n :n<CR>
map ,N :N<CR>
map ,a :A<CR>
map ,g :grep\s
"map <F6> <Esc>:/<C-R><C-W><Backspace><Backspace><Backspace><Backspace><CR>


map <F7> <Esc>:call Proto_find() <CR>
map <F6> <Esc>:call Proto_find() <CR>


"for grep cn?
function! Do_cn()?
try
exec "cn"
catch /E553/
exec "cc 1"
endtry
endfunction
function! P_grep_curword()?
"得到光標下的單詞
let curword=expand("<cword>")
exec "grep " . curword . " *.cpp *.c *.h *.hpp "?
endfunction
map ,f <Esc>:call P_grep_curword() <CR>
map ,c <Esc>:call Do_cn() <CR>
map ,C <Esc>:cN<CR>




map ,r <Esc>:!~/.vim/mtags.sh<CR>
map ,m <Esc>:make<CR>


"轉換單詞大小寫
map ,u <Esc>:call SET_UAW()<CR>


map ,p <Esc>:set paste<CR>i
autocmd InsertLeave * if &paste == 1|set nopaste |endif


"切換窗口
map ,w <Esc>:tabn<CR><C-W><C-W><CR>


if has("unix")
? ? map ,e :e <C-R>=expand("%:p:h") . "/" <CR>
else
? ? map ,e :e <C-R>=expand("%:p:h") . "\" <CR>
endif


map <F3> <Esc>yyp^6l<C-A>4l<C-A><Esc>
map <C-F12> :!ctags -R ?--languages=c++ --c++-kinds=+p --fields=+iaS --extra=+q .<CR>




" 在視圖模式下的整塊移動
function! SET_BLOCK_MOVE_V( move_type )
if a:move_type==0 ?
exec "'<,'>s/^/ /"
else
exec "'<,'>s/^ //"
endif


let linecount = line("'>") - line("'<")
let save_cursor_begin = getpos("'<")
call setpos('.', save_cursor_begin)
exec ?"normal! v" . linecount . "j"
endfunction


" 在正常模式下的整塊移動
"大括號內向左移
:nmap <C-H> <Esc><i{
"大括號內向右移
:nmap <C-L> <Esc>>i{?


"選擇區移動
:vmap <C-L> <Esc>:call SET_BLOCK_MOVE_V(0) <CR>
:vmap <C-H> <Esc>:call SET_BLOCK_MOVE_V(1) <CR>


set smarttab
"set paste?
syn on
"定位到原來的位置
autocmd BufReadPost *
\ if line("'\"") > 0 && line ("'\"") <= line("$") |
\ ? exe "normal! g'\"" |
\ endif


"支持STL模板
let OmniCpp_DefaultNamespaces ? = ["std", "_GLIBCXX_STD"]
let OmniCpp_SelectFirstItem = 2
"----------------------------------------------------------
inoremap ( ()<ESC>i
inoremap [ []<ESC>i
"inoremap " ""<ESC>i
"inoremap ' ''<ESC>i
autocmd Syntax html,vim inoremap < <lt>><ESC>i| inoremap > <c-r>=ClosePair('>')<CR>
imap ) <c-r>=ClosePair(')')<CR>
imap ] <c-r>=ClosePair(']')<CR>
imap } <c-r>=CloseBracket()<CR>
"imap <CR> <c-r>=Fix_cr()<CR>
imap " <c-r>=QuoteDelim('"')<CR>
imap ' <c-r>=QuoteDelim("'")<CR>
inoremap { <c-r>=SET_BIG_PAIR()<CR>


function! SET_BIG_PAIR()
? if (&filetype=="php" )
if match( getline('.'), '"' ) >= 0
? return "{}\<ESC>i"
endif
? endif
? return "{\<CR>}\<ESC>O"
endf






function! ClosePair(char)
? if getline('.')[col('.') - 1] == a:char
? ? return "\<Right>"
? else
? ? return a:char
? endif
endf


function! Fix_cr()
?if pumvisible() == 0
? let line = getline('.')
? let col = col('.')
? if line[col-1] == '"' || ?line[col-1] == "'" ?|| line[col-1] == "]" ?||line[col-1] == ")" ? ?
? ? "Escaping out of the string
? ? return "\<ESC>la"
endif
?endif
?return "\<CR>"


endf


function! CloseBracket()
if match(getline(line('.') + 1), '\s*}') < 0
return "\<CR>}"
else
return "\<ESC>j0f}a"
endif
endf




function! QuoteDelim(char)
? let line = getline('.')
? let col = col('.')


? if (&filetype == "vim")
? ? return a:char
? endif



? if line[col - 2] == "\\"
? ? "Inserting a quoted quotation mark into the string
? ? return a:char
? elseif line[col - 1] == a:char
? ? "Escaping out of the string
? ? return "\<Right>"
? else
? ? "Starting a string
? ? return a:char.a:char."\<ESC>i"
? endif
endf?
"autocmd CursorMovedI * if pumvisible() == 0|pclose|endif
"autocmd InsertLeave * if pumvisible() == 0|pclose|endif


set mouse=
"set cinoptions={0,1s,t0,n-2,p2s,(03s,=.5s,>1s,=1s,:1s
"------------------------------------------------
"source ~/.vim/borland.vim
"
"用于支持DB 協議查找 :cmd<->function<->in<->out
function! Proto_find()?


"得到光標下的單詞
let curword=expand("<cword>")
? python get_proto_key(vim.eval("curword"),"find_word" )
"設置搜索寄存器
let ?@/ = find_word?
call histadd("/", find_word )
"查找下一個..
exec "normal! n"
endfunction






"得到光標下的單詞
function! GetCurWord()
return expand("<cword>")
? ? "let szLine = getline('.')
? ? "let startPos = getpos('.')[2]-1
? ? "let startPos = (startPos < 0)? 0 : startPos
? ? "if szLine[startPos] =~ '\w'
? ? ? ? "let startPos = searchpos('\<\w\+', 'cbn', line('.'))[1] - 1
? ? "endif


? ? "let startPos = (startPos < 0)? 0 : startPos
? ? "let szResult = matchstr(szLine, '\w\+', startPos)
? ? "return szResult
endfunc


function! s:UserDefPython()
python << PYTHONEOF
import re
import sys?
import vim?
def get_proto_key(word,stroe_name):
if (word.isupper()):
word=word.lower();


if ?re.search ("_in$", word ): value= word[:-3]?
elif ?re.search ("_in_header$", word ): value=word[:-10]?
elif ?re.search ("_out_header$", word ): value=word[:-11]?
elif ?re.search ("_out$", word ): value=word[:-4]?
elif ?re.search ("_cmd$", word ): value=word[:-4].lower()?
elif ?re.search ("_out_item$", word ): value=word[:-9]?
elif ?re.search ("_in_item$", word ): value=word[:-8]?
else: value=word?
if value!= word:?
key="\<%s_CMD\>\|\<%s\>\|\<%s_in\>\|\<%s_in_header\>\|\<%s_out_header\>\|\<%s_out\>\|\<%s_in_item\>\|\<%s_out_item\>"%(value.upper(),?
value,value,value,value,value,value,value)
else: key=word
vim.command("silent let %s='%s'" % (stroe_name,key))
PYTHONEOF
endfunction


if has('python')
call s:UserDefPython()
endif




autocmd BufRead,BufNewFile *.py set ai
autocmd BufRead *.py set smartindent cinwords=if,elif,else,for,while,try,except,finally,def,class




"ok this is added by gaoke"
set nocompatible


" allow backspacing over everything in insert mode
set backspace=indent,eol,start


set autoindent ? ? ?" always set autoindenting on
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


" 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


? " For all text files set 'textwidth' to 78 characters.
? autocmd FileType text setlocal textwidth=78


? " 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


endif " has("autocmd")a
" 預設一個tags
set tags=tags,../tags


let $d_name_pre=strtrans(system("dirname `pwd`"))
" fix: system return value with a ^@ tail
let d_name=strpart($d_name_pre, 0, stridx($d_name_pre, "^@"))
if d_name =~ "^/home/zog/linux.*"
? ? set tags=/home/zog/linux/tags
endif


set backupdir=~/vim_backup
set noignorecase
set so=15
set shiftwidth=4
set tabstop=4
set fencs=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
map <F7> :make<CR>
map <F12> :q <CR>
map <F8> /$^ <CR>

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/445051.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/445051.shtml
英文地址,請注明出處:http://en.pswp.cn/news/445051.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

shell一文入門通

簡單來說“Shell編程就是對一堆Linux命令的邏輯化處理”。 W3Cschool 上的一篇文章是這樣介紹 Shell的 hello world 學習任何一門編程語言第一件事就是輸出HelloWord了&#xff01;下面我會從新建文件到shell代碼編寫來說下Shell 編程如何輸出Hello World。 (1)新建一個文件…

算法(9)--兩個數的最大公約數

兩個數的最大公約數1.輾轉相除法求解兩個數的最大公約數2.更相減損術求解兩個數的最大公約數3.不嚴格理解1.輾轉相除法求解兩個數的最大公約數 輾轉相除法&#xff1a;兩個正整數a和b&#xff08;a>b&#xff09;的最大公約數等于a除以b的余數與b 之間的最大公約數。–如果…

RPC編程

圖 3 說明在客戶機和服務器之間完成 RPC 涉及的步驟。 圖 3. 在客戶機和服務器之間完成 RPC 涉及的步驟服務器 RPC 應用程序初始化期間它會向 RPC 運行時庫注冊接口。需要注冊接口是因為&#xff0c;客戶機在向服務器發出遠程過程調用時&#xff0c;要檢查它是否與服務器兼容。…

synchronized使用和原理全解

synchronized是Java中的關鍵字&#xff0c;是一種同步鎖。它修飾的對象有以下幾種&#xff1a; 修飾一個方法 被修飾的方法稱為同步方法&#xff0c;其作用的范圍是整個方法&#xff0c;作用的對象是調用這個方法的對象&#xff1b; 修飾一個靜態的方法 其作用的范圍是整個…

RPC學習筆記

在查看libc6-dev軟件包提供的工具&#xff08;用 dpkg -L libc6-dev 命令&#xff09;的時候&#xff0c;發現此軟件包提供了一個有用的工具rpcgen命令。通過rpcgen的man手冊看到此工具的作用是把RPC源程序編譯成C語言源程序&#xff0c;從而輕松實現遠程過程調用。下面的例子程…

算法(10)-leetcode-explore-learn-數據結構-鏈表雙指針技巧

leetcode-explore-learn-數據結構-鏈表21.概述2.例題2.1 環形鏈表判斷2.2 環形鏈表22.3 相交鏈表2.4 刪除鏈表的倒數第N個節點3.小結本系列博文為leetcode-explore-learn子欄目學習筆記&#xff0c;如有不詳之處&#xff0c;請參考leetcode官網&#xff1a;https://leetcode-cn…

一個簡單的游戲服務器框架

最近看到百度空間的一個帖子&#xff0c;不錯&#xff0c;在這里整理下&#xff0c;轉載至我的博客里&#xff0c;開始自己慢慢琢磨寫一個框架。 我先從上層結構說起&#xff0c;一直到實現細節吧&#xff0c;想起什么就寫什么。 第一部分 服務器邏輯 服務器這邊簡單的分為三…

堆和棧的精華大總結

Java內存分配原理 棧、堆、常量池雖同屬Java內存分配時操作的區域&#xff0c;但其適用范圍和功用卻大不相同。 一般Java在內存分配時會涉及到以下區域&#xff1a; ◆寄存器&#xff1a;我們在程序中無法控制 ◆棧&#xff1a;存放基本類型的數據和對象的引用&#xff0c;但…

算法(11)-leetcode-explore-learn-數據結構-鏈表的經典問題

leetcode-explore-learn-數據結構-鏈表31.反轉一個鏈表2.移除鏈表元素3.奇偶鏈表4.回文鏈表5.小結本系列博文為leetcode-explore-learn子欄目學習筆記&#xff0c;如有不詳之處&#xff0c;請參考leetcode官網&#xff1a;https://leetcode-cn.com/explore/learn/card/linked-l…

探索式軟件測試

James A.Whittaker [美] 詹姆斯惠特克&#xff08;軟件測試領域絕對的大師&#xff09;著作《Exploratory Software Testing》&#xff0c;中文名《探索式軟件測試》&#xff0c;記得當時被這本書深深吸引啦&#xff08;我不知道有多少做測試的小伙伴看過這本書&#xff09;&am…

Linux線程池的設計

我設計這個線程池的初衷是為了與socket對接的。線程池的實現千變萬化&#xff0c;我得這個并不一定是最好的&#xff0c;但卻是否和我心目中需求模型的。現把部分設計思路和代碼貼出&#xff0c;以期拋磚引玉。個人比較喜歡搞開源&#xff0c;所以大家如果覺得有什么需要改善的…

算法(12)-leetcode-explore-learn-數據結構-雙鏈表的設計

leetcode-explore-learn-數據結構-鏈表4雙鏈表的設計本系列博文為leetcode-explore-learn子欄目學習筆記&#xff0c;如有不詳之處&#xff0c;請參考leetcode官網&#xff1a;https://leetcode-cn.com/explore/learn/card/linked-list/所有例題的編程語言為python 雙鏈表的設…

安全方面知識

什么是文件上傳漏洞 文件上傳漏洞是指 由于程序員在對用戶文件上傳部分的控制不足或者處理缺陷&#xff0c;而導致的用戶可以越過其本身權限向服務器上上傳可執行的動態腳本文件 這里上傳的文件可以是木馬&#xff0c;病毒&#xff0c;惡意腳本或者WebShell等。 這種攻擊方式是…

CE游戲外掛工具

CHEAT ENGINE(以下簡稱CE)是我見過的最優秀的游戲作弊工具。它的優點多不勝數&#xff0c;雖然單獨從搜索游 戲里面的數值來說&#xff0c;它并不比其他同類軟件強多少&#xff0c;但它不僅僅是個游戲修改工具&#xff0c;它還有其他游戲修改軟件所沒有的一些特點&#xff0c;例…

外掛編程-動作模擬技術

幾乎所有的游戲都有大量繁瑣和無聊的攻擊動作以增加玩家的 功力,還有那些數不完的迷宮,這些好像已經成為了角色游戲的代名詞。現在,外掛可以幫助玩家從這些繁瑣而無聊 的工作中擺脫出來。 1. 鼠標模擬技術 幾乎所有的游戲中都使用了鼠標來改變角色的位置和方向,玩家僅用…

算法(13)-leetcode-explore-learn-數據結構-鏈表小結

leetcode-explore-learn-數據結構-鏈表51.小結2.例題2.1合并兩個有序鏈表思路1:迭代思路2:遞歸2.2 兩數相加2.3 扁平化多級雙向鏈表2.4 復制帶隨機指針的鏈表2.5 旋轉鏈表本系列博文為leetcode-explore-learn子欄目學習筆記&#xff0c;如有不詳之處&#xff0c;請參考leetcode…

leetcode121買賣股票的最佳時機

給定一個數組&#xff0c;它的第 i 個元素是一支給定股票第 i 天的價格。 如果你最多只允許完成一筆交易&#xff08;即買入和賣出一支股票&#xff09;&#xff0c;設計一個算法來計算你所能獲取的最大利潤。 注意你不能在買入股票前賣出股票。 示例 1: 輸入: [7,1,5,3,6,…

epoll的內核實現

epoll是由一組系統調用組成。 int epoll_create(int size); int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event); int epoll_wait(int epfd, struct epoll_event *events,int maxevents, int timeout); select/poll的缺點在于&#xff1…

算法(14)-數據結構-二叉樹

leetcode-explore-learn-數據結構-二叉樹10.概述1.深度優先遍歷dfs1.1先序遍歷-中左右1.2中序遍歷-左中右1.3后序遍歷-左右中2.廣度優先遍歷bfs3.遍歷-常見問題3.1 二叉樹的最大深度自頂向下自底向上3.2對稱二叉樹3.3路徑總和4.重構-常見問題4.1根據中序和后序遍歷序列構造二叉…

多進程魚多線程的權衡選擇

最近有好多人在網上問道做游戲開發框架用多線程還是多進程呢,或者兩者之間的優缺點,等等類似的問題。下邊小高就帶您小小分析一下: 1、首先要明確進程和線程的含義:進程(Process)是具有一定獨立功能的程序關于某個數據集合上的一次運行活動,是系統進行資源分配和調度的一…