A. youcompleteme ctags/cscope哪個好用
YouCompleteMe的特別之處 基於語義補全 總所周知,Vim是一款文本編輯器。也就是說,其最基礎的工作就是編輯文本,而不管該文本的內容是什麼。在Vim被程序員所使用後,其慢慢的被肩負了與IDE一樣的工作,文本自動補全(ie.acp,omnicppcompleter)
B. youcompleteme ctags/cscope 哪個好
YouCompleteMe的特別之處
基於語義補全
總所周知,Vim是一款文本編輯器。也就是說,其最基礎的工作就是編輯文本,而不管該文本的內容是什麼。在Vim被程序員所使用後,其慢慢的被肩負了與IDE一樣的工作,文本自動補全(ie.acp,omnicppcompleter),代碼檢查(Syntastic)等等工作。
針對文本自動補全這個功能來說,主要有兩種實現方式。
基於文本
我們常用的omnicppcompleter,acp,vim自帶的c-x, c-n的實現方式就是基於文本。更通俗的說法,其實就是一個字:
猜
其通過文本進行一些正則表達式的匹配,再根據生成的tags(利用ctags生成)來實現自動補全的效果。
基於語義
顧名思義,其是通過分析源文件,經過語法分析以後進行補全。由於對源文件進行分析,基於語義的補全可以做到很精確。但是這顯然是vim所不可能支持的。而且經過這么多年發展,由於語法分析有很高的難度,也一直沒有合適的工具出現。直到,由apple支持的clang/llvm橫空出世。YouCompleteMe也正是在clang/llvm的基礎上進行構建的。
整合實現了多種插件
clang_complete
AutoComplPop
Supertab
neocomplcache
Syntastic(類似功能,僅僅針對c/c++/obj-c代碼)
支持語言
c
c++
obj-c
c#
python
對於其他的語言,會調用vim設置的omnifunc來匹配,因此同樣支持php,ruby等語言。
已知的有 * javascript —-tern_for_vim * ruby/java —-eclim
使用效果圖
使用感受
和IDE一樣,自動補全,
根據include的文件進行補全
不用再蹩腳的生成tags
補全非常精準,而且速度很快,不會有延遲(以前在大項目上,acp用起來實在是很卡)
支持類似tags的跳轉,跳到定義處以及使用處
出錯提示很智能,並且用起來真的是如絲般柔滑,不用輸入:w進行強制檢測
安裝
說完了那麼多好處,就要說到安裝了。不同於以往其他vim插件,YCM是一款編譯型的插件。在下載完後,需要手動編譯後才能使用。對應其他的插件來說,僅僅就是把.vim的文件丟到相應文件夾下就可以。而這也加大了使用YCM的難度。
安裝准備
最新版的Vim(7.3.584+),編譯時添加+python標志(已經安裝的可以通過vim --version查看)
cmake(mac可以通過homebrew安裝,brew install cmake,ubuntu可以通過sudo apt-get install cmake)
安裝vundle插件,用於安裝管理vim的插件
mac下快速安裝
在.vimrc中添加下列代碼
Bundle 'Valloric/YouCompleteMe'
保存退出後打開vim,在正常模式下輸入
:BundleInstall
等待vundle將YouCompleteMe安裝完成
而後進行編譯安裝:
cd ~/.vim/bundle/YouCompleteMe
./install --clang-completer
如果不需要c-family的補全,可以去掉--clang-completer。如果需要c#的補全,請加上--omnisharp-completer。
正常來說,YCM會去下載clang的包,如果已經有,也可以用系統--system-libclang。
就這樣,安裝結束。打開vim,如果沒有提示YCM未編譯,則說明安裝已經成功了。
手動編譯安裝
安裝的腳本並不是什麼時候都好用,至少對我來說是這樣的。安裝完之後出現了問題,參考issue#809。
在用:BundleInstall安裝完成或者使用
git clone --recursive https://github.com/Valloric/YouCompleteMe.git
獲取最新的倉庫,而後使用git submole update --init --recursive確認倉庫的完整性後,開始安裝流程。
下載最新的clang二進制文件 YCM要求clang版本 > 3.2,一般來說都是下載最新的。
安裝python-dev.(ubuntu下使用sudo apt-get install python-dev,mac下默認提供,否則請安裝command line tools)
編譯
cd ~
mkdir ycm_build
cd ycm_build
cmake -G 「Unix Makefiles」 -DPATH_TO_LLVM_ROOT=~/ycm_temp/llvm_root_dir . ~/.vim/bundle/YouCompleteMe/cpp make ycm_support_libs
這里需要注意的是,~/ycm_temp/llvm_root_dir中包含的是根據第一步下載的壓縮包解壓出來的內容(包括include, bin等等文件)。
這樣就完成了,開始感受YCM提供的完全不遜色於大型IDE所提供的自動補全功能吧。
配置
不同於很多vim插件,YCM首先需要編譯,另外還需要有配置。在vim啟動後,YCM會找尋當前路徑以及上層路徑的.ycm_extra_conf.py.在~/.vim/bundle/YouCompleteMe/cpp/ycm/.ycm_extra_conf.py中提供了默認的模板。也可以參考我的(就在模板上改改而已)。不過這個解決了標准庫提示找不到的問題。
一般來說,我會在~目錄下放一個默認的模板,而後再根據不同的項目在當前目錄下再拷貝個.ycm_extra_conf.py。
# This file is NOT licensed under the GPLv3, which is the license for the rest
# of YouCompleteMe.
#
# Here's the license text for this file:
#
# This is free and unencumbered software released into the public domain.
#
# Anyone is free to , modify, publish, use, compile, sell, or
# distribute this software, either in source code form or as a compiled
# binary, for any purpose, commercial or non-commercial, and by any
# means.
#
# In jurisdictions that recognize right laws, the author or authors
# of this software dedicate any and all right interest in the
# software to the public domain. We make this dedication for the benefit
# of the public at large and to the detriment of our heirs and
# successors. We intend this dedication to be an overt act of
# relinquishment in perpetuity of all present and future rights to this
# software under right law.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
# EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
# MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
# IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR
# OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
# ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
# OTHER DEALINGS IN THE SOFTWARE.
#
# For more information, please refer to <http://unlicense.org/>
import os
import ycm_core
# These are the compilation flags that will be used in case there's no
# compilation database set (by default, one is not set).
# CHANGE THIS LIST OF FLAGS. YES, THIS IS THE DROID YOU HAVE BEEN LOOKING FOR.
flags = [
'-Wall',
'-Wextra',
#'-Werror',
#'-Wc++98-compat',
'-Wno-long-long',
'-Wno-variadic-macros',
'-fexceptions',
'-stdlib=libc++',
# THIS IS IMPORTANT! Without a "-std=<something>" flag, clang won't know which
# language to use when compiling headers. So it will guess. Badly. So C++
# headers will be compiled as C headers. You don't want that so ALWAYS specify
# a "-std=<something>".
# For a C project, you would set this to something like 'c99' instead of
# 'c++11'.
'-std=c++11',
# ...and the same thing goes for the magic -x option which specifies the
# language that the files to be compiled are written in. This is mostly
# relevant for c++ headers.
# For a C project, you would set this to 'c' instead of 'c++'.
'-x',
'c++',
'-I',
'.',
'-isystem',
'/usr/include',
'-isystem',
'/usr/local/include',
'-isystem',
'/Library/Developer/CommandLineTools/usr/include',
'-isystem',
'/Library/Developer/CommandLineTools/usr/bin/../lib/c++/v1',
]
# Set this to the absolute path to the folder (NOT the file!) containing the
# compile_commands.json file to use that instead of 'flags'. See here for
# more details: http://clang.llvm.org/docs/JSONCompilationDatabase.html
#
# Most projects will NOT need to set this to anything; you can just change the
# 'flags' list of compilation flags. Notice that YCM itself uses that approach.
compilation_database_folder = ''
if os.path.exists( compilation_database_folder ):
database = ycm_core.CompilationDatabase( compilation_database_folder )
else:
database = None
SOURCE_EXTENSIONS = [ '.cpp', '.cxx', '.cc', '.c', '.m', '.mm' ]
def DirectoryOfThisScript():
return os.path.dirname( os.path.abspath( __file__ ) )
def ( flags, working_directory ):
if not working_directory:
return list( flags )
new_flags = []
make_next_absolute = False
path_flags = [ '-isystem', '-I', '-iquote', '--sysroot=' ]
for flag in flags:
new_flag = flag
if make_next_absolute:
make_next_absolute = False
if not flag.startswith( '/' ):
new_flag = os.path.join( working_directory, flag )
for path_flag in path_flags:
if flag == path_flag:
make_next_absolute = True
break
if flag.startswith( path_flag ):
path = flag[ len( path_flag ): ]
new_flag = path_flag + os.path.join( working_directory, path )
break
if new_flag:
new_flags.append( new_flag )
return new_flags
def IsHeaderFile( filename ):
extension = os.path.splitext( filename )[ 1 ]
return extension in [ '.h', '.hxx', '.hpp', '.hh' ]
def GetCompilationInfoForFile( filename ):
# The compilation_commands.json file generated by CMake does not have entries
# for header files. So we do our best by asking the db for flags for a
# corresponding source file, if any. If one exists, the flags for that file
# should be good enough.
if IsHeaderFile( filename ):
basename = os.path.splitext( filename )[ 0 ]
for extension in SOURCE_EXTENSIONS:
replacement_file = basename + extension
if os.path.exists( replacement_file ):
compilation_info = database.GetCompilationInfoForFile(
replacement_file )
if compilation_info.compiler_flags_:
return compilation_info
return None
return database.GetCompilationInfoForFile( filename )
def FlagsForFile( filename, **kwargs ):
if database:
# Bear in mind that compilation_info.compiler_flags_ does NOT return a
# python list, but a "list-like" StringVec object
compilation_info = GetCompilationInfoForFile( filename )
if not compilation_info:
return None
final_flags = (
compilation_info.compiler_flags_,
compilation_info.compiler_working_dir_ )
# NOTE: This is just for YouCompleteMe; it's highly likely that your project
# does NOT need to remove the stdlib flag. DO NOT USE THIS IN YOUR
# ycm_extra_conf IF YOU'RE NOT 100% SURE YOU NEED IT.
#try:
# final_flags.remove( '-stdlib=libc++' )
#except ValueError:
# pass
else:
relative_to = DirectoryOfThisScript()
final_flags = ( flags, relative_to )
return {
'flags': final_flags,
'do_cache': True
}
YouCompleteMe提供的其他功能
YCM除了提供了基本的補全功能,自動提示錯誤的功能外,還提供了類似tags的功能:
跳轉到定義GoToDefinition
跳轉到聲明GoToDeclaration
以及兩者的合體GoToDefinitionElseDeclaration
可以在.vimrc中配置相應的快捷鍵。
nnoremap <leader>gl :YcmCompleter GoToDeclaration<CR>
nnoremap <leader>gf :YcmCompleter GoToDefinition<CR>
nnoremap <leader>gg :YcmCompleter GoToDefinitionElseDeclaration<CR>
另外,YCM也提供了豐富的配置選項,同樣在.vimrc中配置。具體請參考
let g:ycm_error_symbol = '>>'
let g:ycm_warning_symbol = '>*'
同時,YCM可以打開location-list來顯示警告和錯誤的信息:YcmDiags。個人關於ycm的配置如下:
" for ycm
let g:ycm_error_symbol = '>>'
let g:ycm_warning_symbol = '>*'
nnoremap <leader>gl :YcmCompleter GoToDeclaration<CR>
nnoremap <leader>gf :YcmCompleter GoToDefinition<CR>
nnoremap <leader>gg :YcmCompleter GoToDefinitionElseDeclaration<CR>
nmap <F4> :YcmDiags<CR>
YCM提供的跳躍功能採用了vim的jumplist,往前跳和往後跳的快捷鍵為Ctrl+O以及Ctrl+I。
總結
YouCompleteMe是我用過的最爽的一個自動補全的插件了。之前使用acp時,遇到大文件基本上就卡死了,以至於都不怎麼敢使用。由於YCM使用的時C/S結構,部分使用vim腳本編寫,部分認為原生代碼,使得跑起來速度飛快。
C. 英語浪漫語句,越多越好!
1.Believe
me,I
was
prepared
for
everything,except
you.
—這一句很實用,很有想像力啊,大家可以學學。出自電影《偷天陷阱》。
2.Maybe
I
was
a
bird
in
another
life.
If
you』re
a
bird,
I』m
a
bird.
—我的前世也許是只鳥。
—如果你是一隻鳥,那我也是一隻鳥。出自電影《手札情緣》。
3.You
complete
me.
You
had
me
at
Hello,
you
had
me
at
Hello.
—你使我完美起來。
—第一次見面時你就擁有了我,擁有了我!出自電影《經濟人風波》,前一句現在很流行啊。
4.I
love
that
you
are
the
last
person
I
want
to
talk
to
before
I
go
to
sleep
at
night.
—我喜歡你是我晚上就寢前最想聊天的人。出自電影《當哈里遇到莎莉時》。
5.I
love
you
Molly.
I
always
have.
Ditto.
—
Ditto表示「同上」,意思是我也一樣,非常簡練。出自電影《幽靈》。
6.Choose
me.
Marry
me.
Let
me
make
you
happy.
—選我吧,娶我吧,讓我給你製造幸福。出自電影《我最好朋友的婚禮》。
7.Love
means
never
having
to
say
you』re
sorry
—愛,意味著永不說後悔。出自電影《愛情故事》。
8.When
I
am
out
,
take
me
as
the
wind.
—如果我不在,就把我當成風。很浪漫啊,來自電影《請介紹我的女友》。
9.I
love
you
not
because
of
who
you
are,
but
because
of
who
I
am
when
I
am
with
you.
—我愛你,並不是因為你,而是因為和你在一起的那個我。很令人有所感想的一句名言啊,很有哲學性。
10.To
the
world
you
may
be
one
person,
but
to
one
person
you
may
be
the
world.
—對整個世界來說你可能只是一個人;但是對一個人來說你可能就是整個世界。很有名的一句。
D. 求十句英語表白情話
1、Believe
me,I
was
prepared
for
everything
,except
you
.
2、艾莉:
Maybe
I
was
a
bird
in
another
life.
諾亞:If
you're
a
bird
,
I'm
a
bird.
————我的前世也許是只鳥。
————如果你是一隻鳥,那我也是一隻鳥。
電影《手札情緣》
3、You
complete
me.
Shot
up!
You
had
me
at
Hello,
you
had
me
at
Hello.
————你使我完美起來
————別這么說!第一次見面時你就擁有了我,擁有了我!
4、I
love
that
you
are
the
last
person
I
want
to
talk
to
before
I
go
to
sleep
at
night.
————我愛你是我晚上就寢前最想聊天的人。
5、I
love
you
Molly.
I
always
have.
Ditto.
6、Choose
me.
Marry
me
.
Let
me
make
you
happy.
————選我吧,娶我吧,讓我給你製造幸福。
7、Love
means
never
having
to
say
you're
sorry
————愛,意味著永不說後悔。
8、When
I
am
out
,
take
me
as
the
wind.
9、I
love
you
not
because
of
who
you
are,
but
because
of
who
I
am
when
I
am
with
you
10、To
the
world
you
may
be
one
person,
but
to
one
person
you
may
be
the
world.
E. ubuntu c++ 安裝youcompleteme vimrc文件在哪兒
一般來說,vim的配置文件.vimrc都在home目錄下。比如你的用戶名是master,那麼就是
/home/master/.vimrc這個文件
F. 表白 用英語怎麼說
1、Believe
me,I
was
prepared
for
everything
,except
you
.
----這一句很實用啊,很有想像力啊,大家可以學學。電影《偷天陷阱》
2、艾莉:
Maybe
I
was
a
bird
in
another
life.
諾亞:If
you're
a
bird
,
I'm
a
bird.
----我的前世也許是只鳥。
----如果你是一隻鳥,那我也是一隻鳥。
電影《手札情緣》
3、You
complete
me.
Shot
up!
You
had
me
at
Hello,
you
had
me
at
Hello.
----你使我完美起來
----別這么說!第一次見面時你就擁有了我,擁有了我!
出自電影《經濟人風波》,前一句話現在很流行啊。
4、I
love
that
you
are
the
last
person
I
want
to
talk
to
before
I
go
to
sleep
at
night.
----我愛你是我晚上就寢前最想聊天的人。
出自電影《當哈里遇到莉莎時》。
5、I
love
you
Molly.
I
always
have.
Ditto.
----
Ditto表示「同上」,意思是我也一樣,非常簡練。電影《幽靈》
6、Choose
me.
Marry
me
.
Let
me
make
you
happy.
----選我吧,娶我吧,讓我給你製造幸福。
電影《我最好朋友的婚禮》
7、Love
means
never
having
to
say
you're
sorry
----愛,意味著永不說後悔。.出自電影《愛情故事》。
8、When
I
am
out
,
take
me
as
the
wind.
----如果我不在,你把我當成風。
很浪漫啊,來自電影《請介紹我的女友》
9、I
love
you
not
because
of
who
you
are,
but
because
of
who
I
am
when
I
am
with
you
----很令人有所感想的一句名言啊,很有哲學性。
10、To
the
world
you
may
be
one
person,
but
to
one
person
you
may
be
the
world.
----這句話應該不用翻譯了吧。很有名的一句。時下,經常看到一些女生的QQ簽名里用的就是這一句,感覺說這句話有點狂。(補充一點,那些女生大都有點……有點什麼,大家自己想吧)
G. 愛是什麼請用電影或電視劇里的台詞回答。寫上出自哪。
you
complete
me.你使我完整--甜心先生
you
had
me
at
'hallo'在你說你好時你就擁有我了。--甜心先生
世界上最美的情話,經典的台詞~
可追問喲。
H. 誰有歐美電影裡面的精彩英文表白
1、Believe
me,I
was
prepared
for
everything
,except
you
.
————這一句很實用啊,很有想像力啊,大家可以學學。電影《偷天陷阱》
2、艾莉:
Maybe
I
was
a
bird
in
another
life.
諾亞:If
you're
a
bird
,
I'm
a
bird.
————我的前世也許是只鳥。
————如果你是一隻鳥,那我也是一隻鳥。
電影《手札情緣》
3、You
complete
me.
Shot
up!
You
had
me
at
Hello,
you
had
me
at
Hello.
————你使我完美起來
————別這么說!第一次見面時你就擁有了我,擁有了我!
出自電影《經濟人風波》,前一句話現在很流行啊。
4、I
love
that
you
are
the
last
person
I
want
to
talk
to
before
I
go
to
sleep
at
night.
————我愛你是我晚上就寢前最想聊天的人。
出自電影《當哈里遇到莉莎時》。
5、I
love
you
Molly.
I
always
have.
Ditto.
————
Ditto表示「同上」,意思是我也一樣,非常簡練。電影《幽靈》
6、Choose
me.
Marry
me
.
Let
me
make
you
happy.
————選我吧,娶我吧,讓我給你製造幸福。
電影《我最好朋友的婚禮》
7、Love
means
never
having
to
say
you're
sorry
————愛,意味著永不說後悔。.出自電影《愛情故事》。
8、When
I
am
out
,
take
me
as
the
wind.
————如果我不在,你把我當成風。
很浪漫啊,來自電影《請介紹我的女友》
9、I
love
you
not
because
of
who
you
are,
but
because
of
who
I
am
when
I
am
with
you
————很令人有所感想的一句名言啊,很有哲學性。
10、To
the
world
you
may
be
one
person,
but
to
one
person
you
may
be
the
world.
————這句話應該不用翻譯了吧。很有名的一句。時下,經常看到一些女生的QQ簽名里用的就是這一句
I. 浪漫的英語語句
1.believe
me,i
was
prepared
for
everything,except
you.
—這一句很實用,很有想像力啊,大家可以學學。出自電影《偷天陷阱》。
2.maybe
i
was
a
bird
in
another
life.
if
you』re
a
bird,
i』m
a
bird.
—我的前世也許是只鳥。
—如果你是一隻鳥,那我也是一隻鳥。出自電影《手札情緣》。
3.you
complete
me.
you
had
me
at
hello,
you
had
me
at
hello.
—你使我完美起來。
—第一次見面時你就擁有了我,擁有了我!出自電影《經濟人風波》,前一句現在很流行啊。
4.i
love
that
you
are
the
last
person
i
want
to
talk
to
before
i
go
to
sleep
at
night.
—我喜歡你是我晚上就寢前最想聊天的人。出自電影《當哈里遇到莎莉時》。
5.i
love
you
molly.
i
always
have.
ditto.
—
ditto表示「同上」,意思是我也一樣,非常簡練。出自電影《幽靈》。
6.choose
me.
marry
me.
let
me
make
you
happy.
—選我吧,娶我吧,讓我給你製造幸福。出自電影《我最好朋友的婚禮》。
7.love
means
never
having
to
say
you』re
sorry
—愛,意味著永不說後悔。出自電影《愛情故事》。
8.when
i
am
out
,
take
me
as
the
wind.
—如果我不在,就把我當成風。很浪漫啊,來自電影《請介紹我的女友》。
9.i
love
you
not
because
of
who
you
are,
but
because
of
who
i
am
when
i
am
with
you.
—我愛你,並不是因為你,而是因為和你在一起的那個我。很令人有所感想的一句名言啊,很有哲學性。
10.to
the
world
you
may
be
one
person,
but
to
one
person
you
may
be
the
world.
—對整個世界來說你可能只是一個人;但是對一個人來說你可能就是整個世界。很有名的一句。